Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1828to1832
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

PDF Dateien mit pdftk zusammenführen

PDF Dateien mit pdftk zusammenführen
06.05.2021 19:29:48
Dominik
Hallo zusammen,
ich habe folgendes Problem.
Um ein Kostenantragsformular zu erstellen möchte ich verschiedene pdf Dateien zusammenführen.
Die Antragsseite wird in Excel erstellt. Anschließend sollen die einzelnen Angebote mit dem Antrag zusammengeführt werden.
Die Angebote hole ich mir über den Dateipfad in mein Excel. Hier sollen sie ausgelesen und über pdftk zusammengestellt und als Mail verschickt werden.
Jetzt klappt aber leider das zusammenführen nicht richtig. Ich bekomme immer nur die Antragsdatei ohne Anhang ausgegeben.
Hier mein Code:
Option Explicit

Sub drucken()
' Antragsnummer +1
Tabelle1.Range("D12") = Tabelle1.Range("D12") + 1
' Dokument drucken
'Tabelle1.Range("B2:J39").PrintOut
'Als Pdf speichern
Tabelle1.Range("B2:J39").ExportAsFixedFormat xlTypePDF, Filename:="P:\Einkauf\Kostenantragsformulare\Kostenantragsformular HL\Kostenantragsformular HL" & Cells(12, 4) & ".pdf", Openafterpublish:=False
Call DateiZusammenführen
'Dokument leeren
Tabelle1.Range("C17:J30") = ""
End Sub

Sub DateiZusammenführen()
Const Kostenstelle As String = "HL"
Const Quellordner As String = "P:\Einkauf\Kostenantragsformulare\Kostenantragsformular " & Kostenstelle & "\"
Dim Zieldatei As String
Dim PfadGesamt As String
Dim PfadAngebot() As String
Dim i As Integer
Dim a As Integer
Dim objOutlook As Object, objMail As Object
Dim Antrag As String
Antrag = Quellordner & Zieldatei
Zieldatei = "Kostenantragsformular " & Kostenstelle & Cells(12, 4) & ".pdf"
'Anzahl der Pfade speichern
For a = 1 To Cells(Rows.Count, 11).End(xlUp).Row - 17
Next a
'Anzahl Pfade
ReDim PfadAngebot(a - 1)
'Anzahl Pfade Speichern
For i = 0 To UBound(PfadAngebot)
If Cells(i + 17, 11) = "" Then
GoTo Weiterspringen
Else
PfadAngebot(i) = Cells(i + 17, 11).Value
End If
'Pfad(i).PrintOut
Next i
Weiterspringen:
'Pfade Verbinden
PfadGesamt = join(PfadAngebot, " ") 'Antrag & " " &
'    Range("A1") = PfadGesamt
If PfadGesamt = " " Then
Call MsgBox("Keine Dateien gefunden.", vbExclamation, "Hinweis")
Else
'Dateien zusammenführen
'PDFtk
Call Shell(PathName:="C:\Program Files (x86)\PDFtk\bin\pdftk.exe " & _
PfadGesamt & "cat output" & Chr$(34) & Quellordner & Zieldatei & Chr$(34), WindowStyle:=vbNormalFocus)
Call Application.Wait(Time:=Now + TimeSerial(0, 0, 3))
'An Email Anhängen
Set objOutlook = CreateObject(Class:="Outlook.Application")
Set objMail = objOutlook.CreateItem(0)
With objMail
.To = "info@info.de"
.cc = ""
.Subject = "Kostenantrag " & Kostenstelle & Cells(12, 4)
.Body = "Hallo," & vbLf & vbLf & "im Anhang der Kostenantrag " & Kostenstelle & Cells(12, 4) & "." & _
vbLf & vbLf & "Gruß" & vbLf & Cells(35, 4)
Call .Attachments.Add(Quellordner & Zieldatei)
Call .Display
End With
Set objMail = Nothing
Set objOutlook = Nothing
End If
End Sub
Hier auch die Datei:
https://www.herber.de/bbs/user/146041.xlsm
Ich vermute mal, dass im Shell der Fehler liegt. Komm aber grad nicht drauf.
Ich wäre sehr über eure Hilfe dankbar! Wenn ihr noch mehr Infos braucht, immer gerne melden.
Viele Grüße
Dominik

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: PDF Dateien mit pdftk zusammenführen
06.05.2021 20:14:25
Nepumuk
Hallo Dominik,
da fehlen die Leerzeichen. Also:
" cat output "
Gruß
Nepumuk
AW: PDF Dateien mit pdftk zusammenführen
06.05.2021 21:06:23
Dominik
Hallo Nepumuk,
das hatte ich am Anfang auch schon probiert, klappt aber leider nicht. (hab ich mit dem Code eh teilweise bei dir bedient)
Kann es sein, dass er in die PfadGesamt Variable irgendwas falsch einliest? Im Lokalfenster sieht aber alles gut aus.
Die Variable hatte ich auch erst noch so definiert:
PfadGesamt = Antrag & " " & join(PfadAngebot, " ")
War eigentlich das Ziel, die Excel Datei als pdf mitzunemen. Aber irgendwie nimmt er eh nur die.
Viele Grüße
Dominik
Anzeige
AW: PDF Dateien mit pdftk zusammenführen
07.05.2021 07:44:15
Nepumuk
Hallo Dominik,
kann ich leider nicht nachvollziehen.
Gruß
Nepumuk
AW: PDF Dateien mit pdftk zusammenführen
07.05.2021 08:05:10
Dominik
mmhh...
Gibt es eine Möglichkeit, die Anzeige vom Shell pdftk länger anzeigen zu lassen?
Mit vbNormalFocus blinkt es nur kurz auf. Ich konnte aber ein Error erkennen. Vielleicht gibt's auch da das Problem.
Per Screenshot hab ich den Moment leider nicht getroffen. Ich probiere es aber noch ein paar mal.
Viele Grüße
Dominik
AW: PDF Dateien mit pdftk zusammenführen
07.05.2021 08:22:48
Dominik
Ich habe doch noch einen Screenshot erwischt.
Da steht:
Error: Unable to find file.
Error: Failed to open PDF file:
P:\Einkauf\Kostenantragsformulare\Kostenantragsformular
Error: Unable to find file.
Error: Failed to open PDF file:
HL\Kostenantragsformular
Error: Unable to find file.
Error: Failed to open PDF file:
HL7.pdf
Also anscheinend zerlegt er die Pfade irgendwie Falsch.
Gruß
Dominik
Anzeige
AW: PDF Dateien mit pdftk zusammenführen
07.05.2021 09:38:01
Nepumuk
Hallo Dominik,
teste mal so:

Call Shell(PathName:="C:\Program Files (x86)\PDFtk\bin\pdftk.exe " & _
PfadGesamt & " cat output " & Quellordner & Zieldatei, WindowStyle:=vbNormalFocus)
Gruß
Nepumuk
AW: PDF Dateien mit pdftk zusammenführen
10.05.2021 14:25:08
Dominik
Hallo Nepumuk,
das klapp leider auch nicht.
Nochmal zum Verständnis,
ich gebe zuerst alle Pfade mit Dateien an, die zusammen geführt werden sollen und dann den Zielpfad mit der endgültigen Datei oder?
Kann es sein, dass im pdftk noch eine Einstellung verändert werden muss oder vorher noch eine Einstellung im Excel freigeschaltet werden muss?
Viele Grüße
Dominik
Anzeige
AW: PDF Dateien mit pdftk zusammenführen
10.05.2021 14:30:36
Nepumuk
Hallo Dominik,
was steht in Spalte 11 (K), der gesamte Pfad oder nur die Dateinamen?
Gruß
Nepumuk
AW: PDF Dateien mit pdftk zusammenführen
10.05.2021 16:07:46
Dominik
Hallo Nepumuk,
da steht der ganze Pfad.
z.b.
P:\Einkauf\Angebote\02_Logistik\Hochhubwagen\STILLshop_Angebot_2021-04-16_08-20.pdf
Den Pfad hole ich mir über Doppelklick und folgenden Code:
Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim varCol: varCol = ""
varCol = "K"
On Error GoTo Fehlerbearbeitung
Dim strOrdner As String
With Application.FileDialog(msoFileDialogFilePicker)
.InitialFileName = "P:\Einkauf\Angebote\"
.Title = "Angebot Auswählen"
.AllowMultiSelect = True
.ButtonName = "Auswahl..."
.Filters.Add "Dokumente", "*.pdf", 1
.InitialView = msoFileDialogViewList
If .Show = -1 Then
strOrdner = .SelectedItems(1)
'            If Right(strOrdner, 1)  "\" Then strOrdner = strOrdner & "\"
'          Else
'            strOrdner = ""
End If
End With
If Target.Cells.Count = 1 Then
If varCol = "" Then varCol = Target.Column
If Not Intersect(Target, Columns(varCol)) Is Nothing Then
Cancel = True
Target.Value = strOrdner
Target.HorizontalAlignment = xlLeft
End If
End If
If strOrdner = "" Then
MsgBox ("Keine Datei gewählt!")
End If
Fehlerbearbeitung:
Exit Sub
End Sub
Viele Grüße
Dominik
Anzeige
PDF Dateien mit pdftk zusammenführen
10.05.2021 16:01:43
Anton
Hallo Dominik,
du hast Leerzeichen in den Pfaden zu den pdf-Dateien, die werden aber als Trennzeichen zwischen den Dateien erkannt,
deswegen bekommst du die Fehler in der Ausgabe von pdftk.exe.
Um das zu verhindern musst du IMHO die Pfade in Anführungszeichen setzen:

PfadAngebot(i) = CHR(34) & Cells(i + 17, 11).Value & CHR(34)
mfg Anton
AW: PDF Dateien mit pdftk zusammenführen
10.05.2021 16:48:36
Dominik
Hallo zusammen,
jetzt klappt es!
hier nochmal der komplette Code:

Sub DateiZusammenführen()
Const Kostenstelle As String = "HL"
Const Quellordner As String = "P:\Einkauf\Kostenantragsformulare\Kostenantragsformular_" & Kostenstelle & "\"
Dim Zieldatei As String
Dim PfadGesamt As String
Dim PfadAngebot() As String
Dim i As Integer
Dim a As Integer
Dim objOutlook As Object, objMail As Object
Dim Antrag As String
Zieldatei = "Kostenantragsformular_" & Kostenstelle & Cells(12, 4) & ".pdf"
Antrag = Quellordner & Zieldatei
'Anzahl der Pfade speichern
For a = 1 To Cells(Rows.Count, 11).End(xlUp).Row - 17
Next a
'Anzahl Pfade
ReDim PfadAngebot(a - 1)
'Anzahl Pfade Speichern
For i = 0 To UBound(PfadAngebot)
If Cells(i + 17, 11) = "" Then
GoTo Weiterspringen
Else
PfadAngebot(i) = Chr(34) & Cells(i + 17, 11) & Chr(34)
End If
'Pfad(i).PrintOut
Next i
Weiterspringen:
'Pfade Verbinden
PfadGesamt = Chr(34) & Antrag & Chr(34) & " " & join(PfadAngebot, " ")
'    Range("A1") = PfadGesamt
If PfadGesamt = " " Then
Call MsgBox("Keine Dateien gefunden.", vbExclamation, "Hinweis")
Else
'Dateien zusammenführen
'PDFtk
Call Shell(PathName:="C:\Program Files (x86)\PDFtk\bin\pdftk.exe " & _
PfadGesamt & " cat output " & Quellordner & "Zusammenfassung_" & Zieldatei, WindowStyle:=vbMaximizedFocus)
Call Application.Wait(Time:=Now + TimeSerial(0, 0, 3))
'An Email Anhängen
Set objOutlook = CreateObject(Class:="Outlook.Application")
Set objMail = objOutlook.CreateItem(0)
With objMail
.To = ""
.cc = ""
.Subject = "Kostenantrag " & Kostenstelle & Cells(12, 4)
.Body = "Hallo," & vbLf & vbLf & "im Anhang der Kostenantrag " & Kostenstelle & Cells(12, 4) & "." & _
vbLf & vbLf & "Gruß" & vbLf & Cells(35, 4)
Call .Attachments.Add(Quellordner & Zieldatei)
Call .Display
End With
Set objMail = Nothing
Set objOutlook = Nothing
End If
End Sub
Es gab auch noch ein Problem mit der Variable "Zieldatei". Eigentlich ist das die Exceldatei, die ich am Anfang in ein Pdf umwandle und dann mit den entsprechenden Pfaden verbinden will. Allerdings kann er das pdf im Shell dann nicht einfach überschreiben. Deshalb hab ich da einfach noch das "Zusammenfassung_" eingefügt. So funktioniert es auf jeden Fall!
Vielen Dank für eure Mühen.
Liebe Grüße
Dominik
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige