From 6ceda3dec2565eb9659b11b7de7ed566aa8fa587 Mon Sep 17 00:00:00 2001 From: Alberto Fernandez Date: Sat, 14 Sep 2019 19:55:30 +0200 Subject: [PATCH] Fixes Producer metadata manipulation in Stamper Fixes #254 --- .gitignore | 3 ++ .../com/lowagie/text/pdf/PdfStamperImp.java | 2 +- .../text/pdf/metadata/ProducerTest.java | 29 ++++++++++++++---- .../resources/pdf_form_metadata_issue_254.pdf | Bin 0 -> 10542 bytes 4 files changed, 27 insertions(+), 7 deletions(-) create mode 100644 openpdf/src/test/resources/pdf_form_metadata_issue_254.pdf diff --git a/.gitignore b/.gitignore index 69b49890a..0c1c8c110 100644 --- a/.gitignore +++ b/.gitignore @@ -181,3 +181,6 @@ buildNumber.properties *.html *.pdf +#Allow pdf as source resources for testing +!openpdf/src/test/resources/*.pdf + diff --git a/openpdf/src/main/java/com/lowagie/text/pdf/PdfStamperImp.java b/openpdf/src/main/java/com/lowagie/text/pdf/PdfStamperImp.java index 53327425f..aa39b7c8c 100644 --- a/openpdf/src/main/java/com/lowagie/text/pdf/PdfStamperImp.java +++ b/openpdf/src/main/java/com/lowagie/text/pdf/PdfStamperImp.java @@ -225,7 +225,7 @@ void close(Map moreInfo) throws IOException { skipInfo = iInfo.getNumber(); } if (oldInfo != null && oldInfo.get(PdfName.PRODUCER) != null) { - producer = oldInfo.getAsString(PdfName.PRODUCER).toString(); + producer = oldInfo.getAsString(PdfName.PRODUCER).toUnicodeString(); } if (producer == null) { producer = Document.getVersion(); diff --git a/openpdf/src/test/java/com/lowagie/text/pdf/metadata/ProducerTest.java b/openpdf/src/test/java/com/lowagie/text/pdf/metadata/ProducerTest.java index 4a1b5aafa..0564bbc2f 100644 --- a/openpdf/src/test/java/com/lowagie/text/pdf/metadata/ProducerTest.java +++ b/openpdf/src/test/java/com/lowagie/text/pdf/metadata/ProducerTest.java @@ -1,23 +1,26 @@ package com.lowagie.text.pdf.metadata; -import com.lowagie.text.Document; -import com.lowagie.text.Paragraph; -import com.lowagie.text.pdf.PdfReader; -import com.lowagie.text.pdf.PdfWriter; - import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; +import java.io.File; import java.io.IOException; import java.util.Map; + import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import com.lowagie.text.Document; +import com.lowagie.text.Paragraph; +import com.lowagie.text.pdf.PdfReader; +import com.lowagie.text.pdf.PdfStamper; +import com.lowagie.text.pdf.PdfWriter; + public class ProducerTest { private static final String PRODUCER = "Producer"; @Test - void changeProducerLineTest() throws IOException { + public void changeProducerLineTest() throws IOException { String expected = "New Producer."; Document document = new Document(); @@ -40,4 +43,18 @@ void changeProducerLineTest() throws IOException { reader.close(); } + + @Test + public void testMetadataProducerStamperIssue254 () throws IOException { + File origin = new File("src/test/resources/pdf_form_metadata_issue_254.pdf"); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + PdfReader reader = new PdfReader(origin.getAbsolutePath()); + PdfStamper stamp = new PdfStamper(reader, baos); + stamp.close(); + byte[] data = baos.toByteArray(); + String sData = new String(data); + Assertions.assertTrue(sData.contains("(LibreOffice 6.0; modified using OpenPDF")); + + + } } \ No newline at end of file diff --git a/openpdf/src/test/resources/pdf_form_metadata_issue_254.pdf b/openpdf/src/test/resources/pdf_form_metadata_issue_254.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7f39123399462bf74e3cac980b66cc320513bcf1 GIT binary patch literal 10542 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