teekanne
Goto Top

PDF-Sammelmappe per VBA splitten

Guten Morgen,

ich suche schon seit längerem nach einer Möglichkeit, eine mehrseitige Sammelmappe (>50 Seiten) in einzelne PDF zu speichern und dies als VBA.
Wenn jemand eine Idee hätte, wäre ich dankbar über Hilfe und Anregungen, Google konnte mir bisher nicht weiter helfen.

Auch wäre interessant das Gegenteil durchzuführen, also diverse PDF mithilfe von VBA zu einer Sammelmappe zusammenzufassen.

Ich bedanke mich im voraus für eure Hilfe!

Content-ID: 516651

Url: https://administrator.de/contentid/516651

Ausgedruckt am: 25.11.2024 um 04:11 Uhr

StefanKittel
StefanKittel 19.11.2019 um 07:33:20 Uhr
Goto Top
Moin,

Schau Dir mal pdftk an.
Das kannst Du über VBA aufrufen.

Es geht per OCX auch direkt mit dem Acrobat-Reader, aber viel aufwendiger.

https://www.pdflabs.com/tools/pdftk-server/

Stefan
Bitboy
Bitboy 19.11.2019 um 09:40:16 Uhr
Goto Top
Moin,

so vllt: https://it-muecke.de/node/711
Direkt VBA wird wahrscheinlich enorm aufwendig, es ist sinnvoller ein Programm zu finden, dass du mit Parametern aus dem VBA aufrufen kannst.

Grüße
TeeKanne
TeeKanne 19.11.2019 aktualisiert um 10:03:17 Uhr
Goto Top
Vielen Dank für die Anregungen! Leider habe ich nicht die Möglichkeit andere Programme zu installieren und hatte deswegen auf eine halbwegs umsetzbare Lösung gehofft. Trotzdem Danke face-smile
colinardo
Lösung colinardo 19.11.2019, aktualisiert am 20.11.2019 um 10:03:02 Uhr
Goto Top
Servus again @TeeKanne,
ich suche schon seit längerem nach einer Möglichkeit, eine mehrseitige Sammelmappe (>50 Seiten) in einzelne PDF zu speichern und dies als VBA.
ist eine Kleinigkeit mit dem Acrobat-COM-Object, das bietet ja schon die entsprechende Methode extractPages() dafür an face-wink.
(Quell- und Ziel-Ordner in den Konstanten im Kopf anpassen.)
' ============================================================  
' Aufsplitten von allen PDFs eines Ordners in einzelne Seiten  
' ============================================================  
' Quellordner  
Const FOLDER_IN = "D:\quelle"  
' Ausgabeordner  
Const FOLDER_OUT = "D:\ziel"  

' create objects  
Set objAcro = CreateObject("AcroExch.App")  
Set fso = CreateObject("Scripting.FileSystemObject")   

'  Sicherheitsabfrage  
If MsgBox("Der folgende Prozess findet im Hintergrund statt. Dies kann etwas dauern, bitte haben sie etwas Geduld." & vbNewline & vbNewline & "Sollen wir starten?",vbInformation Or vbSystemModal or vbYesNo,"Split PDFs") = vbNo then wscript.quit  

' Ausgabeordner erstellen wenn er noch nicht existiert  
If Not fso.FolderExists(FOLDER_OUT) Then fso.CreateFolder FOLDER_OUT

' Für jedes File im Quellordner  
For Each file In fso.GetFolder(FOLDER_IN).Files
	' wenn es eine *.pdf Erweiterung hat  
	If LCase(fso.GetExtensionName(file.Name)) = "pdf" Then  
		' Acrobat Objekte erstellen  
		Set docAV = CreateObject("AcroExch.AVDoc")  
		Set docPD = CreateObject("AcroExch.PDDoc")  
		' PDF öffnen  
		docAV.Open file.Path,""  
		
		' Document Object holen  
		Set docPD = docAV.GetPDDoc()
		Set jsDoc = docPD.GetJSObject()
		' Alle Seiten des PDFs verarbeiten  
		For p = 0 To jsDoc.numPages - 1
			' Ausgabepfad zusammensetzen  
			strFileOut = FOLDER_OUT & "\" & fso.GetBaseName(file.Name) & "_" & Right("00" & p+1,3) & ".pdf"  
			' aktuelle Seite extrahieren und speichern  
			jsDoc.extractPages p,p,strFileOut
		Next
		' Document schließen  
		jsDoc.closeDoc()
		'cleanup  
		Set jsDoc = Nothing
		Set docAV = Nothing
		Set docPD = Nothing
	End If
Next
' Acrobat schließen  
objAcro.Exit()

MsgBox "Verarbeitung abgeschlossen!",vbInformation  
' cleanup  
Set fso = Nothing
Set objAcro = Nothing

Code zum Mergen von PDFs gerne gegen Aufwand per PN

-edit- zum Zusammenfassen siehe folgenden Post

Grüße Uwe
colinardo
colinardo 19.11.2019, aktualisiert am 20.11.2019 um 10:02:36 Uhr
Goto Top
Als Ergänzung hier noch das Zusammenfassen von mehreren PDFs eines Ordners zu einem einzigen:
' =================================================================  
' Zusammenfassen von allen PDFs eines Ordners in ein einzelnes PDF  
' =================================================================  

' Quellordner  
Const FOLDER_IN = "D:\Quelle"  
' Ausgabeordner  
Const FILE_OUT = "D:\Ziel\merged_document.pdf"  

' create objects  
Set objAcro = CreateObject("AcroExch.App")  
Set fso = CreateObject("Scripting.FileSystemObject")   

' Sicherheitsabfrage  
If MsgBox("Der folgende Prozess findet im Hintergrund statt. Dies kann etwas dauern, bitte haben sie etwas Geduld." & vbNewline & vbNewline & "Sollen wir starten?",vbInformation Or vbSystemModal or vbYesNo,"Split PDFs") = vbNo then wscript.quit  

' Prüfen ob Datei schon existiert  
If fso.FileExists(FILE_OUT) Then
	If MsgBox("Ausgabedatei existiert bereits, möchten sie sie überschreiben?",vbQuestion Or vbYesNo,"Ausgabedatei überschreiben") = vbYes Then  
		fso.DeleteFile FILE_OUT
	Else
		MsgBox "Abbruch.", vbExclamation  
		WScript.Quit
	End If
End If

Set jsDoc = Nothing

' Für jedes File im Quellordner  
For Each file In fso.GetFolder(FOLDER_IN).Files
	' wenn es eine *.pdf Erweiterung hat  
	If LCase(fso.GetExtensionName(file.Name)) = "pdf" Then  
		If Not jsDoc Is Nothing Then
			jsDoc.insertPages (jsDoc.numPages - 1),file.Path
		Else
			' Acrobat Objekte erstellen  
			Set docAV = CreateObject("AcroExch.AVDoc")  
			Set docPD = CreateObject("AcroExch.PDDoc")  
			' PDF öffnen  
			docAV.Open file.Path,""  
			' Document Object holen  
			Set docPD = docAV.GetPDDoc()
			Set jsDoc = docPD.GetJSObject()
		End If
	End If
Next

If Not jsDoc Is Nothing Then
	jsDoc.saveAs FILE_OUT
	jsDoc.closeDoc()
End If

' Acrobat schließen  
objAcro.Exit()

MsgBox "Verarbeitung abgeschlossen!",vbInformation  
' cleanup  
Set jsDoc = Nothing
Set docAV = Nothing
Set docPD = Nothing
Set fso = Nothing
Set objAcro = Nothing