Thema Datum  Von Nutzer Rating
Antwort
12.10.2019 08:18:45 Otto
NotSolved
12.10.2019 09:40:39 Gast62620
NotSolved
12.10.2019 10:45:00 Otto
NotSolved
12.10.2019 10:53:28 Gast17939
NotSolved
12.10.2019 11:44:37 Zwenn
NotSolved
12.10.2019 12:37:04 Otto
NotSolved
Rot PDFs in einer Datei zusammenfügen
13.10.2019 10:43:18 Zwenn
*****
Solved
14.10.2019 14:57:49 Otto
Solved

Ansicht des Beitrags:
Von:
Zwenn
Datum:
13.10.2019 10:43:18
Views:
1477
Rating: Antwort:
 Nein
Thema:
PDFs in einer Datei zusammenfügen

Hallo Otto,

ich habe das mal fertig überarbeitet. Die Kommentare sollten das Ganze erklären. Du musst ein paar Variablen auf Dein System anpassen. Die habe ich alle direkt unter die Variablendeklaration geschrieben und mit dem Hinweis Anpassen versehen. Die Pfade zu den PDF-Dateien müssen mit in den Zellen stehen. Der Vorteil ist, dass man so auch PDFs aus unterschiedlichen Verzeichnissen mergen kann. Der Nachteil ist, man muss eben alle Pfade mit einfügen. Das kannst Du ggf. ja umschreiben, wenn Du es anders brauchst.

 

Noch ein wichtiger Hinweis:

Das Makro fügt die angegebenen PDFs nur bei jedem zweiten Lauf zusammen. Ansonsten wird immer nur das erste PDF genommen. Ich habe keine Ahnung warum. Beendet man Excel nach dem ersten Lauf und startet es wieder, läuft auch das Makro direkt wieder korrekt. Vielleicht ist das auch nur auf meinem Rechner so. Ich verwende Windows 10 (aktueller Patchstand) und Excel 2016 in der 32 Bit Version.

Sub DateienMergenZuPDF()

'Das Makro wurde mit dem PDFCreator 3.5 entwickelt
'Verwendet wird die COM-Schnittstelle des PDFCreator:
'https://docs.pdfforge.org/pdfcreator/latest/de/pdfcreator/com-interface/
'
'Der PDFCreator muss auf dem Rechner installiert sein, auf dem das Makro ausgeführt wird
'Es reicht die kostenfreie Version
'Der PDF-Architect muss nicht installiert sein
'https://www.pdfforge.org/de/pdfcreator/download

Dim pdfCreator As Object
Dim pdfCreatorQueue As Object
Dim PDFs As Long
Dim startZeilePDFnamen As Long
Dim letzteZeilePDFnamen As Long
Dim quellTabelle As String
Dim quellSpalte As Integer
Dim ausgabePfad As String
Dim ausgabePDFname As String

  quellTabelle = ActiveSheet.Name        '<-- Anpassen, wenn es eine feste Tabelle sein soll
  quellSpalte = 1                        '<-- Anpassen, voreingestellt ist Spalte A
  ausgabePfad = "E:\"                    '<-- Anpassen, auf abschließenden Backslash achten
  ausgabePDFname = "Zusammengefasst.pdf" '<-- Anpassen, auf abschließendes .pdf achten
  startZeilePDFnamen = 2                 '<-- Anpassen, ab welcher Zeile die PDF Namen in der Tabelle stehen
  
  'Feststellen wieviele Zeilen in der festgelegten Spalte der festgelegten Tabelle belegt sind
  letzteZeilePDFnamen = Sheets(quellTabelle).Cells(Rows.Count, quellSpalte).End(xlUp).Row
  
  'Einleitend eine grundsätzliche Erklärung zur Verwendung der COM-Schnittstelle
  'des PDFCreators. Die API-Dokumentation ist für V2, das Makro ist aber bereits
  'für den PDFCreator 3.5 geschrieben
  '
  'Auszug unter der Überschrift "Modularität" aus:
  'https://docs.pdfforge.org/pdfcreator/latest/de/pdfcreator/com-interface/user-manual/basics/workflow-comparsion-v1-7-v2/
  '
  'Im Vergleich dazu hat die COM Schnittstelle des neuen PDFCreators (v2.*) fünf
  'verschiedene Objekte: das Queue Objekt, das PrintJob Objekt, das PDFCreatorObj
  'Objekt, das Printers Objekt, das OutputFiles Objekt. Der Fokus liegt hierbei
  'auf den drei ersten Objekten, da diese ausreichen, um den prinzipiellen Ablauf
  'zu beschreiben. Das Queue Objekt fungiert als Behälter für alle Druckaufträge,
  'die konvertiert werden sollen. Durch das Queue Objekt hat man die volle Kontrolle
  'über diesen Behälter. Jeder einkommende Druckauftrag wird gewrappt und
  'repräsentiert durch ein PrintJob Objekt, das es ermöglicht, spezielle
  'Einstellungen für einen Druckauftrag zu setzen, wie z.B. unter welchem Profil
  'dieser Druckauftrag konvertiert werden soll. Das PDFCreatorObj Objekt ermöglicht
  'das Erfragen von Informationen zur PDFCreator Instanz, ob beispielsweise die
  'PDFCreator Anwendung gerade läuft oder nicht.
  '
  'Wir setzen die beiden benötigten der 5 möglichen Objekte zum Mergen von Druckaufträgen
  Set pdfCreator = CreateObject("PDFCreator.PDFCreatorObj")
  Set pdfCreatorQueue = CreateObject("PDFCreator.JobQueue")
  
  'https://docs.pdfforge.org/pdfcreator/latest/de/pdfcreator/com-interface/reference/queue/
  'sagt, Initialize() muss aufgerufen werden:
  '"Zusammenfassung: Um das erzeugte COM-Objekt nutzen zu können, muss als aller erstes diese
  'Methode aufgerufen werden."
  '(Unter dem Link sieht man übrigens unter der ersten Überschrift "Die Queue" und hinter
  'dem Wort "ProgID" darunter, genau den Schriftzug, den wir für die Initialisierung des
  'benötigten Queue-Objektes weiter oben verwendet haben.)
  Call pdfCreatorQueue.Initialize
  
  'Die zusammenzuführenden Dateien in die Queue schieben
  'Laut Referenz funktioniert das nur mit PostScript Dateien
  'Das geht in der Version 3.5 aber auch mit PDF-Dateien
  'https://docs.pdfforge.org/pdfcreator/latest/de/pdfcreator/com-interface/reference/pdfcreator/
  'Unter der letzten Überschrift "void AddFileToQueue(string path)" steht:
  'Zusammenfassung: Fügt eine Datei direkt zur Queue hinzu, ohne dass gedruckt werden muss.
  'Momentan können jedoch nur .PS Dateien direkt hinzugefügt werden, dies könnte sich mit
  'den nächsten Versionen der COM-Schnittstelle ändern.
  'path: Der Pfad zur Datei, die hinzugefügt werden soll.
  '
  'Schleife über alle PDF-Dateinamen mit Pfad zum Erstellen der Druckjobs
  'Das Makro geht also davon aus, dass der Pfad mit in den Zellen steht
  For PDFs = startZeilePDFnamen To letzteZeilePDFnamen
    Call pdfCreator.AddFileToQueue(Sheets(quellTabelle).Cells(PDFs, quellSpalte).Value)
  Next PDFs
  
  'Wir bewegen uns in der Dokumentation jetzt wieder hier:
  'https://docs.pdfforge.org/pdfcreator/latest/de/pdfcreator/com-interface/reference/queue/
  'Jetzt unter der Überschrift "void MergeAllJobs()"
  'Wir fügen also alle bisher erstellten Druckjobs zu einem zusammen
  Call pdfCreatorQueue.MergeAllJobs
  
  'Den "Druck" als PDF-Datei in den oben definierten Ausgabepfad  unter dem
  'oben definierten PDF-Ausgabenamen durchführen
  Call pdfCreatorQueue.NextJob.ConvertTo(ausgabePfad & ausgabePDFname)
  
  'Aufräumen
  'COM freigeben
  'Unter der letzten Überschrift "void ReleaseCom()" den Kasten beachten:
  'https://docs.pdfforge.org/pdfcreator/latest/de/pdfcreator/com-interface/reference/queue/
  Call pdfCreatorQueue.ReleaseCom
  
  Set pdfCreatorQueue = Nothing
  Set pdfCreator = Nothing
End Sub

 

Viele Grüße,

Zwenn


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
12.10.2019 08:18:45 Otto
NotSolved
12.10.2019 09:40:39 Gast62620
NotSolved
12.10.2019 10:45:00 Otto
NotSolved
12.10.2019 10:53:28 Gast17939
NotSolved
12.10.2019 11:44:37 Zwenn
NotSolved
12.10.2019 12:37:04 Otto
NotSolved
Rot PDFs in einer Datei zusammenfügen
13.10.2019 10:43:18 Zwenn
*****
Solved
14.10.2019 14:57:49 Otto
Solved