fix für PDF-Attachment bei MergePDFs

This commit is contained in:
2026-06-25 14:14:44 +02:00
parent 66c6f84725
commit c829d349aa
14 changed files with 491 additions and 55 deletions

View File

@@ -1,12 +1,13 @@
Imports iTextSharp.text.pdf
Imports System.IO
Imports Microsoft.Office.Interop
Imports System.IO
Imports System.Net
Imports GrapeCity.ActiveReports
Imports System.Net.Mail
Imports System.Reflection
Imports System.Text.RegularExpressions
Imports System.Windows.Documents
Imports com.sun.tools.internal.ws.wsdl.document.mime
Imports GrapeCity.ActiveReports
Imports itextsharp.text.pdf
Imports Microsoft.Office.Interop
Imports VERAG_PROG_ALLGEMEIN
@@ -238,7 +239,7 @@ Public Class frmFormulare
MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("DE Vollmacht (indirekt)", FormularManagerArten.DE_Vollmacht_indirekt))
MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("DE Fiskal-Vollmacht", FormularManagerArten.DE_Fiskal))
MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("AT Vollmacht", FormularManagerArten.AT_Vollmacht))
MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("AT Vollmacht 4200 EV", FormularManagerArten.AT_Vollmacht_EV))
MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("AT Vollmacht EV", FormularManagerArten.AT_Vollmacht_EV))
MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("AT Fiskal-Vollmacht", FormularManagerArten.AT_Fiskal))
MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Export Vollmacht", FormularManagerArten.VERAG_EXPORT))
@@ -309,7 +310,7 @@ Public Class frmFormulare
MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("DE Vollmacht (indirekt)", FormularManagerArten.DE_Vollmacht_indirekt))
MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("DE Fiskal-Vollmacht", FormularManagerArten.DE_Fiskal))
MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("AT Vollmacht", FormularManagerArten.AT_Vollmacht))
MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("AT Vollmacht 4200 EV", FormularManagerArten.AT_Vollmacht_EV))
MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("AT Vollmacht EV", FormularManagerArten.AT_Vollmacht_EV))
MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("AT Fiskal-Vollmacht", FormularManagerArten.AT_Fiskal))
MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("GB Vollmacht Import/Export", FormularManagerArten.GB_Vollmacht_IE))
MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("GB Vollmacht indirekt", FormularManagerArten.GB_Vollmacht_indirekt))
@@ -359,7 +360,7 @@ Public Class frmFormulare
MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("DE Fiskal-Vollmacht", FormularManagerArten.DE_Fiskal))
MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("DE/AT Vollmacht (indirekt)", FormularManagerArten.DE_Vollmacht_indirekt))
MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("AT Vollmacht", FormularManagerArten.AT_Vollmacht))
MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("AT Vollmacht 4200 EV", FormularManagerArten.AT_Vollmacht_EV))
MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("AT Vollmacht EV", FormularManagerArten.AT_Vollmacht_EV))
MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("AT Fiskal-Vollmacht", FormularManagerArten.AT_Fiskal))
MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("GB Vollmacht Import/Export", FormularManagerArten.GB_Vollmacht_IE))
MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("GB Vollmacht indirekt", FormularManagerArten.GB_Vollmacht_indirekt))
@@ -7152,7 +7153,8 @@ Public Class FormularManagerNEU
If reader.NumberOfPages > 0 Then
document.Open()
addAttachmentToCurrentPDF(reader, pdf)
addOnlyFirstAttachmentToCurrentPDF(reader, pdf)
pdf.AddDocument(reader)
reader.Close()
@@ -7200,6 +7202,7 @@ Public Class FormularManagerNEU
For i As Integer = 0 To filespecs.Size - 1 Step 2
' Get the attachment's file specification
Dim fileArray As PdfDictionary = filespecs.GetAsDict(i + 1)
Dim file As PdfDictionary = fileArray.GetAsDict(PdfName.EF)
@@ -7213,12 +7216,77 @@ Public Class FormularManagerNEU
' Add the attachment to the new PDF
Dim fileSpec As PdfFileSpecification = PdfFileSpecification.FileEmbedded(copy, Nothing, fileName, fileContent)
copy.AddFileAttachment(fileName, fileSpec)
Exit For
Next
Next
End If
End If
End Function
Public Shared Function addOnlyFirstAttachmentToCurrentPDF(reader As PdfReader, copy As PdfCopy) As Boolean
Dim catalog As PdfDictionary = reader.Catalog
Dim names As PdfDictionary = CType(PdfReader.GetPdfObject(catalog.Get(PdfName.NAMES)), PdfDictionary)
If names IsNot Nothing Then
Dim embeddedFiles As PdfDictionary = CType(PdfReader.GetPdfObject(names.Get(PdfName.EMBEDDEDFILES)), PdfDictionary)
If embeddedFiles IsNot Nothing Then
Dim filespecs As PdfArray = embeddedFiles.GetAsArray(PdfName.NAMES)
If filespecs Is Nothing Then Return False
For i As Integer = 0 To filespecs.Size - 1 Step 2
Dim fileArray As PdfDictionary = filespecs.GetAsDict(i + 1)
Dim file As PdfDictionary = fileArray.GetAsDict(PdfName.EF)
For Each key As PdfName In file.Keys
Dim stream As PRStream =
CType(PdfReader.GetPdfObject(file.GetAsIndirectObject(key)), PRStream)
Dim fileName As String = fileArray.GetAsString(key).ToString()
Dim fileContent As Byte() = PdfReader.GetStreamBytes(stream)
Dim fileSpec As PdfFileSpecification =
PdfFileSpecification.FileEmbedded(copy, Nothing, fileName, fileContent)
copy.AddFileAttachment(fileName, fileSpec)
Return True ' only one attachment ever gets copied
Next
Next
End If
End If
Return False
End Function
Private Shared Function HasAnyAttachment(reader As PdfReader) As Boolean
Dim catalog As PdfDictionary = reader.Catalog
Dim names As PdfDictionary =
TryCast(PdfReader.GetPdfObject(catalog.Get(PdfName.NAMES)), PdfDictionary)
If names Is Nothing Then Return True
Dim embeddedFiles As PdfDictionary =
TryCast(PdfReader.GetPdfObject(names.Get(PdfName.EMBEDDEDFILES)), PdfDictionary)
If embeddedFiles Is Nothing Then Return False
Dim filespecs As PdfArray = embeddedFiles.GetAsArray(PdfName.NAMES)
Return filespecs IsNot Nothing AndAlso filespecs.Size > 2
End Function