From cf46230c051edb8f818aa35d6994aff620a1e87c Mon Sep 17 00:00:00 2001 From: Eliot Jones Date: Sat, 4 Apr 2020 17:49:27 +0100 Subject: [PATCH] #127 add pdf/a2-b compliance to the builder --- .../Writer/PdfDocumentBuilderTests.cs | 31 +++++++++++++++++++ ...eBuilder.cs => PdfABaselineRuleBuilder.cs} | 2 +- src/UglyToad.PdfPig/Writer/PdfAStandard.cs | 6 +++- .../Writer/PdfDocumentBuilder.cs | 4 ++- src/UglyToad.PdfPig/Writer/Xmp/XmpWriter.cs | 4 +++ 5 files changed, 44 insertions(+), 3 deletions(-) rename src/UglyToad.PdfPig/Writer/{PdfA1BRuleBuilder.cs => PdfABaselineRuleBuilder.cs} (94%) diff --git a/src/UglyToad.PdfPig.Tests/Writer/PdfDocumentBuilderTests.cs b/src/UglyToad.PdfPig.Tests/Writer/PdfDocumentBuilderTests.cs index 197c7890..fe9ce415 100644 --- a/src/UglyToad.PdfPig.Tests/Writer/PdfDocumentBuilderTests.cs +++ b/src/UglyToad.PdfPig.Tests/Writer/PdfDocumentBuilderTests.cs @@ -532,6 +532,9 @@ var page = builder.AddPage(PageSize.A4); + var imgBytes = File.ReadAllBytes(IntegrationHelpers.GetDocumentPath("smile-250-by-160.jpg", false)); + page.AddJpeg(imgBytes, new PdfRectangle(50, 70, 150, 130)); + var font = builder.AddTrueTypeFont(TrueTypeTestHelper.GetFileBytes("Roboto-Regular.ttf")); page.AddText("Howdy PDF/A-1A!", 10, new PdfPoint(25, 700), font); @@ -550,6 +553,34 @@ } } + [Fact] + public void CanGeneratePdfA2BFile() + { + var builder = new PdfDocumentBuilder + { + ArchiveStandard = PdfAStandard.A2B + }; + + var page = builder.AddPage(PageSize.A4); + + var font = builder.AddTrueTypeFont(TrueTypeTestHelper.GetFileBytes("Roboto-Regular.ttf")); + + page.AddText("Howdy PDF/A-2B and welcome!", 10, new PdfPoint(25, 700), font); + + var bytes = builder.Build(); + + WriteFile(nameof(CanGeneratePdfA2BFile), bytes); + + using (var pdf = PdfDocument.Open(bytes, ParsingOptions.LenientParsingOff)) + { + Assert.Equal(1, pdf.NumberOfPages); + + Assert.True(pdf.TryGetXmpMetadata(out var xmp)); + + Assert.NotNull(xmp.GetXDocument()); + } + } + private static void WriteFile(string name, byte[] bytes) { try diff --git a/src/UglyToad.PdfPig/Writer/PdfA1BRuleBuilder.cs b/src/UglyToad.PdfPig/Writer/PdfABaselineRuleBuilder.cs similarity index 94% rename from src/UglyToad.PdfPig/Writer/PdfA1BRuleBuilder.cs rename to src/UglyToad.PdfPig/Writer/PdfABaselineRuleBuilder.cs index 1c6f7b7c..f3c2dcfa 100644 --- a/src/UglyToad.PdfPig/Writer/PdfA1BRuleBuilder.cs +++ b/src/UglyToad.PdfPig/Writer/PdfABaselineRuleBuilder.cs @@ -6,7 +6,7 @@ using UglyToad.PdfPig.Writer.Xmp; namespace UglyToad.PdfPig.Writer { - internal static class PdfA1BRuleBuilder + internal static class PdfABaselineRuleBuilder { public static void Obey(Dictionary catalog, Func writerFunc, PdfDocumentBuilder.DocumentInformationBuilder documentInformationBuilder, diff --git a/src/UglyToad.PdfPig/Writer/PdfAStandard.cs b/src/UglyToad.PdfPig/Writer/PdfAStandard.cs index 056d228b..e556fbf6 100644 --- a/src/UglyToad.PdfPig/Writer/PdfAStandard.cs +++ b/src/UglyToad.PdfPig/Writer/PdfAStandard.cs @@ -16,6 +16,10 @@ /// /// Compliance with PDF/A1-A. Level A (accessible) conformance are PDF/A1-B standards in addition to features intended to improve a document's accessibility. /// - A1A = 2 + A1A = 2, + /// + /// Compliance with PDF/A2-B. Level B (basic) conformance are standards necessary for the reliable reproduction of a document's visual appearance. + /// + A2B = 3 } } \ No newline at end of file diff --git a/src/UglyToad.PdfPig/Writer/PdfDocumentBuilder.cs b/src/UglyToad.PdfPig/Writer/PdfDocumentBuilder.cs index cd7d4e8a..d3fa10f9 100644 --- a/src/UglyToad.PdfPig/Writer/PdfDocumentBuilder.cs +++ b/src/UglyToad.PdfPig/Writer/PdfDocumentBuilder.cs @@ -343,13 +343,15 @@ namespace UglyToad.PdfPig.Writer { Func writerFunc = x => context.WriteObject(memory, x); - PdfA1BRuleBuilder.Obey(catalogDictionary, writerFunc, DocumentInformation, ArchiveStandard); + PdfABaselineRuleBuilder.Obey(catalogDictionary, writerFunc, DocumentInformation, ArchiveStandard); switch (ArchiveStandard) { case PdfAStandard.A1A: PdfA1ARuleBuilder.Obey(catalogDictionary); break; + case PdfAStandard.A2B: + break; } } diff --git a/src/UglyToad.PdfPig/Writer/Xmp/XmpWriter.cs b/src/UglyToad.PdfPig/Writer/Xmp/XmpWriter.cs index 62d4c4d5..4a0f85ba 100644 --- a/src/UglyToad.PdfPig/Writer/Xmp/XmpWriter.cs +++ b/src/UglyToad.PdfPig/Writer/Xmp/XmpWriter.cs @@ -139,6 +139,10 @@ namespace UglyToad.PdfPig.Writer.Xmp part = 1; conformance = "A"; break; + case PdfAStandard.A2B: + part = 2; + conformance = "B"; + break; default: throw new ArgumentOutOfRangeException(nameof(standard), standard, null); }