diff --git a/SDL/Fakturierung/cAutomailversand.vb b/SDL/Fakturierung/cAutomailversand.vb
index 511ba1ad..8fdbc829 100644
--- a/SDL/Fakturierung/cAutomailversand.vb
+++ b/SDL/Fakturierung/cAutomailversand.vb
@@ -5,7 +5,7 @@ Imports VERAG_PROG_ALLGEMEIN
Public Class cAutomailversand
- Sub sendMailSammelrechnung(_Rechnungsdatum As Date, SammelrechungArt As Integer, FirmaID As Integer, Optional KundenNr As Integer = -1, Optional mailoeffnen As Boolean = False)
+ Sub sendMailSammelrechnung(_Rechnungsdatum As Date, SammelrechungArt As Integer, FirmaID As Integer, Optional KundenNr As Integer = -1, Optional mailoeffnen As Boolean = False, Optional faktGruppe As String = "")
Try
Dim sql As New VERAG_PROG_ALLGEMEIN.SQL
@@ -29,7 +29,7 @@ Public Class cAutomailversand
LEFT JOIN tblKundenErweitert on tblKundenErweitert.kde_KundenNr = Rechnungsausgang.RechnungsKundenNr
INNER JOIN Währungstabelle on LandKz = Rechnungsausgang.RechnungsLandKz
WHERE Rechnungsausgang.Status IN (2) and Rechnungsausgang.Automailversand_sent is null And Rechnungsausgang.Firma_ID = '" & FirmaID & "' And Rechnungsausgang.Sammelrechnung = '" & SammelrechungArt & "' And CONVERT(DATE,Rechnungsausgang.Rechnungsdatum,104) = '" & _Rechnungsdatum.ToShortDateString & "'
- and isnull(Rechnungsausgang.Automailversand,0) = 1 and RechnungsNr > 0 " & IIf(KundenNr > 0, " AND RechnungsKundenNr = " & KundenNr, "") & "
+ and isnull(Rechnungsausgang.Automailversand,0) = 1 and Rechnungsausgang.Automailversand_sent = NULL and RechnungsNr > 0 " & IIf(KundenNr > 0, " AND RechnungsKundenNr = " & KundenNr, "") & "
GROUP BY RechnungsNr, RechnungsKundenNr,isnull(tblKundenErweitert.kde_keineMWSt,0),RechnungsLandKz, MitgliedslandEU
ORDER BY RechnungsLandKz, RechnungsKundenNr"
@@ -39,7 +39,7 @@ Public Class cAutomailversand
LEFT JOIN tblKundenErweitert on tblKundenErweitert.kde_KundenNr = Rechnungsausgang.RechnungsKundenNr
INNER JOIN Währungstabelle on LandKz = Rechnungsausgang.RechnungsLandKz
WHERE Rechnungsausgang.Status IN (2) and Rechnungsausgang.Automailversand_sent is null And Rechnungsausgang.Firma_ID = '" & FirmaID & "' And Rechnungsausgang.Sammelrechnung = '" & SammelrechungArt & "' And CONVERT(DATE,Rechnungsausgang.Rechnungsdatum,104) = '" & _Rechnungsdatum.ToShortDateString & "'
- and isnull(Rechnungsausgang.Automailversand,0) = 1 and RechnungsNr > 0 " & IIf(KundenNr > 0, " AND RechnungsKundenNr = " & KundenNr, "") & "
+ and isnull(Rechnungsausgang.Automailversand,0) = 1 and Rechnungsausgang.Automailversand_sent = NULL and RechnungsNr > 0 and FakturierungsGruppe = '" & faktGruppe & "'" & IIf(KundenNr > 0, " AND RechnungsKundenNr = " & KundenNr, "") & "
GROUP BY RechnungsNr, RechnungsKundenNr,tblKundenErweitert.kde_SR_IM_EX
ORDER BY RechnungsLandKz, RechnungsKundenNr"
@@ -155,26 +155,31 @@ Public Class cAutomailversand
Dim listPDFs As New List(Of String)
Dim showError As Boolean = False
+
+ showError = mailoeffnen 'bei MailÖffnen fehler anzeigen!
+
setEmailText(row, FirmaID, RechnungsNr, Mailsubject, HTMLMail, SammelrechungArt, dt, BelegartenNr)
- If do_SR(row.Item("RechnungsKundenNr"), FirmaID, SammelrechungArt, Rechnungsdatum, RechnungsNr, DruckDatumZeit, MDMKopiedrucken, listPDFs,,,, showError, AbfertigungsNr) Then
- loadAndSetAnhaenge(SR_DT, ATTACHMENTS, listPDFs)
+ If do_SR(row.Item("RechnungsKundenNr"), FirmaID, SammelrechungArt, Rechnungsdatum, RechnungsNr, DruckDatumZeit, MDMKopiedrucken, listPDFs,,,, showError, AbfertigungsNr, faktGruppe) Then
+ loadAndSetAnhaenge(SR_DT, ATTACHMENTS, listPDFs)
- If VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM Then Mailsubject &= " TEST"
+ If VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM Then Mailsubject &= " TEST"
- If mailoeffnen Then
- Dim Mail = createMail(Mailsubject, HTMLMail, ATTACHMENTS, MailTo, MailtoCC, MailtoBCC, FirmaID)
- If setLog(SR_DT, row, FirmaID, SammelrechungArt, Rechnungsdatum,,,,,,, Mail) Then
- Mail.Display()
- End If
+ If mailoeffnen Then
+ Dim Mail = createMail(Mailsubject, HTMLMail, ATTACHMENTS, MailTo, MailtoCC, MailtoBCC, FirmaID)
+ If setLog(SR_DT, row, FirmaID, SammelrechungArt, Rechnungsdatum,,,,,,, Mail) Then
+ Mail.Display()
+ End If
- Else
+ Else
- Dim TextHTML = ""
- TextHTML &= HTMLMail
- TextHTML &= cFakturierung.getSignature("DE", FirmaID, True, True,,,,, True)
- HTMLMail = "
" & TextHTML & "
"
+ Dim TextHTML = ""
+ TextHTML &= HTMLMail
+ TextHTML &= cFakturierung.getSignature("DE", FirmaID, True, True,,,,, True)
+ HTMLMail = "" & TextHTML & "
"
- If setLog(SR_DT, row, FirmaID, SammelrechungArt, Rechnungsdatum, ATTACHMENTS, Mailsubject, HTMLMail, MailTo, MailtoCC, MailtoBCC,,, FISKAL) Then
+ If setLog(SR_DT, row, FirmaID, SammelrechungArt, Rechnungsdatum, ATTACHMENTS, Mailsubject, HTMLMail, MailTo, MailtoCC, MailtoBCC,,, FISKAL) Then
+
+ End If
End If
@@ -182,8 +187,6 @@ Public Class cAutomailversand
End If
- End If
-
Next
Next
@@ -267,7 +270,10 @@ Public Class cAutomailversand
Dim HTMLMail As String = ""
Dim listPDFs As New List(Of String)
- Dim showError As Boolean = False
+
+ 'Dim showError As Boolean = False
+ 'showError = mailoeffnen 'bei MailÖffnen fehler anzeigen!
+
setEmailText(r, FirmaID, RECHNUNG.RechnungsNr, Mailsubject, HTMLMail, RECHNUNG.Sammelrechnung, dt, RECHNUNG.BelegartenNr, SPEDBUCH, RECHNUNG)
loadAndSetAnhaenge(dt, ATTACHMENTS, listPDFs, RECHNUNG, SPEDBUCH)
@@ -470,10 +476,10 @@ Public Class cAutomailversand
End Sub
- Private Function do_SR(kdNr As Integer, FirmaID As Integer, Sammelrechnungsart As Integer, Rechnungsdatum As Date, lastAktuelle_RgNr As Integer, DruckDatumZeit As Date, Kopie As Boolean, listPDFs As List(Of String), Optional EinzelAnlagen As Boolean = False, Optional Sammelbericht As Boolean = True, Optional saveInThereFore As Boolean = False, Optional showError As Boolean = True, Optional AbfertigungsArt As String = "")
+ Private Function do_SR(kdNr As Integer, FirmaID As Integer, Sammelrechnungsart As Integer, Rechnungsdatum As Date, lastAktuelle_RgNr As Integer, DruckDatumZeit As Date, Kopie As Boolean, listPDFs As List(Of String), Optional EinzelAnlagen As Boolean = False, Optional Sammelbericht As Boolean = True, Optional saveInThereFore As Boolean = False, Optional showError As Boolean = True, Optional AbfertigungsArt As String = "", Optional faktGruppe As String = "")
Dim RechnungsNrisSet As Boolean = False
- RechnungsNrisSet = cFakturierung.doSAMMELRechnungsDruck(FirmaID, Sammelrechnungsart, Rechnungsdatum, Rechnungsdatum, "", EinzelAnlagen, Sammelbericht, kdNr, 4, listPDFs, "", lastAktuelle_RgNr, DruckDatumZeit, , , ,, ,, AbfertigungsArt, True, Kopie, True, saveInThereFore, showError)
+ RechnungsNrisSet = cFakturierung.doSAMMELRechnungsDruck(FirmaID, Sammelrechnungsart, Rechnungsdatum, Rechnungsdatum, "", EinzelAnlagen, Sammelbericht, kdNr, 4, listPDFs, "", lastAktuelle_RgNr, DruckDatumZeit,,,,,, faktGruppe, AbfertigungsArt, True, Kopie, True, saveInThereFore, showError)
Return RechnungsNrisSet
End Function
diff --git a/SDL/Fakturierung/cFakturierung.vb b/SDL/Fakturierung/cFakturierung.vb
index 1fda4478..66f8a5cb 100644
--- a/SDL/Fakturierung/cFakturierung.vb
+++ b/SDL/Fakturierung/cFakturierung.vb
@@ -1860,34 +1860,20 @@ Public Class cFakturierung
Dim p As New GrapeCity.ActiveReports.Export.Pdf.Section.PdfExport
rpt.Run(False)
p.NeverEmbedFonts = ""
- 'p.Version = Section.PdfVersion.PDFA3b - NICHT AUSREICHEND FÜR ZUGFERD! AUSSERDEM WIR PROF-VERSION BENÖTIGT!
+ 'p.Version = GrapeCity.ActiveReports.Export.Pdf.Section.PdfVersion.PDFA3b '- NICHT AUSREICHEND FÜR ZUGFERD! AUSSERDEM WIR PROF-VERSION BENÖTIGT!
+ p.Version = GrapeCity.ActiveReports.Export.Pdf.Section.PdfVersion.Pdf17
p.Export(rpt.Document, tmpPath)
- '------------------- WEGEN PDF/A3
-
- 'Dim srcPdf = tmpPath
- 'Dim dstPdf = "pdfa3.pdf"
- 'Dim iccPath = "sRGB.icc"
-
- 'Dim reader As New iText.Kernel.Pdf.PdfReader(srcPdf)
- 'Dim writer As New PdfWriter(dstPdf)
-
- 'Dim iccStream = New FileStream(iccPath, FileMode.Open, FileAccess.Read)
- 'Dim icc = ICC_Profile.GetInstance(iccStream)
-
- 'Dim outputIntent As New PdfOutputIntent("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", iccStream)
-
- 'Dim pdf As New iText.Pdfa.PdfADocument(writer, iText.Kernel.Pdf.PdfAConformanceLevel.PDF_A_3B, outputIntent)
-
- 'pdf.Close()
-
- '------------------- WEGEN PDF/A3
-
Dim Paramslist As New cParameterList(VERAG_PROG_ALLGEMEIN.cAllgemein.PROGID)
Dim enableZugpferd = Paramslist.GET_PARAMETER_VALUE_BOOL("ZUGFeRD")
If enableZugpferd Then
- tmpPath = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.addAttachementToPDF(tmpPath, createZUGFeRD(True, Rechnung,), "ZUGFeRD-invoice.xml")
+ 'tmpPath = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.addAttachementToPDF(tmpPath, createZUGFeRD(True, Rechnung,), "ZUGFeRD-invoice.xml")
+ Dim pdfA = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.ConvertToPdfA3(tmpPath)
+ tmpPath = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.addZugferdXML(pdfA, createZUGFeRD(True, Rechnung,))
+
+
+
Else
Dim Zugferdpath = createZUGFeRD(True, Rechnung)
@@ -2872,7 +2858,9 @@ Public Class cFakturierung
Dim Paramslist As New cParameterList(VERAG_PROG_ALLGEMEIN.cAllgemein.PROGID)
Dim enableZugpferd = Paramslist.GET_PARAMETER_VALUE_BOOL("ZUGFeRD")
If enableZugpferd Then
- tmpPath = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.addAttachementToPDF(tmpPath, createZUGFeRD(True, RECHNUNG,), "ZUGFeRD-invoice.xml")
+ 'tmpPath = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.addAttachementToPDF(tmpPath, createZUGFeRD(True, RECHNUNG,), "ZUGFeRD-invoice.xml")
+ Dim pdfA = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.ConvertToPdfA3(tmpPath)
+ tmpPath = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.AddZugferdXml(tmpPath, createZUGFeRD(True, RECHNUNG,))
Else
Dim Zugferdpath = createZUGFeRD(True, RECHNUNG)
@@ -5365,7 +5353,8 @@ Public Class cFakturierung
Dim Paramslist As New cParameterList(VERAG_PROG_ALLGEMEIN.cAllgemein.PROGID)
Dim enableZugpferd = Paramslist.GET_PARAMETER_VALUE_BOOL("ZUGFeRD")
If enableZugpferd Then
- tmpPath = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.addAttachementToPDF(tmpPath, createZUGFeRD(False, Nothing, SammelrechnungsDT, , rpt), "ZUGFeRD-invoice.xml")
+ 'tmpPath = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.addAttachementToPDF(tmpPath, createZUGFeRD(False, Nothing, SammelrechnungsDT, , rpt), "ZUGFeRD-invoice.xml")
+ tmpPath = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.AddZugferdXml(tmpPath, createZUGFeRD(False, Nothing, SammelrechnungsDT, , rpt))
Else
Dim Zugferdpath = createZUGFeRD(False, Nothing, SammelrechnungsDT,, rpt)
If Zugferdpath IsNot Nothing AndAlso Zugferdpath <> "" Then
@@ -6060,7 +6049,8 @@ Public Class cFakturierung
Dim Paramslist As New cParameterList(VERAG_PROG_ALLGEMEIN.cAllgemein.PROGID)
Dim enableZugpferd = Paramslist.GET_PARAMETER_VALUE_BOOL("ZUGFeRD")
If enableZugpferd Then
- tmpPath = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.addAttachementToPDF(tmpPath, createZUGFeRD(False, Nothing, dt, rpt), "ZUGFeRD-invoice.xml")
+ 'tmpPath = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.addAttachementToPDF(tmpPath, createZUGFeRD(False, Nothing, dt, rpt), "ZUGFeRD-invoice.xml")
+ tmpPath = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.AddZugferdXml(tmpPath, createZUGFeRD(False, Nothing, dt, rpt))
Else
Dim Zugferdpath = createZUGFeRD(False, Nothing, dt, rpt)
If Zugferdpath IsNot Nothing AndAlso Zugferdpath <> "" Then
diff --git a/SDL/frmdynMailvorlage.Designer.vb b/SDL/frmdynMailvorlage.Designer.vb
index 6854819c..554af8e8 100644
--- a/SDL/frmdynMailvorlage.Designer.vb
+++ b/SDL/frmdynMailvorlage.Designer.vb
@@ -361,6 +361,8 @@ Partial Class frmdynMailvorlagen
Me.rtb_Emailtext.Size = New System.Drawing.Size(868, 307)
Me.rtb_Emailtext.TabIndex = 22
Me.rtb_Emailtext.Text = ""
+ Me.rtb_Emailtext.WordWrap = False
+ Me.rtb_Emailtext.ScrollBars = RichTextBoxScrollBars.Both
'
'cbxFirmaChange
'
diff --git a/SDL/frmdynMailvorlage.vb b/SDL/frmdynMailvorlage.vb
index 7765b93f..bb3df839 100644
--- a/SDL/frmdynMailvorlage.vb
+++ b/SDL/frmdynMailvorlage.vb
@@ -291,7 +291,7 @@ Public Class frmdynMailvorlagen
txtkonserve = New cTextkonserve(dgvMailvorlagen.SelectedRows(0).Cells("txt_id").Value)
- rtb_Emailtext.Text = txtkonserve.txt_text
+ 'rtb_Emailtext.Text = txtkonserve.txt_text
txtBezeichnung.Text = txtkonserve.txt_bezeichnung
txtBetreff.Text = txtkonserve.txt_betreff
cbxAktiv.Checked = txtkonserve.txt_dynMailvorlage
@@ -474,12 +474,11 @@ Public Class frmdynMailvorlagen
End Sub
- Private Function insertlinebreaks(text As String) As String
-
- Return text.ToString.Replace(vbLf, "
" & vbLf)
-
+ Private Function InsertLineBreaks(text As String) As String
+ Return text.Replace(vbCrLf, "
" & vbCrLf) _
+ .Replace(vbLf, "
" & vbLf) _
+ .Replace(vbCr, "
" & vbCr)
End Function
-
Private Sub cbSendungsvermerk_CheckedChanged(sender As Object, e As EventArgs) Handles cbSendungsvermerk.CheckedChanged
txtSendungsvermerk.Visible = cbSendungsvermerk.Checked
diff --git a/SDL/kunden/frmKundenUebersichtZollRgDetails.vb b/SDL/kunden/frmKundenUebersichtZollRgDetails.vb
index 4bd5d3d1..952020f9 100644
--- a/SDL/kunden/frmKundenUebersichtZollRgDetails.vb
+++ b/SDL/kunden/frmKundenUebersichtZollRgDetails.vb
@@ -1,6 +1,7 @@
-Imports System.Reflection
Imports System.Globalization
+Imports System.IO
+Imports VERAG_PROG_ALLGEMEIN
Public Class frmKundenUebersichtZollRgDetails
Dim RK_ID As Integer = -1
@@ -140,7 +141,11 @@ Public Class frmKundenUebersichtZollRgDetails
Console.WriteLine(output)
Console.WriteLine(err)
- If err <> "" Then MsgBox(err)
+ If err <> "" Then
+ Dim tmpPath_Report = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getTMPPath("MUSTANG-REPORT", ".pdf", , False)
+ CreateValidationPdf(err, Path_temp, RK_ID, tmpPath_Report)
+ If tmpPath_Report <> "" Then Process.Start(tmpPath_Report)
+ End If
End Using
@@ -151,4 +156,57 @@ Public Class frmKundenUebersichtZollRgDetails
End If
End Sub
+
+ Private Function ExtractMustangResult(log As String, Invoice_file As String, RK_ID As Integer) As String
+
+ Dim pdfStatus = If(log.Contains("Parsed PDF:invalid"), "INVALID", "VALID")
+ Dim xmlStatus = If(log.Contains("XML:valid"), "VALID", "INVALID")
+ Dim FileInfo As New FileInfo(Invoice_file)
+ Dim Invoice As New cRechnungsausgang(RK_ID)
+
+ Dim profile As String = "EN16931"
+ If log.Contains("EN16931") Then profile = "EN16931"
+
+ Dim took As String = ""
+ Dim m = System.Text.RegularExpressions.Regex.Match(log, "Took:(\d+)ms")
+ If m.Success Then took = m.Groups(1).Value & " ms"
+
+ Return $"ZUGFeRD VALIDATION RESULT" & vbCrLf &
+ $"--------------------------------" & vbCrLf &
+ $"PDF File : {FileInfo.Name}" & vbCrLf &
+ $"Invoice No : {Invoice.RechnungsNr}" & vbCrLf &
+ $"PDF Status : {pdfStatus}" & vbCrLf &
+ $"XML Status : {xmlStatus}" & vbCrLf &
+ $"Profile : {profile}" & vbCrLf &
+ $"Duration : {took}"
+
+ End Function
+
+ Public Sub CreateValidationPdf(log As String, Invoice_file As String, RK_ID As Integer, outputPath As String)
+
+ Dim resultText = ExtractMustangResult(log, Invoice_file, RK_ID)
+
+ Using fs As New FileStream(outputPath, FileMode.Create)
+ Using doc As New itextsharp.text.Document()
+ Dim writer = itextsharp.text.pdf.PdfWriter.GetInstance(doc, fs)
+
+ doc.Open()
+
+ Dim titleFont = itextsharp.text.FontFactory.GetFont("Arial", 14, itextsharp.text.Font.BOLD)
+ Dim bodyFont = itextsharp.text.FontFactory.GetFont("Arial", 10)
+
+ doc.Add(New itextsharp.text.Paragraph("ZUGFeRD VALIDATION REPORT", titleFont))
+ doc.Add(New itextsharp.text.Paragraph(" "))
+
+ Dim lines = resultText.Split(vbCrLf)
+
+ For Each line In lines
+ doc.Add(New itextsharp.text.Paragraph(line, bodyFont))
+ Next
+ doc.Close()
+ End Using
+ End Using
+
+ End Sub
+
End Class
\ No newline at end of file
diff --git a/VERAG_PROG_ALLGEMEIN/DATENSERVER/cDATENSERVER.vb b/VERAG_PROG_ALLGEMEIN/DATENSERVER/cDATENSERVER.vb
index 18b68ba3..083483d1 100644
--- a/VERAG_PROG_ALLGEMEIN/DATENSERVER/cDATENSERVER.vb
+++ b/VERAG_PROG_ALLGEMEIN/DATENSERVER/cDATENSERVER.vb
@@ -3,9 +3,12 @@ Imports System.Drawing
Imports System.Drawing.Printing
Imports System.IO
Imports System.Net
+Imports System.Text
Imports System.Text.RegularExpressions
Imports System.Windows.Forms
+Imports DocumentFormat.OpenXml
Imports iTextSharp.text.pdf
+Imports Org.apache.pdfbox.pdmodel.graphics.color
Imports Spire.Pdf
Imports Spire.Pdf.Attachments
Imports Spire.Pdf.Print
@@ -1393,10 +1396,10 @@ Public Class cFormularManager
For Each pdfPath As String In PDFFile
- Using doc As New Spire.Pdf.PdfDocument(pdfPath)
+ Using doc As New Spire.Pdf.PdfDocument(pdfPath)
- If doc.Pages.Count = 0 Then Continue For
- Dim size = doc.Pages(0).Size
+ If doc.Pages.Count = 0 Then Continue For
+ Dim size = doc.Pages(0).Size
If size.Width <= 10 OrElse size.Height <= 10 Then Continue For 'zu kleine Seiten überspringen
' --- Druckeinstellungen ---
doc.PrintSettings.PrinterName = printerName
@@ -1405,9 +1408,9 @@ Public Class cFormularManager
doc.PrintSettings.SelectSinglePageLayout(PdfSinglePageScalingMode.FitSize, True)
doc.Print()
- End Using
+ End Using
- Next
+ Next
Catch ex As Exception
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
@@ -2437,6 +2440,112 @@ Public Class DATENVERVER_OPTIONS
End Function
+ Public Shared Function addZugferdXML(File As String, attPath As String) As String
+ Dim tempFile As String = File & ".tmp"
+
+ Using reader As New PdfReader(File)
+ Using fs As New FileStream(tempFile, FileMode.Create)
+ Using stamper As New PdfStamper(reader, fs)
+
+ Dim xmlBytes = System.IO.File.ReadAllBytes(attPath)
+
+ Dim fileName As String = "factur-x.xml"
+
+ Dim fspec = PdfFileSpecification.FileEmbedded(
+ stamper.Writer,
+ fileName,
+ fileName,
+ xmlBytes,
+ "application/xml",
+ Nothing,
+ 0
+ )
+
+ fspec.Put(PdfName.AFRELATIONSHIP, New PdfName("Alternative"))
+
+ stamper.Writer.AddFileAttachment("ZUGFeRD", fspec)
+
+ Dim af As New PdfArray()
+ af.Add(fspec.Reference)
+ stamper.Writer.ExtraCatalog.Put(PdfName.AFRELATIONSHIP, af)
+
+
+ SetZugferdXmp(stamper, fileName)
+
+ End Using
+ End Using
+ End Using
+
+ System.IO.File.Delete(File)
+ System.IO.File.Move(tempFile, File)
+
+ Return File
+ End Function
+
+
+ Public Shared Function ConvertToPdfA3(inputPdf As String) As String
+
+ Dim tempFile As String = inputPdf & ".tmp"
+
+ Dim reader As New PdfReader(inputPdf)
+
+ Using fs As New FileStream(tempFile, FileMode.Create, FileAccess.Write)
+ Using stamper As New PdfStamper(reader, fs)
+
+ ' ✔ DAS ist in iTextSharp 5 der einzig relevante PDF/A-Baustein
+ Dim iccPath As String =
+ "C:\Windows\System32\spool\drivers\color\sRGB Color Space Profile.icm"
+
+ Dim icc = ICC_Profile.GetInstance(File.ReadAllBytes(iccPath))
+
+ stamper.Writer.SetOutputIntents(
+ "Custom",
+ "",
+ "http://www.color.org",
+ "sRGB IEC61966-2.1",
+ icc
+ )
+
+ stamper.Writer.PDFXConformance = PdfWriter.PDFX32002
+
+ End Using
+ End Using
+
+ reader.Close()
+
+ If File.Exists(inputPdf) Then File.Delete(inputPdf)
+ File.Move(tempFile, inputPdf)
+
+ Return inputPdf
+
+ End Function
+
+
+ Private Shared Sub SetZugferdXmp(stamper As PdfStamper, xmlFileName As String)
+
+ Dim xmp As String =
+ "" &
+ "" &
+ "" &
+ "" &
+ "3" &
+ "B" &
+ "INVOICE" &
+ "" & xmlFileName & "" &
+ "2.1" &
+ "EN 16931" &
+ "" &
+ "" &
+ "" &
+ ""
+
+ stamper.XmpMetadata = Encoding.UTF8.GetBytes(xmp)
+
+
+ End Sub
+
Public Shared Function addAttachementToPDF(File As String, attPath As String, Optional renameFile As String = "") As String
Try
@@ -2496,9 +2605,9 @@ Public Class barcodeToPdf
Public width As Integer
Public height As Integer
Public onpage = 1
- Public rotate As Drawing.RotateFlipType = RotateFlipType.RotateNoneFlipNone
+ Public rotate As System.Drawing.RotateFlipType = RotateFlipType.RotateNoneFlipNone
- Sub New(image As Image, x As Integer, y As Integer, width As Integer, height As Integer, onpage As Integer, rotate As Drawing.RotateFlipType)
+ Sub New(image As Image, x As Integer, y As Integer, width As Integer, height As Integer, onpage As Integer, rotate As System.Drawing.RotateFlipType)
Me.image = image
Me.x = x
Me.y = y