Browse Source

Improve metadata parsing for pdf/a documents

DEVSIX-9088

Autoported commit.
Original commit hash: [3b5d4bd4d]
Manual files:
kernel/src/main/java/com/itextpdf/kernel/xmp/impl/XMPUtilsImpl.java
pull/38/head
Dmitry Radchuk 3 months ago
parent
commit
6632d2f8bc
  1. 29
      itext.tests/itext.pdfa.tests/itext/pdfa/PdfAXmpTest.cs
  2. 2
      itext.tests/itext.pdfa.tests/resources/itext/pdfa/pdfs/docWithControlCharactersInXmp.pdf
  3. 2
      itext.tests/itext.pdfa.tests/resources/itext/pdfa/pdfs/docWithInvalidConformance.pdf
  4. 2
      itext.tests/itext.pdfa.tests/resources/itext/pdfa/pdfs/docWithInvalidMetadata.pdf
  5. 2
      itext/itext.commons/itext/commons/utils/PushbackReader.cs
  6. 1
      itext/itext.kernel/itext/kernel/pdf/PdfReader.cs
  7. 2
      itext/itext.kernel/itext/kernel/xmp/impl/FixASCIIControlsReader.cs
  8. 11
      itext/itext.kernel/itext/kernel/xmp/impl/XMPUtilsImpl.cs
  9. 2
      port-hash

29
itext.tests/itext.pdfa.tests/itext/pdfa/PdfAXmpTest.cs

@ -29,6 +29,7 @@ using iText.Kernel.Utils;
using iText.Kernel.XMP;
using iText.Kernel.XMP.Options;
using iText.Test;
using iText.Test.Attributes;
namespace iText.Pdfa {
[NUnit.Framework.Category("IntegrationTest")]
@ -112,6 +113,34 @@ namespace iText.Pdfa {
}
}
[NUnit.Framework.Test]
public virtual void ReadDocumentWithControlCharactersInXMPMetadata() {
String src = sourceFolder + "pdfs/docWithControlCharactersInXmp.pdf";
using (PdfADocument document = new PdfADocument(new PdfReader(src), new PdfWriter(new MemoryStream()), new
StampingProperties())) {
NUnit.Framework.Assert.AreEqual(PdfConformance.PDF_A_3A, document.GetConformance());
}
}
[NUnit.Framework.Test]
public virtual void ReadDocumentWithInvalidConformance() {
String src = sourceFolder + "pdfs/docWithInvalidConformance.pdf";
using (PdfDocument document = new PdfDocument(new PdfReader(src), new PdfWriter(new MemoryStream()), new StampingProperties
())) {
NUnit.Framework.Assert.AreEqual(PdfConformance.PDF_NONE_CONFORMANCE, document.GetConformance());
}
}
[LogMessage(iText.IO.Logs.IoLogMessageConstant.EXCEPTION_WHILE_UPDATING_XMPMETADATA)]
[NUnit.Framework.Test]
public virtual void ReadDocumentWithInvalidXMPMetadata() {
String src = sourceFolder + "pdfs/docWithInvalidMetadata.pdf";
using (PdfDocument document = new PdfDocument(new PdfReader(src), new PdfWriter(new MemoryStream()), new StampingProperties
())) {
NUnit.Framework.Assert.AreEqual(PdfConformance.PDF_NONE_CONFORMANCE, document.GetConformance());
}
}
[NUnit.Framework.Test]
public virtual void TestPdfUAExtensionMetadata() {
String outFile = destinationFolder + "testPdfUAExtensionMetadata.pdf";

2
itext.tests/itext.pdfa.tests/resources/itext/pdfa/pdfs/docWithControlCharactersInXmp.pdf

@ -0,0 +1,2 @@
Page 1

2
itext.tests/itext.pdfa.tests/resources/itext/pdfa/pdfs/docWithInvalidConformance.pdf

@ -0,0 +1,2 @@
Page 1

2
itext.tests/itext.pdfa.tests/resources/itext/pdfa/pdfs/docWithInvalidMetadata.pdf

@ -0,0 +1,2 @@
Page 1

2
itext/itext.commons/itext/commons/utils/PushbackReader.cs

@ -75,7 +75,7 @@ namespace iText.Commons.Utils {
/// <param name="off"> Offset at which to start writing characters </param>
/// <param name="len"> Maximum number of characters to read
/// </param>
/// <returns> The number of characters read, or -1 if the end of the
/// <returns> The number of characters read, or 0 if the end of the
/// stream has been reached
/// </returns>
public override int Read(char[] cbuf, int off, int len) {

1
itext/itext.kernel/itext/kernel/pdf/PdfReader.cs

@ -674,6 +674,7 @@ namespace iText.Kernel.Pdf {
pdfConformance = PdfConformance.GetConformance(xmpMeta);
}
catch (XMPException) {
pdfConformance = PdfConformance.PDF_NONE_CONFORMANCE;
}
}
return pdfConformance;

2
itext/itext.kernel/itext/kernel/xmp/impl/FixASCIIControlsReader.cs

@ -103,7 +103,7 @@ namespace iText.Kernel.XMP.Impl {
}
}
}
return read > 0 || available ? read : -1;
return read > 0 || available ? read : XMPUtilsImpl.EofReadBytesValue();
}
/// <summary>Processes numeric escaped chars to find out if they are a control character.</summary>

11
itext/itext.kernel/itext/kernel/xmp/impl/XMPUtilsImpl.cs

@ -57,6 +57,17 @@ namespace iText.Kernel.XMP.Impl
{
}
/// <summary>
/// Return value when eof encountered of <seealso cref="System.IO.TextReader.Read(char[], int, int)"/>.
/// </summary>
/// <returns>
/// platform dependent eof read value (0 for C#)
/// </returns>
public static int EofReadBytesValue()
{
return 0;
}
// EMPTY
/// <seealso cref="iText.Kernel.XMP.XMPUtils.CatenateArrayItems(iText.Kernel.XMP.XMPMeta, System.String, System.String, System.String, System.String, bool)
/// "/>

2
port-hash

@ -1 +1 @@
6691f70abaf4119ab2e862f6b708e46bb3e76666
3ccc99bd8391813f729cf2b6c656252687f17629
Loading…
Cancel
Save