From 1f4e8c3575b3ba4db068d0fee8ee909354e545fa Mon Sep 17 00:00:00 2001 From: sameerkhan001 Date: Thu, 10 Sep 2026 16:13:30 +0530 Subject: [PATCH 1/4] 1053818: Added sample code for PDF/A-2B PDF/A-3B PDF/PDF/A-4 --- .../.NET/Convert-PDF-to-PDF-A-2b.slnx | 3 + .../Convert-PDF-to-PDF-A-2b.csproj | 15 ++++ .../Convert-PDF-to-PDF-A-2b/Data/Input.pdf | Bin 0 -> 5823 bytes .../Convert-PDF-to-PDF-A-2b/Output/.gitkeep | 0 .../.NET/Convert-PDF-to-PDF-A-2b/Program.cs | 47 ++++++++++++ .../.NET/Convert-PDF-to-PDF-A-3b.slnx | 3 + .../Convert-PDF-to-PDF-A-3b.csproj | 15 ++++ .../Convert-PDF-to-PDF-A-3b/Data/Input.pdf | Bin 0 -> 5823 bytes .../Data/ZUGFeRD_invoice.xml | 45 ++++++++++++ .../Convert-PDF-to-PDF-A-3b/Output/.gitkeep | 0 .../.NET/Convert-PDF-to-PDF-A-3b/Program.cs | 67 ++++++++++++++++++ .../.NET/Convert-PDF-to-PDF-A-4.slnx | 3 + .../Convert-PDF-to-PDF-A-4.csproj | 15 ++++ .../Convert-PDF-to-PDF-A-4/Data/Input.pdf | Bin 0 -> 5823 bytes .../Convert-PDF-to-PDF-A-4/Output/.gitkeep | 0 .../.NET/Convert-PDF-to-PDF-A-4/Program.cs | 47 ++++++++++++ 16 files changed, 260 insertions(+) create mode 100644 PDF Conformance/Convert-PDF-to-PDF-A-2b/.NET/Convert-PDF-to-PDF-A-2b.slnx create mode 100644 PDF Conformance/Convert-PDF-to-PDF-A-2b/.NET/Convert-PDF-to-PDF-A-2b/Convert-PDF-to-PDF-A-2b.csproj create mode 100644 PDF Conformance/Convert-PDF-to-PDF-A-2b/.NET/Convert-PDF-to-PDF-A-2b/Data/Input.pdf create mode 100644 PDF Conformance/Convert-PDF-to-PDF-A-2b/.NET/Convert-PDF-to-PDF-A-2b/Output/.gitkeep create mode 100644 PDF Conformance/Convert-PDF-to-PDF-A-2b/.NET/Convert-PDF-to-PDF-A-2b/Program.cs create mode 100644 PDF Conformance/Convert-PDF-to-PDF-A-3b/.NET/Convert-PDF-to-PDF-A-3b.slnx create mode 100644 PDF Conformance/Convert-PDF-to-PDF-A-3b/.NET/Convert-PDF-to-PDF-A-3b/Convert-PDF-to-PDF-A-3b.csproj create mode 100644 PDF Conformance/Convert-PDF-to-PDF-A-3b/.NET/Convert-PDF-to-PDF-A-3b/Data/Input.pdf create mode 100644 PDF Conformance/Convert-PDF-to-PDF-A-3b/.NET/Convert-PDF-to-PDF-A-3b/Data/ZUGFeRD_invoice.xml create mode 100644 PDF Conformance/Convert-PDF-to-PDF-A-3b/.NET/Convert-PDF-to-PDF-A-3b/Output/.gitkeep create mode 100644 PDF Conformance/Convert-PDF-to-PDF-A-3b/.NET/Convert-PDF-to-PDF-A-3b/Program.cs create mode 100644 PDF Conformance/Convert-PDF-to-PDF-A-4/.NET/Convert-PDF-to-PDF-A-4.slnx create mode 100644 PDF Conformance/Convert-PDF-to-PDF-A-4/.NET/Convert-PDF-to-PDF-A-4/Convert-PDF-to-PDF-A-4.csproj create mode 100644 PDF Conformance/Convert-PDF-to-PDF-A-4/.NET/Convert-PDF-to-PDF-A-4/Data/Input.pdf create mode 100644 PDF Conformance/Convert-PDF-to-PDF-A-4/.NET/Convert-PDF-to-PDF-A-4/Output/.gitkeep create mode 100644 PDF Conformance/Convert-PDF-to-PDF-A-4/.NET/Convert-PDF-to-PDF-A-4/Program.cs diff --git a/PDF Conformance/Convert-PDF-to-PDF-A-2b/.NET/Convert-PDF-to-PDF-A-2b.slnx b/PDF Conformance/Convert-PDF-to-PDF-A-2b/.NET/Convert-PDF-to-PDF-A-2b.slnx new file mode 100644 index 00000000..8ce4d7b9 --- /dev/null +++ b/PDF Conformance/Convert-PDF-to-PDF-A-2b/.NET/Convert-PDF-to-PDF-A-2b.slnx @@ -0,0 +1,3 @@ + + + diff --git a/PDF Conformance/Convert-PDF-to-PDF-A-2b/.NET/Convert-PDF-to-PDF-A-2b/Convert-PDF-to-PDF-A-2b.csproj b/PDF Conformance/Convert-PDF-to-PDF-A-2b/.NET/Convert-PDF-to-PDF-A-2b/Convert-PDF-to-PDF-A-2b.csproj new file mode 100644 index 00000000..25e3df45 --- /dev/null +++ b/PDF Conformance/Convert-PDF-to-PDF-A-2b/.NET/Convert-PDF-to-PDF-A-2b/Convert-PDF-to-PDF-A-2b.csproj @@ -0,0 +1,15 @@ + + + + Exe + net8.0 + Convert_PDF_to_PDF_A_2b + enable + enable + + + + + + + diff --git a/PDF Conformance/Convert-PDF-to-PDF-A-2b/.NET/Convert-PDF-to-PDF-A-2b/Data/Input.pdf b/PDF Conformance/Convert-PDF-to-PDF-A-2b/.NET/Convert-PDF-to-PDF-A-2b/Data/Input.pdf new file mode 100644 index 0000000000000000000000000000000000000000..68aff2e3b79e37f267ba2c620bf7d57858e25f56 GIT binary patch literal 5823 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 0) + { + byte[] fontData = new byte[typeFaceStream.Length]; + typeFaceStream.Read(fontData, fontData.Length); + typeFaceStream.Dispose(); + memoryStream = new MemoryStream(fontData); + } + // Assign the font stream to the event arguments + args.FontStream = memoryStream; +} \ No newline at end of file diff --git a/PDF Conformance/Convert-PDF-to-PDF-A-3b/.NET/Convert-PDF-to-PDF-A-3b.slnx b/PDF Conformance/Convert-PDF-to-PDF-A-3b/.NET/Convert-PDF-to-PDF-A-3b.slnx new file mode 100644 index 00000000..1627037d --- /dev/null +++ b/PDF Conformance/Convert-PDF-to-PDF-A-3b/.NET/Convert-PDF-to-PDF-A-3b.slnx @@ -0,0 +1,3 @@ + + + diff --git a/PDF Conformance/Convert-PDF-to-PDF-A-3b/.NET/Convert-PDF-to-PDF-A-3b/Convert-PDF-to-PDF-A-3b.csproj b/PDF Conformance/Convert-PDF-to-PDF-A-3b/.NET/Convert-PDF-to-PDF-A-3b/Convert-PDF-to-PDF-A-3b.csproj new file mode 100644 index 00000000..4a556c45 --- /dev/null +++ b/PDF Conformance/Convert-PDF-to-PDF-A-3b/.NET/Convert-PDF-to-PDF-A-3b/Convert-PDF-to-PDF-A-3b.csproj @@ -0,0 +1,15 @@ + + + + Exe + net8.0 + Convert_PDF_to_PDF_A_3b + enable + enable + + + + + + + diff --git a/PDF Conformance/Convert-PDF-to-PDF-A-3b/.NET/Convert-PDF-to-PDF-A-3b/Data/Input.pdf b/PDF Conformance/Convert-PDF-to-PDF-A-3b/.NET/Convert-PDF-to-PDF-A-3b/Data/Input.pdf new file mode 100644 index 0000000000000000000000000000000000000000..68aff2e3b79e37f267ba2c620bf7d57858e25f56 GIT binary patch literal 5823 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 + + + CA-1098 + AWC Logo Cap + 8.99 + + + + + LJ-0192-M + Long-Sleeve Logo Jersey, M + 49.99 + + + + + SO-B909-M + Mountain Bike Socks, M + 9.50 + + + + + LJ-0192-M + Long-Sleeve Logo Jersey, M + 49.99 + + + + + FK-5136 + ML Fork + 175.49 + + + + + HL-U509 + Sport-100 Helmet, Black + 34.99 + + + + \ No newline at end of file diff --git a/PDF Conformance/Convert-PDF-to-PDF-A-3b/.NET/Convert-PDF-to-PDF-A-3b/Output/.gitkeep b/PDF Conformance/Convert-PDF-to-PDF-A-3b/.NET/Convert-PDF-to-PDF-A-3b/Output/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/PDF Conformance/Convert-PDF-to-PDF-A-3b/.NET/Convert-PDF-to-PDF-A-3b/Program.cs b/PDF Conformance/Convert-PDF-to-PDF-A-3b/.NET/Convert-PDF-to-PDF-A-3b/Program.cs new file mode 100644 index 00000000..a0014971 --- /dev/null +++ b/PDF Conformance/Convert-PDF-to-PDF-A-3b/.NET/Convert-PDF-to-PDF-A-3b/Program.cs @@ -0,0 +1,67 @@ +using SkiaSharp; +using Syncfusion.Pdf; +using Syncfusion.Pdf.Graphics; +using Syncfusion.Pdf.Interactive; +using Syncfusion.Pdf.Parsing; + +// Load the PDF document +using (PdfLoadedDocument loadedDocument = new PdfLoadedDocument(Path.GetFullPath(@"Data/Input.pdf"))) +{ + // Handle font substitution during PDF/A conversion + loadedDocument.SubstituteFont += LoadedDocument_SubstituteFont; + // Convert the document to PDF/A-3B format + loadedDocument.ConvertToPDFA(PdfConformanceLevel.Pdf_A3B); + //Get stream from the XML file + FileStream invoiceStream = new FileStream(Path.GetFullPath("Data/ZUGFeRD_invoice.xml"), FileMode.Open, FileAccess.Read); + //Create an attachment + PdfAttachment attachment = new PdfAttachment("ZUGFeRD_invoice.xml", invoiceStream) + { + //Add the attachment relationship + Relationship = PdfAttachmentRelationship.Alternative, + //Set modification date + ModificationDate = DateTime.Now, + //Set description and mime type + Description = "ZUGFeRD_invoice", + MimeType = "text/xml" + }; + // Create the attachments section if it does not exist + if (loadedDocument.Attachments == null) + loadedDocument.CreateAttachment(); + //Add the attachment to the existing document. + loadedDocument.Attachments.Add(attachment); + // Save the PDF document + loadedDocument.Save(Path.GetFullPath(@"Output/Output.pdf")); + invoiceStream.Dispose(); +} + +// Event handler to substitute missing fonts during conversion +void LoadedDocument_SubstituteFont(object sender, PdfFontEventArgs args) +{ + // Extract the font name (ignoring style suffixes) + string fontName = args.FontName.Split(',')[0]; + // Determine the font style + PdfFontStyle fontStyle = args.FontStyle; + SKFontStyle skFontStyle = SKFontStyle.Normal; + // Map PDF font styles to SkiaSharp font styles + if (fontStyle == PdfFontStyle.Bold) + skFontStyle = SKFontStyle.Bold; + else if (fontStyle == PdfFontStyle.Italic) + skFontStyle = SKFontStyle.Italic; + else if (fontStyle == (PdfFontStyle.Bold | PdfFontStyle.Italic)) + skFontStyle = SKFontStyle.BoldItalic; + // Load the typeface using SkiaSharp + SKTypeface typeface = SKTypeface.FromFamilyName(fontName, skFontStyle); + SKStreamAsset typeFaceStream = typeface.OpenStream(); + + // Create a memory stream from the font data + MemoryStream memoryStream = null; + if (typeFaceStream != null && typeFaceStream.Length > 0) + { + byte[] fontData = new byte[typeFaceStream.Length]; + typeFaceStream.Read(fontData, fontData.Length); + typeFaceStream.Dispose(); + memoryStream = new MemoryStream(fontData); + } + // Assign the font stream to the event arguments + args.FontStream = memoryStream; +} \ No newline at end of file diff --git a/PDF Conformance/Convert-PDF-to-PDF-A-4/.NET/Convert-PDF-to-PDF-A-4.slnx b/PDF Conformance/Convert-PDF-to-PDF-A-4/.NET/Convert-PDF-to-PDF-A-4.slnx new file mode 100644 index 00000000..389214d0 --- /dev/null +++ b/PDF Conformance/Convert-PDF-to-PDF-A-4/.NET/Convert-PDF-to-PDF-A-4.slnx @@ -0,0 +1,3 @@ + + + diff --git a/PDF Conformance/Convert-PDF-to-PDF-A-4/.NET/Convert-PDF-to-PDF-A-4/Convert-PDF-to-PDF-A-4.csproj b/PDF Conformance/Convert-PDF-to-PDF-A-4/.NET/Convert-PDF-to-PDF-A-4/Convert-PDF-to-PDF-A-4.csproj new file mode 100644 index 00000000..dbb47c64 --- /dev/null +++ b/PDF Conformance/Convert-PDF-to-PDF-A-4/.NET/Convert-PDF-to-PDF-A-4/Convert-PDF-to-PDF-A-4.csproj @@ -0,0 +1,15 @@ + + + + Exe + net8.0 + Convert_PDF_to_PDF_A_4 + enable + enable + + + + + + + diff --git a/PDF Conformance/Convert-PDF-to-PDF-A-4/.NET/Convert-PDF-to-PDF-A-4/Data/Input.pdf b/PDF Conformance/Convert-PDF-to-PDF-A-4/.NET/Convert-PDF-to-PDF-A-4/Data/Input.pdf new file mode 100644 index 0000000000000000000000000000000000000000..68aff2e3b79e37f267ba2c620bf7d57858e25f56 GIT binary patch literal 5823 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 0) + { + byte[] fontData = new byte[typeFaceStream.Length]; + typeFaceStream.Read(fontData, fontData.Length); + typeFaceStream.Dispose(); + memoryStream = new MemoryStream(fontData); + } + // Assign the font stream to the event arguments + args.FontStream = memoryStream; +} \ No newline at end of file From debe18f6c4a73a6730f05f989c78dc5f160c24b2 Mon Sep 17 00:00:00 2001 From: sameerkhan001 Date: Thu, 10 Sep 2026 16:16:40 +0530 Subject: [PATCH 2/4] 1053818: Removed unwanted changes --- .../.NET/Convert-PDF-to-PDF-A-2b/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PDF Conformance/Convert-PDF-to-PDF-A-2b/.NET/Convert-PDF-to-PDF-A-2b/Program.cs b/PDF Conformance/Convert-PDF-to-PDF-A-2b/.NET/Convert-PDF-to-PDF-A-2b/Program.cs index 03f83eac..d65bed56 100644 --- a/PDF Conformance/Convert-PDF-to-PDF-A-2b/.NET/Convert-PDF-to-PDF-A-2b/Program.cs +++ b/PDF Conformance/Convert-PDF-to-PDF-A-2b/.NET/Convert-PDF-to-PDF-A-2b/Program.cs @@ -11,7 +11,7 @@ // Convert the document to PDF/A-2B format loadedDocument.ConvertToPDFA(PdfConformanceLevel.Pdf_A2B); // Save the PDF document - loadedDocument.Save(Path.GetFullPath(@"Output/Output2.pdf")); + loadedDocument.Save(Path.GetFullPath(@"Output/Output.pdf")); } // Event handler to substitute missing fonts during conversion From 4c270c71fd15648e396424a7bc34f8889c162907 Mon Sep 17 00:00:00 2001 From: Chinnu M <65020530+chinnumuniyappan@users.noreply.github.com> Date: Thu, 10 Sep 2026 17:42:38 +0530 Subject: [PATCH 3/4] Addressed feedback --- .../Convert-PDF-to-PDF-A-2b.csproj | 6 ++++++ .../Convert-PDF-to-PDF-A-3b.csproj | 9 +++++++++ .../.NET/Convert-PDF-to-PDF-A-3b/Program.cs | 13 ++++++------- .../Convert-PDF-to-PDF-A-4.csproj | 6 ++++++ 4 files changed, 27 insertions(+), 7 deletions(-) diff --git a/PDF Conformance/Convert-PDF-to-PDF-A-2b/.NET/Convert-PDF-to-PDF-A-2b/Convert-PDF-to-PDF-A-2b.csproj b/PDF Conformance/Convert-PDF-to-PDF-A-2b/.NET/Convert-PDF-to-PDF-A-2b/Convert-PDF-to-PDF-A-2b.csproj index 25e3df45..e6c6669e 100644 --- a/PDF Conformance/Convert-PDF-to-PDF-A-2b/.NET/Convert-PDF-to-PDF-A-2b/Convert-PDF-to-PDF-A-2b.csproj +++ b/PDF Conformance/Convert-PDF-to-PDF-A-2b/.NET/Convert-PDF-to-PDF-A-2b/Convert-PDF-to-PDF-A-2b.csproj @@ -12,4 +12,10 @@ + + + PreserveNewest + + + diff --git a/PDF Conformance/Convert-PDF-to-PDF-A-3b/.NET/Convert-PDF-to-PDF-A-3b/Convert-PDF-to-PDF-A-3b.csproj b/PDF Conformance/Convert-PDF-to-PDF-A-3b/.NET/Convert-PDF-to-PDF-A-3b/Convert-PDF-to-PDF-A-3b.csproj index 4a556c45..b691847a 100644 --- a/PDF Conformance/Convert-PDF-to-PDF-A-3b/.NET/Convert-PDF-to-PDF-A-3b/Convert-PDF-to-PDF-A-3b.csproj +++ b/PDF Conformance/Convert-PDF-to-PDF-A-3b/.NET/Convert-PDF-to-PDF-A-3b/Convert-PDF-to-PDF-A-3b.csproj @@ -12,4 +12,13 @@ + + + PreserveNewest + + + PreserveNewest + + + diff --git a/PDF Conformance/Convert-PDF-to-PDF-A-3b/.NET/Convert-PDF-to-PDF-A-3b/Program.cs b/PDF Conformance/Convert-PDF-to-PDF-A-3b/.NET/Convert-PDF-to-PDF-A-3b/Program.cs index a0014971..a6069e7d 100644 --- a/PDF Conformance/Convert-PDF-to-PDF-A-3b/.NET/Convert-PDF-to-PDF-A-3b/Program.cs +++ b/PDF Conformance/Convert-PDF-to-PDF-A-3b/.NET/Convert-PDF-to-PDF-A-3b/Program.cs @@ -9,12 +9,8 @@ { // Handle font substitution during PDF/A conversion loadedDocument.SubstituteFont += LoadedDocument_SubstituteFont; - // Convert the document to PDF/A-3B format - loadedDocument.ConvertToPDFA(PdfConformanceLevel.Pdf_A3B); - //Get stream from the XML file - FileStream invoiceStream = new FileStream(Path.GetFullPath("Data/ZUGFeRD_invoice.xml"), FileMode.Open, FileAccess.Read); //Create an attachment - PdfAttachment attachment = new PdfAttachment("ZUGFeRD_invoice.xml", invoiceStream) + PdfAttachment attachment = new PdfAttachment(Path.GetFullPath("Data/ZUGFeRD_invoice.xml")) { //Add the attachment relationship Relationship = PdfAttachmentRelationship.Alternative, @@ -29,9 +25,12 @@ loadedDocument.CreateAttachment(); //Add the attachment to the existing document. loadedDocument.Attachments.Add(attachment); + + // Convert the document to PDF/A-3B format + loadedDocument.ConvertToPDFA(PdfConformanceLevel.Pdf_A3B); + // Save the PDF document - loadedDocument.Save(Path.GetFullPath(@"Output/Output.pdf")); - invoiceStream.Dispose(); + loadedDocument.Save(Path.GetFullPath(@"Output/Output.pdf")); } // Event handler to substitute missing fonts during conversion diff --git a/PDF Conformance/Convert-PDF-to-PDF-A-4/.NET/Convert-PDF-to-PDF-A-4/Convert-PDF-to-PDF-A-4.csproj b/PDF Conformance/Convert-PDF-to-PDF-A-4/.NET/Convert-PDF-to-PDF-A-4/Convert-PDF-to-PDF-A-4.csproj index dbb47c64..b21472d5 100644 --- a/PDF Conformance/Convert-PDF-to-PDF-A-4/.NET/Convert-PDF-to-PDF-A-4/Convert-PDF-to-PDF-A-4.csproj +++ b/PDF Conformance/Convert-PDF-to-PDF-A-4/.NET/Convert-PDF-to-PDF-A-4/Convert-PDF-to-PDF-A-4.csproj @@ -12,4 +12,10 @@ + + + PreserveNewest + + + From bfda52a4a26c11edbac8c543e07a2ecb52efafb0 Mon Sep 17 00:00:00 2001 From: Chinnu M <65020530+chinnumuniyappan@users.noreply.github.com> Date: Thu, 10 Sep 2026 17:44:11 +0530 Subject: [PATCH 4/4] Addressed feedback --- .../.NET/Convert-PDF-to-PDF-A-3b/Program.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/PDF Conformance/Convert-PDF-to-PDF-A-3b/.NET/Convert-PDF-to-PDF-A-3b/Program.cs b/PDF Conformance/Convert-PDF-to-PDF-A-3b/.NET/Convert-PDF-to-PDF-A-3b/Program.cs index a6069e7d..63c307a0 100644 --- a/PDF Conformance/Convert-PDF-to-PDF-A-3b/.NET/Convert-PDF-to-PDF-A-3b/Program.cs +++ b/PDF Conformance/Convert-PDF-to-PDF-A-3b/.NET/Convert-PDF-to-PDF-A-3b/Program.cs @@ -25,10 +25,8 @@ loadedDocument.CreateAttachment(); //Add the attachment to the existing document. loadedDocument.Attachments.Add(attachment); - // Convert the document to PDF/A-3B format loadedDocument.ConvertToPDFA(PdfConformanceLevel.Pdf_A3B); - // Save the PDF document loadedDocument.Save(Path.GetFullPath(@"Output/Output.pdf")); }