In dem Zusammenhang dürfte tatsächlich GhostScript und pdftk passend sein. Da müsste man sich aber erst einmal einlesen.
Als komplettes Gegenteil, habe ich mit Autoit eine wirkliche Quick&Dirty Lösung auf die Schnelle erarbeitet (der erste Kaffee Schub wirkt). Ohne GUI, ohne Prüfung von Sonderzeichen in Dateinamen usw.
Bedarf etwas Vorbereitung. ITler dürften damit aber klarkommen.
Macht neue PDFs paarweise (1-2, 3-4 und wenn es ungerade ist 39-39 = die einzelne Seite 39). Wie gesagt : Quick & Dirty:
>Notwendige Software:
Es müssen der
Adobe Reader DC,
GhostScript
und
FreePDF installiert sein
>Vorbereitungen:
-Den FreePDF als Standard-Drucker setzen
-Adobe Reader muß einmal gestartet werden (wegen Akzeptieren der Adobe Lizenzbestimmungen)
-Da es ein Dialoggesteuertes Skript ist, wird ein Rechner benötigt, an dem zu dieser Zeit nicht gearbeitet wird (d.h. über Nacht oder über die Mittagspause / Meeting anwerfen)
-Das PDF zu 1.pdf umbenennen und in denselben Ordner der kompilierten .exe ablegen (habe mir das Maskieren von Sonderzeichen gespart; wie gesagt auf die Schnelle programmiert).
-Ein Probedruck mit dem FreePDF muß einmal gestartet werden & den Haken 'PDF öffnen' beim Druckdialog entfernen (FreePDF speichert das dann in seine Konfiguation).
>Eintragungen im Quellcode:
-Die erste Seitenzahl vom PDF eintragen (beginnt hier mit Seite 1)
-Die letzte Seitenzahl vom PDF eintragen (endet bei meinem Test-PDF bei Seite 39)
-Den Output-Ordner der PDFs angeben (hier : C:\temp)
>Quellcode
Code:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <MsgBoxConstants.au3>
#include <WinAPIFiles.au3>
#include <file.au3>
; XXXXXXXXXXXXXX Notwendige USER EINGABEN:
;Seitenzahl des Dokuments angeben
$Anfang = 1
$Ende = 39
;PDF-Datei zu 1.pdf umbenennen
ShellExecute(@scriptdir & "\1.pdf")
;PDF-Output-Ordner angeben:
$PDFoutput = "C:\temp"
; ENDE XXXXXXXXXXXXXX Notwendige USER EINGABEN
While 1
For $i = $Anfang To $Ende Step 2
if $i = $Ende then
;wenn Dokument ungerade ist/nicht paarweise ; z.B. 1-11
$j = $i
Else
;wenn Dokument paarweise ist ; z.B. 1-10
$j = $i+1
EndIf
;Seitenzahl paarweise setzen für weitere Verwendung; z.B. 39-39
$line = $i & "-" & $j
;Warten bis PDF aktiv
WinWaitActive("1.pdf - Adobe Acrobat Reader DC","")
WinWait("1.pdf - Adobe Acrobat Reader DC","")
;Druckdialog starten
Send("^p")
;Windows Druckdialog
WinWaitActive("Drucken","Zu druckende Seiten")
WinWait("Drucken","Zu druckende Seiten")
;Seiten :
ControlClick("Drucken","Zu druckende Seiten", "[CLASS:Button; INSTANCE:12]")
Send("{TAB}")
;Seitenzahl
send($line)
Send("{ENTER}")
;FreePDF
WinWaitActive("FreePDF 4.14","High Quality")
WinWait("FreePDF 4.14","High Quality")
;Dateinamen gemäß Seitenzahl
send($line)
;Ablegen = Button 5
ControlClick("FreePDF 4.14","High Quality", "[CLASS:ThunderRT5CommandButton; INSTANCE:5]")
;PDF-Output-Ordner wählen
WinWaitActive("Speichern unter","FreePDF File (.pdf)")
WinWait("Speichern unter","FreePDF File (.pdf)")
send($PDFoutput & "\" & $line & ".pdf")
ControlClick("Speichern unter","FreePDF File (.pdf)", "[CLASS:Button; INSTANCE:2]")
;bei größeren Dokumenten den Sleep von 10 Sekunden aktivieren
;sleep(10000)
;Warten bis PDF wieder im Vordergrund / aktiv
WinWaitActive("1.pdf - Adobe Acrobat Reader DC","")
WinWait("1.pdf - Adobe Acrobat Reader DC","")
Next
;Adobe schließen
ProcessClose("AcroRd32.exe")
Exit
WEnd
Mein Testnotebook hat etwa pro PDF-Paar 4 Sekunden gebraucht. Bei 2600 Seiten (1300 PDF-Paaren) wird etwas Zeit benötigt. Wie gesagt, einen PC nehmen an dem nicht gearbeitet wird.