Browse Source

Cache PdfReader.getPdfAConformanceLevel result for non pdfA docs

DEVSIX-7188

Autoported commit.
Original commit hash: [f15fb9a5b]
pull/26/head
Vitali Prudnikovich 3 years ago
committed by iText Software
parent
commit
0099cc09ed
  1. 118
      itext.tests/itext.kernel.tests/itext/kernel/pdf/PdfReaderTest.cs
  2. 14
      itext/itext.kernel/itext/kernel/pdf/PdfReader.cs
  3. 2
      port-hash

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

@ -49,6 +49,8 @@ using iText.IO.Font;
using iText.IO.Source;
using iText.Kernel.Exceptions;
using iText.Kernel.Utils;
using iText.Kernel.XMP;
using iText.Kernel.XMP.Options;
using iText.Test;
using iText.Test.Attributes;
@ -1514,12 +1516,12 @@ namespace iText.Kernel.Pdf {
[NUnit.Framework.Test]
public virtual void HasRebuiltXrefReadingNotCompletedTest() {
String filename = SOURCE_FOLDER + "XrefWithNullOffsets.pdf";
PdfReader hasRebuiltXrefReader = new _PdfReader_1759(filename);
PdfReader hasRebuiltXrefReader = new _PdfReader_1763(filename);
ReadingNotCompletedTest(hasRebuiltXrefReader);
}
private sealed class _PdfReader_1759 : PdfReader {
public _PdfReader_1759(String baseArg1)
private sealed class _PdfReader_1763 : PdfReader {
public _PdfReader_1763(String baseArg1)
: base(baseArg1) {
}
@ -1540,12 +1542,12 @@ namespace iText.Kernel.Pdf {
[NUnit.Framework.Test]
public virtual void HasHybridXrefReadingNotCompletedTest() {
String filename = SOURCE_FOLDER + "XrefWithNullOffsets.pdf";
PdfReader hasHybridXrefPdfReader = new _PdfReader_1782(filename);
PdfReader hasHybridXrefPdfReader = new _PdfReader_1786(filename);
ReadingNotCompletedTest(hasHybridXrefPdfReader);
}
private sealed class _PdfReader_1782 : PdfReader {
public _PdfReader_1782(String baseArg1)
private sealed class _PdfReader_1786 : PdfReader {
public _PdfReader_1786(String baseArg1)
: base(baseArg1) {
}
@ -1565,12 +1567,12 @@ namespace iText.Kernel.Pdf {
[NUnit.Framework.Test]
public virtual void HasXrefStmReadingNotCompletedTest() {
String filename = SOURCE_FOLDER + "XrefWithNullOffsets.pdf";
PdfReader hasXrefStmReader = new _PdfReader_1805(filename);
PdfReader hasXrefStmReader = new _PdfReader_1809(filename);
ReadingNotCompletedTest(hasXrefStmReader);
}
private sealed class _PdfReader_1805 : PdfReader {
public _PdfReader_1805(String baseArg1)
private sealed class _PdfReader_1809 : PdfReader {
public _PdfReader_1809(String baseArg1)
: base(baseArg1) {
}
@ -1590,12 +1592,12 @@ namespace iText.Kernel.Pdf {
[NUnit.Framework.Test]
public virtual void HasFixedXrefReadingNotCompletedTest() {
String filename = SOURCE_FOLDER + "XrefWithNullOffsets.pdf";
PdfReader hasFixedXrefReader = new _PdfReader_1828(filename);
PdfReader hasFixedXrefReader = new _PdfReader_1832(filename);
ReadingNotCompletedTest(hasFixedXrefReader);
}
private sealed class _PdfReader_1828 : PdfReader {
public _PdfReader_1828(String baseArg1)
private sealed class _PdfReader_1832 : PdfReader {
public _PdfReader_1832(String baseArg1)
: base(baseArg1) {
}
@ -1615,12 +1617,12 @@ namespace iText.Kernel.Pdf {
[NUnit.Framework.Test]
public virtual void GetLastXrefReadingNotCompletedTest() {
String filename = SOURCE_FOLDER + "XrefWithNullOffsets.pdf";
PdfReader getLastXrefReader = new _PdfReader_1851(filename);
PdfReader getLastXrefReader = new _PdfReader_1855(filename);
ReadingNotCompletedTest(getLastXrefReader);
}
private sealed class _PdfReader_1851 : PdfReader {
public _PdfReader_1851(String baseArg1)
private sealed class _PdfReader_1855 : PdfReader {
public _PdfReader_1855(String baseArg1)
: base(baseArg1) {
}
@ -1641,12 +1643,12 @@ namespace iText.Kernel.Pdf {
[NUnit.Framework.Test]
public virtual void GetPermissionsReadingNotCompletedTest() {
String filename = SOURCE_FOLDER + "XrefWithNullOffsets.pdf";
PdfReader getPermissionsReader = new _PdfReader_1874(filename);
PdfReader getPermissionsReader = new _PdfReader_1878(filename);
ReadingNotCompletedTest(getPermissionsReader);
}
private sealed class _PdfReader_1874 : PdfReader {
public _PdfReader_1874(String baseArg1)
private sealed class _PdfReader_1878 : PdfReader {
public _PdfReader_1878(String baseArg1)
: base(baseArg1) {
}
@ -1667,12 +1669,12 @@ namespace iText.Kernel.Pdf {
[NUnit.Framework.Test]
public virtual void IsOpenedWithFullPReadingNotCompletedTest() {
String filename = SOURCE_FOLDER + "XrefWithNullOffsets.pdf";
PdfReader isOpenedWithFullPReader = new _PdfReader_1899(filename);
PdfReader isOpenedWithFullPReader = new _PdfReader_1903(filename);
ReadingNotCompletedTest(isOpenedWithFullPReader);
}
private sealed class _PdfReader_1899 : PdfReader {
public _PdfReader_1899(String baseArg1)
private sealed class _PdfReader_1903 : PdfReader {
public _PdfReader_1903(String baseArg1)
: base(baseArg1) {
}
@ -1693,12 +1695,12 @@ namespace iText.Kernel.Pdf {
[NUnit.Framework.Test]
public virtual void GetCryptoModeReadingNotCompletedTest() {
String filename = SOURCE_FOLDER + "XrefWithNullOffsets.pdf";
PdfReader getCryptoModeReader = new _PdfReader_1922(filename);
PdfReader getCryptoModeReader = new _PdfReader_1926(filename);
ReadingNotCompletedTest(getCryptoModeReader);
}
private sealed class _PdfReader_1922 : PdfReader {
public _PdfReader_1922(String baseArg1)
private sealed class _PdfReader_1926 : PdfReader {
public _PdfReader_1926(String baseArg1)
: base(baseArg1) {
}
@ -1719,12 +1721,12 @@ namespace iText.Kernel.Pdf {
[NUnit.Framework.Test]
public virtual void ComputeUserPasswordReadingNotCompletedTest() {
String filename = SOURCE_FOLDER + "XrefWithNullOffsets.pdf";
PdfReader computeUserPasswordReader = new _PdfReader_1947(filename);
PdfReader computeUserPasswordReader = new _PdfReader_1951(filename);
ReadingNotCompletedTest(computeUserPasswordReader);
}
private sealed class _PdfReader_1947 : PdfReader {
public _PdfReader_1947(String baseArg1)
private sealed class _PdfReader_1951 : PdfReader {
public _PdfReader_1951(String baseArg1)
: base(baseArg1) {
}
@ -1745,12 +1747,12 @@ namespace iText.Kernel.Pdf {
[NUnit.Framework.Test]
public virtual void GetOriginalFileIdReadingNotCompletedTest() {
String filename = SOURCE_FOLDER + "XrefWithNullOffsets.pdf";
PdfReader getOriginalFileIdReader = new _PdfReader_1970(filename);
PdfReader getOriginalFileIdReader = new _PdfReader_1974(filename);
ReadingNotCompletedTest(getOriginalFileIdReader);
}
private sealed class _PdfReader_1970 : PdfReader {
public _PdfReader_1970(String baseArg1)
private sealed class _PdfReader_1974 : PdfReader {
public _PdfReader_1974(String baseArg1)
: base(baseArg1) {
}
@ -1771,12 +1773,12 @@ namespace iText.Kernel.Pdf {
[NUnit.Framework.Test]
public virtual void GetModifiedFileIdReadingNotCompletedTest() {
String filename = SOURCE_FOLDER + "XrefWithNullOffsets.pdf";
PdfReader getModifiedFileIdReader = new _PdfReader_1993(filename);
PdfReader getModifiedFileIdReader = new _PdfReader_1997(filename);
ReadingNotCompletedTest(getModifiedFileIdReader);
}
private sealed class _PdfReader_1993 : PdfReader {
public _PdfReader_1993(String baseArg1)
private sealed class _PdfReader_1997 : PdfReader {
public _PdfReader_1997(String baseArg1)
: base(baseArg1) {
}
@ -1796,12 +1798,12 @@ namespace iText.Kernel.Pdf {
[NUnit.Framework.Test]
public virtual void IsEncryptedReadingNotCompletedTest() {
String filename = SOURCE_FOLDER + "XrefWithNullOffsets.pdf";
PdfReader isEncryptedReader = new _PdfReader_2016(filename);
PdfReader isEncryptedReader = new _PdfReader_2020(filename);
ReadingNotCompletedTest(isEncryptedReader);
}
private sealed class _PdfReader_2016 : PdfReader {
public _PdfReader_2016(String baseArg1)
private sealed class _PdfReader_2020 : PdfReader {
public _PdfReader_2020(String baseArg1)
: base(baseArg1) {
}
@ -2060,6 +2062,12 @@ namespace iText.Kernel.Pdf {
NUnit.Framework.Assert.AreEqual(KernelExceptionMessageConstant.DOCUMENT_HAS_NOT_BEEN_READ_YET, e.Message);
}
[NUnit.Framework.Test]
public virtual void GetPdfAConformanceLevelNoMetadataTest() {
PdfDocument pdfDoc = new PdfDocument(new PdfReader(new MemoryStream(CreatePdfDocumentForTest())));
NUnit.Framework.Assert.IsNull(pdfDoc.GetReader().GetPdfAConformanceLevel());
}
[NUnit.Framework.Test]
public virtual void XrefStreamPointsItselfTest() {
String fileName = SOURCE_FOLDER + "xrefStreamPointsItself.pdf";
@ -2369,6 +2377,24 @@ namespace iText.Kernel.Pdf {
}
}
[NUnit.Framework.Test]
public virtual void ConformanceLevelCacheTest() {
String filename = DESTINATION_FOLDER + "simpleDoc.pdf";
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(filename));
XMPMeta xmp = XMPMetaFactory.Create();
xmp.AppendArrayItem(XMPConst.NS_DC, "subject", new PropertyOptions(PropertyOptions.ARRAY), "Hello World",
null);
pdfDoc.SetXmpMetadata(xmp);
pdfDoc.AddNewPage();
pdfDoc.Close();
PdfReaderTest.TestPdfDocumentCache pdfTestDoc = new PdfReaderTest.TestPdfDocumentCache(this, new PdfReader
(filename));
for (int i = 0; i < 1000; ++i) {
pdfTestDoc.GetReader().GetPdfAConformanceLevel();
}
NUnit.Framework.Assert.AreEqual(2, pdfTestDoc.GetCounter());
}
private static PdfDictionary GetTestPdfDictionary() {
Dictionary<PdfName, PdfObject> tmpMap = new Dictionary<PdfName, PdfObject>();
tmpMap.Put(new PdfName("b"), new PdfName("c"));
@ -2383,5 +2409,25 @@ namespace iText.Kernel.Pdf {
return baos.ToArray();
}
}
private class TestPdfDocumentCache : PdfDocument {
private int getXmpMetadataCounter;
public TestPdfDocumentCache(PdfReaderTest _enclosing, PdfReader pdfReader)
: base(pdfReader) {
this._enclosing = _enclosing;
}
public override byte[] GetXmpMetadata(bool createNew) {
++this.getXmpMetadataCounter;
return base.GetXmpMetadata(createNew);
}
public virtual int GetCounter() {
return this.getXmpMetadataCounter;
}
private readonly PdfReaderTest _enclosing;
}
}
}

14
itext/itext.kernel/itext/kernel/pdf/PdfReader.cs

@ -86,6 +86,8 @@ namespace iText.Kernel.Pdf {
//indicate nearest first Indirect reference object which includes current reading the object, using for PdfString decrypt
private PdfIndirectReference currentIndirectReference;
private XMPMeta xmpMeta;
protected internal PdfTokenizer tokens;
protected internal PdfEncryption decrypt;
@ -674,14 +676,16 @@ namespace iText.Kernel.Pdf {
if (pdfDocument == null || !pdfDocument.GetXref().IsReadingCompleted()) {
throw new PdfException(KernelExceptionMessageConstant.DOCUMENT_HAS_NOT_BEEN_READ_YET);
}
if (pdfDocument.GetXmpMetadata() != null) {
try {
pdfAConformanceLevel = PdfAConformanceLevel.GetConformanceLevel(XMPMetaFactory.ParseFromBuffer(pdfDocument
.GetXmpMetadata()));
try {
if (xmpMeta == null && pdfDocument.GetXmpMetadata() != null) {
xmpMeta = XMPMetaFactory.ParseFromBuffer(pdfDocument.GetXmpMetadata());
}
catch (XMPException) {
if (xmpMeta != null) {
pdfAConformanceLevel = PdfAConformanceLevel.GetConformanceLevel(xmpMeta);
}
}
catch (XMPException) {
}
}
return pdfAConformanceLevel;
}

2
port-hash

@ -1 +1 @@
0fdc3a0a9c9b4adac10bcc36d14e074d7499e699
f15fb9a5bd75cd2b430deba743a22e308816daf6
Loading…
Cancel
Save