Skip to content

Commit 2b2ca05

Browse files
committed
Move all logic from PdfA/UaDocuments to pluggalbe mechanisms into PdfDocument
DEVSIX-8623 Autoported commit. Original commit hash: [e84bb3e25] Manual files: pdfa/src/main/java/com/itextpdf/pdfa/PdfAXMPUtil.java pdfua/pom.xml pdfua/src/test/java/com/itextpdf/pdfua/PemFileHelper.java sign/pom.xml
1 parent a7c25b0 commit 2b2ca05

File tree

54 files changed

+915
-944
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+915
-944
lines changed

itext.tests/itext.kernel.tests/itext/kernel/pdf/PageFlushingTest.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,10 @@ public virtual void Validate(IValidationContext validationContext) {
395395
page = ((PdfPageValidationContext)validationContext).GetPage();
396396
}
397397
}
398+
399+
public virtual bool IsPdfObjectReadyToFlush(PdfObject @object) {
400+
return true;
401+
}
398402
}
399403

400404
private static void Test(String filename, PageFlushingTest.DocMode docMode, PageFlushingTest.FlushMode flushMode

itext.tests/itext.kernel.tests/itext/kernel/pdf/PdfDocumentTest.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -586,6 +586,18 @@ public virtual void RemoveNestedDuplicatesHasChildInOrderArrayTest() {
586586
, "27 0 R"), e.Message);
587587
}
588588

589+
[NUnit.Framework.Test]
590+
public virtual void CreatePdfDocumentWithAAndUaMetadataTest() {
591+
String outputPdf = "pdfDocWithAAndUaMetadata.pdf";
592+
WriterProperties writerProperties = new WriterProperties().AddPdfAXmpMetadata(PdfAConformance.PDF_A_3A).AddPdfUaXmpMetadata
593+
(PdfUAConformance.PDF_UA_1);
594+
PdfDocument doc = new PdfDocument(new PdfWriter(DESTINATION_FOLDER + outputPdf, writerProperties));
595+
doc.AddNewPage();
596+
doc.Close();
597+
NUnit.Framework.Assert.IsNull(new CompareTool().CompareByContent(DESTINATION_FOLDER + outputPdf, SOURCE_FOLDER
598+
+ "cmp_" + outputPdf, DESTINATION_FOLDER));
599+
}
600+
589601
private class IgnoreTagStructurePdfDocument : PdfDocument {
590602
//\cond DO_NOT_DOCUMENT
591603
internal IgnoreTagStructurePdfDocument(PdfReader reader)

itext.tests/itext.kernel.tests/itext/kernel/pdf/PdfDocumentUnitTest.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,10 @@ public virtual void Validate(IValidationContext validationContext) {
378378
documentValidationPerformed = true;
379379
}
380380
}
381+
382+
public virtual bool IsPdfObjectReadyToFlush(PdfObject @object) {
383+
return true;
384+
}
381385
}
382386
}
383387
}

itext.tests/itext.kernel.tests/itext/kernel/pdf/PdfReaderTest.cs

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2374,10 +2374,7 @@ public virtual void StreamWithoutEndstreamKeywordConservativeModeTest() {
23742374
String fileName = SOURCE_FOLDER + "NoEndstreamKeyword.pdf";
23752375
using (PdfReader reader = new PdfReader(fileName)) {
23762376
reader.SetStrictnessLevel(PdfReader.StrictnessLevel.CONSERVATIVE);
2377-
PdfDocument pdfDocument = new PdfDocument(reader);
2378-
// Initialize xmp metadata, because we in reader mode in which xmp will be initialized only during closing
2379-
Exception exception = NUnit.Framework.Assert.Catch(typeof(PdfException), () => pdfDocument.GetXmpMetadata(
2380-
));
2377+
Exception exception = NUnit.Framework.Assert.Catch(typeof(PdfException), () => new PdfDocument(reader));
23812378
NUnit.Framework.Assert.AreEqual(KernelExceptionMessageConstant.STREAM_SHALL_END_WITH_ENDSTREAM, exception.
23822379
Message);
23832380
PdfCatalog catalog = new PdfCatalog((PdfDictionary)reader.trailer.Get(PdfName.Root, true));
@@ -2535,14 +2532,14 @@ public virtual void StreamObjIsNullTest() {
25352532
int objNumber = pdfDictionary.GetIndirectReference().objNr;
25362533
pdfDocument.catalog.GetPdfObject().Put(PdfName.StructTreeRoot, pdfDictionary);
25372534
pdfDocument.Close();
2538-
PdfReader pdfReader = new _PdfReader_2853(objNumber, new MemoryStream(bsaos.ToArray()));
2535+
PdfReader pdfReader = new _PdfReader_2851(objNumber, new MemoryStream(bsaos.ToArray()));
25392536
Exception e = NUnit.Framework.Assert.Catch(typeof(PdfException), () => new PdfDocument(pdfReader));
25402537
NUnit.Framework.Assert.AreEqual(MessageFormatUtil.Format(KernelExceptionMessageConstant.INVALID_OBJECT_STREAM_NUMBER
25412538
, 5, 4, 492), e.Message);
25422539
}
25432540

2544-
private sealed class _PdfReader_2853 : PdfReader {
2545-
public _PdfReader_2853(int objNumber, Stream baseArg1)
2541+
private sealed class _PdfReader_2851 : PdfReader {
2542+
public _PdfReader_2851(int objNumber, Stream baseArg1)
25462543
: base(baseArg1) {
25472544
this.objNumber = objNumber;
25482545
}
@@ -2561,7 +2558,7 @@ protected internal override PdfObject ReadObject(PdfIndirectReference reference)
25612558
[NUnit.Framework.Test]
25622559
public virtual void InitTagTreeStructureThrowsOOMIsCatched() {
25632560
FileInfo file = new FileInfo(SOURCE_FOLDER + "big_table_lot_of_mcrs.pdf");
2564-
MemoryLimitsAwareHandler memoryLimitsAwareHandler = new _MemoryLimitsAwareHandler_2872();
2561+
MemoryLimitsAwareHandler memoryLimitsAwareHandler = new _MemoryLimitsAwareHandler_2870();
25652562
memoryLimitsAwareHandler.SetMaxSizeOfDecompressedPdfStreamsSum(100000);
25662563
NUnit.Framework.Assert.Catch(typeof(MemoryLimitsAwareException), () => {
25672564
using (PdfReader reader = new PdfReader(file, new ReaderProperties().SetMemoryLimitsAwareHandler(memoryLimitsAwareHandler
@@ -2573,8 +2570,8 @@ public virtual void InitTagTreeStructureThrowsOOMIsCatched() {
25732570
);
25742571
}
25752572

2576-
private sealed class _MemoryLimitsAwareHandler_2872 : MemoryLimitsAwareHandler {
2577-
public _MemoryLimitsAwareHandler_2872() {
2573+
private sealed class _MemoryLimitsAwareHandler_2870 : MemoryLimitsAwareHandler {
2574+
public _MemoryLimitsAwareHandler_2870() {
25782575
}
25792576

25802577
public override bool IsMemoryLimitsAwarenessRequiredOnDecompression(PdfArray filters) {

itext.tests/itext.kernel.tests/itext/kernel/pdf/canvas/PdfCanvasUnitTest.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,10 @@ public virtual void Validate(IValidationContext validationContext) {
193193
gState = glyphsContext.GetGraphicsState();
194194
}
195195
}
196+
197+
public virtual bool IsPdfObjectReadyToFlush(PdfObject @object) {
198+
return true;
199+
}
196200
}
197201
}
198202
}

itext.tests/itext.kernel.tests/itext/kernel/utils/ValidationContainerTest.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2020
You should have received a copy of the GNU Affero General Public License
2121
along with this program. If not, see <https://www.gnu.org/licenses/>.
2222
*/
23+
using iText.Kernel.Pdf;
2324
using iText.Kernel.Validation;
2425
using iText.Kernel.Validation.Context;
2526
using iText.Test;
@@ -66,6 +67,10 @@ public virtual void Validate(IValidationContext validationContext) {
6667
objectValidationPerformed = true;
6768
}
6869
}
70+
71+
public virtual bool IsPdfObjectReadyToFlush(PdfObject @object) {
72+
return true;
73+
}
6974
}
7075
}
7176
}

itext.tests/itext.layout.tests/itext/layout/XMPWriterTest.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,8 @@ public virtual void CreatePdfTest() {
8383
[NUnit.Framework.Test]
8484
public virtual void AddUAXMPMetaDataNotTaggedTest() {
8585
String fileName = "addUAXMPMetaDataNotTaggedTest.pdf";
86-
PdfDocument pdf = new PdfDocument(new PdfWriter(destinationFolder + fileName, new WriterProperties().AddUAXmpMetadata
87-
()));
86+
WriterProperties writerProperties = new WriterProperties().AddPdfUaXmpMetadata(PdfUAConformance.PDF_UA_1);
87+
PdfDocument pdf = new PdfDocument(new PdfWriter(destinationFolder + fileName, writerProperties));
8888
ManipulatePdf(pdf, false);
8989
NUnit.Framework.Assert.IsNull(new CompareTool().CompareXmp(destinationFolder + fileName, sourceFolder + "cmp_"
9090
+ fileName, true));
@@ -93,8 +93,8 @@ public virtual void AddUAXMPMetaDataNotTaggedTest() {
9393
[NUnit.Framework.Test]
9494
public virtual void AddUAXMPMetaDataTaggedTest() {
9595
String fileName = "addUAXMPMetaDataTaggedTest.pdf";
96-
PdfDocument pdf = new PdfDocument(new PdfWriter(destinationFolder + fileName, new WriterProperties().AddUAXmpMetadata
97-
()));
96+
WriterProperties writerProperties = new WriterProperties().AddPdfUaXmpMetadata(PdfUAConformance.PDF_UA_1);
97+
PdfDocument pdf = new PdfDocument(new PdfWriter(destinationFolder + fileName, writerProperties));
9898
ManipulatePdf(pdf, true);
9999
NUnit.Framework.Assert.IsNull(new CompareTool().CompareXmp(destinationFolder + fileName, sourceFolder + "cmp_"
100100
+ fileName, true));

itext.tests/itext.pdfa.tests/itext/pdfa/PdfA4CatalogCheckTest.cs

Lines changed: 55 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,20 @@ public virtual void InvalidInfoTest() {
188188
, e.Message);
189189
}
190190

191+
[NUnit.Framework.Test]
192+
public virtual void InvalidInfoWithFullCompression() {
193+
String outPdf = destinationFolder + "invalidInfoWithFillCompression.pdf";
194+
PdfWriter writer = new PdfWriter(outPdf, new WriterProperties().SetPdfVersion(PdfVersion.PDF_2_0).SetFullCompressionMode
195+
(true));
196+
Stream @is = FileUtil.GetInputStreamForFile(sourceFolder + "sRGB Color Space Profile.icm");
197+
using (PdfADocument doc = new PdfADocument(writer, PdfAConformance.PDF_A_4, new PdfOutputIntent("Custom",
198+
"", "http://www.color.org", "sRGB IEC61966-2.1", @is))) {
199+
doc.AddNewPage();
200+
}
201+
NUnit.Framework.Assert.IsNull(new VeraPdfValidator().Validate(outPdf));
202+
}
203+
204+
// Android-Conversion-Skip-Line (TODO DEVSIX-7377 introduce pdf\a validation on Android)
191205
[NUnit.Framework.Test]
192206
public virtual void ReadValidDocumentTest() {
193207
String outPdf = destinationFolder + "simplePdfA4_output01.pdf";
@@ -302,10 +316,11 @@ public virtual void ValidFormXObjectTest() {
302316
// Android-Conversion-Skip-Line (TODO DEVSIX-7377 introduce pdf\a validation on Android)
303317
[NUnit.Framework.Test]
304318
public virtual void CreateInvalidPdfAVersionNumberWithPDFA4() {
305-
PdfWriter writer = new PdfWriter(new PdfWriter(new MemoryStream()), new WriterProperties().SetPdfVersion(PdfVersion
306-
.PDF_1_7));
307-
PdfADocument doc = new PdfADocument(writer, PdfAConformance.PDF_A_4, new PdfOutputIntent("Custom", "", "http://www.color.org"
308-
, "sRGB IEC61966-2.1", FileUtil.GetInputStreamForFile(sourceFolder + "sRGB Color Space Profile.icm")));
319+
PdfWriter writer = new PdfWriter(new PdfWriter(new MemoryStream()), new WriterProperties());
320+
PdfA4CatalogCheckTest.PdfDocumentCustomVersion doc = new PdfA4CatalogCheckTest.PdfDocumentCustomVersion(writer
321+
, PdfAConformance.PDF_A_4, new PdfOutputIntent("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1"
322+
, FileUtil.GetInputStreamForFile(sourceFolder + "sRGB Color Space Profile.icm")));
323+
doc.SetPdfVersion(PdfVersion.PDF_1_7);
309324
doc.AddNewPage();
310325
Exception e = NUnit.Framework.Assert.Catch(typeof(PdfAConformanceException), () => doc.Close());
311326
NUnit.Framework.Assert.AreEqual(MessageFormatUtil.Format(PdfaExceptionMessageConstant.THE_FILE_HEADER_SHALL_CONTAIN_RIGHT_PDF_VERSION
@@ -314,10 +329,11 @@ public virtual void CreateInvalidPdfAVersionNumberWithPDFA4() {
314329

315330
[NUnit.Framework.Test]
316331
public virtual void CreateInvalidPdfAVersionNumberWithPDFA4F() {
317-
PdfWriter writer = new PdfWriter(new PdfWriter(new MemoryStream()), new WriterProperties().SetPdfVersion(PdfVersion
318-
.PDF_1_7));
319-
PdfADocument doc = new PdfADocument(writer, PdfAConformance.PDF_A_4F, new PdfOutputIntent("Custom", "", "http://www.color.org"
320-
, "sRGB IEC61966-2.1", FileUtil.GetInputStreamForFile(sourceFolder + "sRGB Color Space Profile.icm")));
332+
PdfWriter writer = new PdfWriter(new PdfWriter(new MemoryStream()), new WriterProperties());
333+
PdfA4CatalogCheckTest.PdfDocumentCustomVersion doc = new PdfA4CatalogCheckTest.PdfDocumentCustomVersion(writer
334+
, PdfAConformance.PDF_A_4F, new PdfOutputIntent("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1"
335+
, FileUtil.GetInputStreamForFile(sourceFolder + "sRGB Color Space Profile.icm")));
336+
doc.SetPdfVersion(PdfVersion.PDF_1_7);
321337
doc.AddNewPage();
322338
Exception e = NUnit.Framework.Assert.Catch(typeof(PdfAConformanceException), () => doc.Close());
323339
NUnit.Framework.Assert.AreEqual(MessageFormatUtil.Format(PdfaExceptionMessageConstant.THE_FILE_HEADER_SHALL_CONTAIN_RIGHT_PDF_VERSION
@@ -326,10 +342,11 @@ public virtual void CreateInvalidPdfAVersionNumberWithPDFA4F() {
326342

327343
[NUnit.Framework.Test]
328344
public virtual void CreateInvalidPdfAVersionNumberWithPDFA4E() {
329-
PdfWriter writer = new PdfWriter(new PdfWriter(new MemoryStream()), new WriterProperties().SetPdfVersion(PdfVersion
330-
.PDF_1_7));
331-
PdfADocument doc = new PdfADocument(writer, PdfAConformance.PDF_A_4E, new PdfOutputIntent("Custom", "", "http://www.color.org"
332-
, "sRGB IEC61966-2.1", FileUtil.GetInputStreamForFile(sourceFolder + "sRGB Color Space Profile.icm")));
345+
PdfWriter writer = new PdfWriter(new PdfWriter(new MemoryStream()), new WriterProperties());
346+
PdfA4CatalogCheckTest.PdfDocumentCustomVersion doc = new PdfA4CatalogCheckTest.PdfDocumentCustomVersion(writer
347+
, PdfAConformance.PDF_A_4E, new PdfOutputIntent("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1"
348+
, FileUtil.GetInputStreamForFile(sourceFolder + "sRGB Color Space Profile.icm")));
349+
doc.SetPdfVersion(PdfVersion.PDF_1_7);
333350
doc.AddNewPage();
334351
Exception e = NUnit.Framework.Assert.Catch(typeof(PdfAConformanceException), () => doc.Close());
335352
NUnit.Framework.Assert.AreEqual(MessageFormatUtil.Format(PdfaExceptionMessageConstant.THE_FILE_HEADER_SHALL_CONTAIN_RIGHT_PDF_VERSION
@@ -338,10 +355,11 @@ public virtual void CreateInvalidPdfAVersionNumberWithPDFA4E() {
338355

339356
[NUnit.Framework.Test]
340357
public virtual void CreateInvalidPdfAVersion16NumberWithPDFA4() {
341-
PdfWriter writer = new PdfWriter(new PdfWriter(new MemoryStream()), new WriterProperties().SetPdfVersion(PdfVersion
342-
.PDF_1_6));
343-
PdfADocument doc = new PdfADocument(writer, PdfAConformance.PDF_A_4, new PdfOutputIntent("Custom", "", "http://www.color.org"
344-
, "sRGB IEC61966-2.1", FileUtil.GetInputStreamForFile(sourceFolder + "sRGB Color Space Profile.icm")));
358+
PdfWriter writer = new PdfWriter(new PdfWriter(new MemoryStream()), new WriterProperties());
359+
PdfA4CatalogCheckTest.PdfDocumentCustomVersion doc = new PdfA4CatalogCheckTest.PdfDocumentCustomVersion(writer
360+
, PdfAConformance.PDF_A_4, new PdfOutputIntent("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1"
361+
, FileUtil.GetInputStreamForFile(sourceFolder + "sRGB Color Space Profile.icm")));
362+
doc.SetPdfVersion(PdfVersion.PDF_1_6);
345363
doc.AddNewPage();
346364
Exception e = NUnit.Framework.Assert.Catch(typeof(PdfAConformanceException), () => doc.Close());
347365
NUnit.Framework.Assert.AreEqual(MessageFormatUtil.Format(PdfaExceptionMessageConstant.THE_FILE_HEADER_SHALL_CONTAIN_RIGHT_PDF_VERSION
@@ -350,10 +368,11 @@ public virtual void CreateInvalidPdfAVersion16NumberWithPDFA4() {
350368

351369
[NUnit.Framework.Test]
352370
public virtual void CreateInvalidPdfAVersion13NumberWithPDFA4F() {
353-
PdfWriter writer = new PdfWriter(new PdfWriter(new MemoryStream()), new WriterProperties().SetPdfVersion(PdfVersion
354-
.PDF_1_3));
355-
PdfADocument doc = new PdfADocument(writer, PdfAConformance.PDF_A_4F, new PdfOutputIntent("Custom", "", "http://www.color.org"
356-
, "sRGB IEC61966-2.1", FileUtil.GetInputStreamForFile(sourceFolder + "sRGB Color Space Profile.icm")));
371+
PdfWriter writer = new PdfWriter(new PdfWriter(new MemoryStream()), new WriterProperties());
372+
PdfA4CatalogCheckTest.PdfDocumentCustomVersion doc = new PdfA4CatalogCheckTest.PdfDocumentCustomVersion(writer
373+
, PdfAConformance.PDF_A_4F, new PdfOutputIntent("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1"
374+
, FileUtil.GetInputStreamForFile(sourceFolder + "sRGB Color Space Profile.icm")));
375+
doc.SetPdfVersion(PdfVersion.PDF_1_3);
357376
doc.AddNewPage();
358377
Exception e = NUnit.Framework.Assert.Catch(typeof(PdfAConformanceException), () => doc.Close());
359378
NUnit.Framework.Assert.AreEqual(MessageFormatUtil.Format(PdfaExceptionMessageConstant.THE_FILE_HEADER_SHALL_CONTAIN_RIGHT_PDF_VERSION
@@ -362,14 +381,26 @@ public virtual void CreateInvalidPdfAVersion13NumberWithPDFA4F() {
362381

363382
[NUnit.Framework.Test]
364383
public virtual void CreateInvalidPdfAVersionNumber17WithPDFA4E() {
365-
PdfWriter writer = new PdfWriter(new PdfWriter(new MemoryStream()), new WriterProperties().SetPdfVersion(PdfVersion
366-
.PDF_1_7));
367-
PdfADocument doc = new PdfADocument(writer, PdfAConformance.PDF_A_4E, new PdfOutputIntent("Custom", "", "http://www.color.org"
368-
, "sRGB IEC61966-2.1", FileUtil.GetInputStreamForFile(sourceFolder + "sRGB Color Space Profile.icm")));
384+
PdfWriter writer = new PdfWriter(new PdfWriter(new MemoryStream()), new WriterProperties());
385+
PdfA4CatalogCheckTest.PdfDocumentCustomVersion doc = new PdfA4CatalogCheckTest.PdfDocumentCustomVersion(writer
386+
, PdfAConformance.PDF_A_4E, new PdfOutputIntent("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1"
387+
, FileUtil.GetInputStreamForFile(sourceFolder + "sRGB Color Space Profile.icm")));
388+
doc.SetPdfVersion(PdfVersion.PDF_1_7);
369389
doc.AddNewPage();
370390
Exception e = NUnit.Framework.Assert.Catch(typeof(PdfAConformanceException), () => doc.Close());
371391
NUnit.Framework.Assert.AreEqual(MessageFormatUtil.Format(PdfaExceptionMessageConstant.THE_FILE_HEADER_SHALL_CONTAIN_RIGHT_PDF_VERSION
372392
, "2"), e.Message);
373393
}
394+
395+
private class PdfDocumentCustomVersion : PdfADocument {
396+
public PdfDocumentCustomVersion(PdfWriter writer, PdfAConformance aConformance, PdfOutputIntent outputIntent
397+
)
398+
: base(writer, aConformance, outputIntent) {
399+
}
400+
401+
public virtual void SetPdfVersion(PdfVersion pdfVersion) {
402+
this.pdfVersion = pdfVersion;
403+
}
404+
}
374405
}
375406
}

0 commit comments

Comments
 (0)