From d9ba0302c51bfff1854eef9578b8dab111bb3a35 Mon Sep 17 00:00:00 2001 From: Amedee Van Gasse Date: Fri, 17 Mar 2017 14:02:48 +0100 Subject: [PATCH 01/46] [RELEASE] 5.5.11-SNAPSHOT -> 5.5.12-SNAPSHOT --- itext/pom.xml | 4 ++-- itext/src/main/java/com/itextpdf/text/Version.java | 2 +- pdfa/pom.xml | 4 ++-- pom.xml | 9 ++++----- xmlworker/pom.xml | 4 ++-- xtra/pom.xml | 4 ++-- 6 files changed, 13 insertions(+), 14 deletions(-) diff --git a/itext/pom.xml b/itext/pom.xml index 1c76dac5e9..cf9d46f16e 100644 --- a/itext/pom.xml +++ b/itext/pom.xml @@ -10,7 +10,7 @@ itextpdf - 5.5.11-SNAPSHOT + 5.5.12-SNAPSHOT iText Core A Free Java-PDF library @@ -299,7 +299,7 @@ 2.10.4 -Xdoclint:none - --allow-script-in-comments + --allow-script-in-comments diff --git a/itext/src/main/java/com/itextpdf/text/Version.java b/itext/src/main/java/com/itextpdf/text/Version.java index dd063b72c9..76e8fecd76 100644 --- a/itext/src/main/java/com/itextpdf/text/Version.java +++ b/itext/src/main/java/com/itextpdf/text/Version.java @@ -70,7 +70,7 @@ public final class Version { * This String contains the version number of this iText release. * For debugging purposes, we request you NOT to change this constant. */ - private String release = "5.5.11-SNAPSHOT"; + private String release = "5.5.12-SNAPSHOT"; /** * This String contains the iText version as shown in the producer line. * iText is a product developed by iText Group NV. diff --git a/pdfa/pom.xml b/pdfa/pom.xml index 3810d7317f..b3ba7e1fef 100644 --- a/pdfa/pom.xml +++ b/pdfa/pom.xml @@ -10,7 +10,7 @@ itext-pdfa - 5.5.11-SNAPSHOT + 5.5.12-SNAPSHOT iText PDF/A iText ISO-19005 Module @@ -192,7 +192,7 @@ 2.10.4 -Xdoclint:none - --allow-script-in-comments + --allow-script-in-comments diff --git a/pom.xml b/pom.xml index a80f10cf92..4292e5a2a2 100644 --- a/pom.xml +++ b/pom.xml @@ -1,6 +1,5 @@ - + 4.0.0 @@ -10,7 +9,7 @@ root - 5.5.11-SNAPSHOT + 5.5.12-SNAPSHOT pom iText @@ -87,7 +86,7 @@ ga('send', 'pageview'); feature/ release/ hotfix/ - + true true @@ -111,7 +110,7 @@ ga('send', 'pageview'); 2.10.4 -Xdoclint:none - --allow-script-in-comments + --allow-script-in-comments diff --git a/xmlworker/pom.xml b/xmlworker/pom.xml index af5e78f8b1..4d8edb0155 100644 --- a/xmlworker/pom.xml +++ b/xmlworker/pom.xml @@ -11,7 +11,7 @@ com.itextpdf.tool xmlworker - 5.5.11-SNAPSHOT + 5.5.12-SNAPSHOT iText XML Worker Parses XML to PDF, with CSS support, using iText @@ -250,7 +250,7 @@ 2.10.4 -Xdoclint:none - --allow-script-in-comments + --allow-script-in-comments diff --git a/xtra/pom.xml b/xtra/pom.xml index 5025138872..0438995868 100644 --- a/xtra/pom.xml +++ b/xtra/pom.xml @@ -10,7 +10,7 @@ itext-xtra - 5.5.11-SNAPSHOT + 5.5.12-SNAPSHOT iText Xtra iText Xtra, part of iText a Free Java-PDF library @@ -201,7 +201,7 @@ 2.10.4 -Xdoclint:none - --allow-script-in-comments + --allow-script-in-comments From 37c61144678689aa9579bfad387e490a259851e9 Mon Sep 17 00:00:00 2001 From: Amedee Van Gasse Date: Fri, 17 Mar 2017 14:03:08 +0100 Subject: [PATCH 02/46] [RELEASE] updating develop poms to master versions to avoid merge conflicts --- itext/pom.xml | 2 +- pdfa/pom.xml | 2 +- pom.xml | 2 +- xmlworker/pom.xml | 2 +- xtra/pom.xml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/itext/pom.xml b/itext/pom.xml index cf9d46f16e..ecf6aee9b5 100644 --- a/itext/pom.xml +++ b/itext/pom.xml @@ -10,7 +10,7 @@ itextpdf - 5.5.12-SNAPSHOT + 5.5.11 iText Core A Free Java-PDF library diff --git a/pdfa/pom.xml b/pdfa/pom.xml index b3ba7e1fef..c4f96d0d32 100644 --- a/pdfa/pom.xml +++ b/pdfa/pom.xml @@ -10,7 +10,7 @@ itext-pdfa - 5.5.12-SNAPSHOT + 5.5.11 iText PDF/A iText ISO-19005 Module diff --git a/pom.xml b/pom.xml index 4292e5a2a2..b64acf756d 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ root - 5.5.12-SNAPSHOT + 5.5.11 pom iText diff --git a/xmlworker/pom.xml b/xmlworker/pom.xml index 4d8edb0155..80945915ee 100644 --- a/xmlworker/pom.xml +++ b/xmlworker/pom.xml @@ -11,7 +11,7 @@ com.itextpdf.tool xmlworker - 5.5.12-SNAPSHOT + 5.5.11 iText XML Worker Parses XML to PDF, with CSS support, using iText diff --git a/xtra/pom.xml b/xtra/pom.xml index 0438995868..a6b715d74b 100644 --- a/xtra/pom.xml +++ b/xtra/pom.xml @@ -10,7 +10,7 @@ itext-xtra - 5.5.12-SNAPSHOT + 5.5.11 iText Xtra iText Xtra, part of iText a Free Java-PDF library From 54cbce258833c06092657c0e94e1d90305890970 Mon Sep 17 00:00:00 2001 From: Alexey Subach Date: Mon, 27 Mar 2017 17:42:26 +0300 Subject: [PATCH 03/46] Add possibility to provide policy to the TSA server. Suggested by Filipe Gomes --- .../pdf/security/TSAClientBouncyCastle.java | 37 +++++++++++++------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/itext/src/main/java/com/itextpdf/text/pdf/security/TSAClientBouncyCastle.java b/itext/src/main/java/com/itextpdf/text/pdf/security/TSAClientBouncyCastle.java index 38c8d74589..7a086ce338 100644 --- a/itext/src/main/java/com/itextpdf/text/pdf/security/TSAClientBouncyCastle.java +++ b/itext/src/main/java/com/itextpdf/text/pdf/security/TSAClientBouncyCastle.java @@ -44,21 +44,10 @@ package com.itextpdf.text.pdf.security; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.math.BigInteger; -import java.net.URL; -import java.net.URLConnection; - import com.itextpdf.text.error_messages.MessageLocalization; import com.itextpdf.text.log.Logger; import com.itextpdf.text.log.LoggerFactory; import com.itextpdf.text.pdf.codec.Base64; -import java.security.GeneralSecurityException; -import java.security.MessageDigest; - import org.bouncycastle.asn1.ASN1ObjectIdentifier; import org.bouncycastle.asn1.cmp.PKIFailureInfo; import org.bouncycastle.tsp.TSPException; @@ -68,6 +57,16 @@ import org.bouncycastle.tsp.TimeStampToken; import org.bouncycastle.tsp.TimeStampTokenInfo; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.math.BigInteger; +import java.net.URL; +import java.net.URLConnection; +import java.security.GeneralSecurityException; +import java.security.MessageDigest; + /** * Time Stamp Authority Client interface implementation using Bouncy Castle * org.bouncycastle.tsp package. @@ -105,7 +104,10 @@ public class TSAClientBouncyCastle implements TSAClient { /** Hash algorithm */ protected String digestAlgorithm; - + + /** TSA request policy */ + private String tsaReqPolicy = null; + /** * Creates an instance of a TSAClient that will use BouncyCastle. * @param url String - Time Stamp Authority URL (i.e. "http://tsatest1.digistamp.com/TSA") @@ -158,6 +160,14 @@ public int getTokenSizeEstimate() { return tokenSizeEstimate; } + public String getTSAReqPolicy() { + return tsaReqPolicy; + } + + public void setTSAReqPolicy(String tsaReqPolicy) { + this.tsaReqPolicy = tsaReqPolicy; + } + /** * Gets the MessageDigest to digest the data imprint * @return the digest algorithm name @@ -179,6 +189,9 @@ public byte[] getTimeStampToken(byte[] imprint) throws IOException, TSPException // Setup the time stamp request TimeStampRequestGenerator tsqGenerator = new TimeStampRequestGenerator(); tsqGenerator.setCertReq(true); + if (tsaReqPolicy != null && tsaReqPolicy.length() > 0) { + tsqGenerator.setReqPolicy(new ASN1ObjectIdentifier(tsaReqPolicy)); + } // tsqGenerator.setReqPolicy("1.3.6.1.4.1.601.10.3.1"); BigInteger nonce = BigInteger.valueOf(System.currentTimeMillis()); TimeStampRequest request = tsqGenerator.generate(new ASN1ObjectIdentifier(DigestAlgorithms.getAllowedDigests(digestAlgorithm)), imprint, nonce); From f9b3338a60769e6a22fee127b2226c52cc605229 Mon Sep 17 00:00:00 2001 From: Alexey Subach Date: Tue, 28 Mar 2017 16:17:13 +0300 Subject: [PATCH 04/46] Fix flattening form fields in case of normal appearance contains PdfIndirectReference. Suggested by https://github.com/lbonco --- .../com/itextpdf/text/pdf/PdfStamperImp.java | 4 +- .../com/itextpdf/text/pdf/FlatteningTest.java | 41 ++++++++++++++++-- .../pdf/FlatteningTest/cmp_tpl3_flattened.pdf | Bin 0 -> 353160 bytes .../itextpdf/text/pdf/FlatteningTest/tpl3.pdf | Bin 0 -> 39010 bytes 4 files changed, 40 insertions(+), 5 deletions(-) create mode 100644 itext/src/test/resources/com/itextpdf/text/pdf/FlatteningTest/cmp_tpl3_flattened.pdf create mode 100644 itext/src/test/resources/com/itextpdf/text/pdf/FlatteningTest/tpl3.pdf diff --git a/itext/src/main/java/com/itextpdf/text/pdf/PdfStamperImp.java b/itext/src/main/java/com/itextpdf/text/pdf/PdfStamperImp.java index 37a6223fdf..d4838fc0db 100644 --- a/itext/src/main/java/com/itextpdf/text/pdf/PdfStamperImp.java +++ b/itext/src/main/java/com/itextpdf/text/pdf/PdfStamperImp.java @@ -931,7 +931,9 @@ protected void flatFields() { PdfDictionary appDic = merged.getAsDict(PdfName.AP); PdfObject as_n = null; if (appDic != null) { - as_n = appDic.getAsStream(PdfName.N); + as_n = appDic.getDirectObject(PdfName.N); + if (as_n == null) + as_n = appDic.getAsStream(PdfName.N); if (as_n == null) as_n = appDic.getAsDict(PdfName.N); } diff --git a/itext/src/test/java/com/itextpdf/text/pdf/FlatteningTest.java b/itext/src/test/java/com/itextpdf/text/pdf/FlatteningTest.java index 05ed7b0aa6..8e027f4a1e 100644 --- a/itext/src/test/java/com/itextpdf/text/pdf/FlatteningTest.java +++ b/itext/src/test/java/com/itextpdf/text/pdf/FlatteningTest.java @@ -50,6 +50,8 @@ import com.itextpdf.text.Phrase; import com.itextpdf.text.Rectangle; import com.itextpdf.text.pdf.events.FieldPositioningEvents; +import junit.framework.Assert; +import org.junit.Test; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -58,10 +60,9 @@ import java.io.FileOutputStream; import java.io.FilenameFilter; import java.io.IOException; - -import org.junit.Test; - -import junit.framework.Assert; +import java.io.OutputStream; +import java.util.Map; +import java.util.Set; /** * @author Michael Demey @@ -71,6 +72,38 @@ public class FlatteningTest { private static final String RESOURCES_FOLDER = "./src/test/resources/com/itextpdf/text/pdf/FlatteningTest/"; private static final String OUTPUT_FOLDER = "./target/com/itextpdf/test/pdf/FlatteningTest/"; + @Test + public void testFlatteningNewAppearances() throws InterruptedException, DocumentException, IOException { + new File(OUTPUT_FOLDER).mkdirs(); + + final String OUT = "tpl3_flattened.pdf"; + + PdfReader reader = new PdfReader(RESOURCES_FOLDER + "tpl3.pdf"); + AcroFields fields = reader.getAcroFields(); + if (fields != null && fields.getFields() != null && fields.getFields().size() > 0) { + OutputStream out = null; + out = new FileOutputStream(OUTPUT_FOLDER + OUT); + PdfStamper stamp = new PdfStamper(reader, out); + stamp.setFormFlattening(true); + AcroFields form = stamp.getAcroFields(); + + Set> map = form.getFields().entrySet(); + for (Map.Entry e : map) { + form.setField(e.getKey(), e.getKey()); + } + + stamp.close(); + out.close(); + } + reader.close(); + + CompareTool compareTool = new CompareTool(); + String errorMessage = compareTool.compare(OUTPUT_FOLDER + OUT, RESOURCES_FOLDER + "cmp_" + OUT, OUTPUT_FOLDER, "diff"); + if (errorMessage != null) { + Assert.fail(errorMessage); + } + } + @Test public void testFlattening() throws IOException, DocumentException, InterruptedException { final String INPUT_FOLDER = RESOURCES_FOLDER + "input/"; diff --git a/itext/src/test/resources/com/itextpdf/text/pdf/FlatteningTest/cmp_tpl3_flattened.pdf b/itext/src/test/resources/com/itextpdf/text/pdf/FlatteningTest/cmp_tpl3_flattened.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0b680e7d673bc5f2beb86674a600880fdc587ea2 GIT binary patch literal 353160 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�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 literal 0 HcmV?d00001 diff --git a/itext/src/test/resources/com/itextpdf/text/pdf/FlatteningTest/tpl3.pdf b/itext/src/test/resources/com/itextpdf/text/pdf/FlatteningTest/tpl3.pdf new file mode 100644 index 0000000000000000000000000000000000000000..18bfb24421195fb89c92541c8d4c7d1aec44f078 GIT binary patch literal 39010 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 Date: Thu, 30 Mar 2017 16:51:32 +0300 Subject: [PATCH 05/46] Make sure output directories are created in PdfCopyTest --- itext/src/test/java/com/itextpdf/text/pdf/PdfCopyTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/itext/src/test/java/com/itextpdf/text/pdf/PdfCopyTest.java b/itext/src/test/java/com/itextpdf/text/pdf/PdfCopyTest.java index 5208f9fc51..aa3409d7a6 100644 --- a/itext/src/test/java/com/itextpdf/text/pdf/PdfCopyTest.java +++ b/itext/src/test/java/com/itextpdf/text/pdf/PdfCopyTest.java @@ -79,6 +79,7 @@ public class PdfCopyTest { @Before public void setUp() throws Exception { TestResourceUtils.purgeTempFiles(); + new File("./target/com/itextpdf/test/pdf/PdfCopyTest").mkdirs(); } @After From 72ebad6228162de4597a101c36792d1cfdad2978 Mon Sep 17 00:00:00 2001 From: Alexey Subach Date: Fri, 31 Mar 2017 12:20:03 +0300 Subject: [PATCH 06/46] Fix exception when signing a document that is encrypted with certificate. Suggested by https://github.com/MADzO --- .../java/com/itextpdf/text/pdf/PdfReader.java | 8 +- .../itextpdf/text/pdf/PdfEncryptionTest.java | 91 ++++++++++++++++-- .../text/pdf/PdfEncryptionTest/in.pdf | Bin 0 -> 950 bytes .../text/pdf/PdfEncryptionTest/test.cer | Bin 0 -> 899 bytes .../text/pdf/PdfEncryptionTest/test.p12 | Bin 0 -> 2598 bytes 5 files changed, 89 insertions(+), 10 deletions(-) create mode 100644 itext/src/test/resources/com/itextpdf/text/pdf/PdfEncryptionTest/in.pdf create mode 100644 itext/src/test/resources/com/itextpdf/text/pdf/PdfEncryptionTest/test.cer create mode 100644 itext/src/test/resources/com/itextpdf/text/pdf/PdfEncryptionTest/test.p12 diff --git a/itext/src/main/java/com/itextpdf/text/pdf/PdfReader.java b/itext/src/main/java/com/itextpdf/text/pdf/PdfReader.java index b1110b94f7..1b31387e0e 100644 --- a/itext/src/main/java/com/itextpdf/text/pdf/PdfReader.java +++ b/itext/src/main/java/com/itextpdf/text/pdf/PdfReader.java @@ -63,6 +63,9 @@ import com.itextpdf.text.pdf.interfaces.PdfViewerPreferences; import com.itextpdf.text.pdf.internal.PdfViewerPreferencesImp; import com.itextpdf.text.pdf.security.ExternalDecryptionProcess; +import org.bouncycastle.cert.X509CertificateHolder; +import org.bouncycastle.cms.CMSEnvelopedData; +import org.bouncycastle.cms.RecipientInformation; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -86,10 +89,6 @@ import java.util.Stack; import java.util.zip.InflaterInputStream; -import org.bouncycastle.cert.X509CertificateHolder; -import org.bouncycastle.cms.CMSEnvelopedData; -import org.bouncycastle.cms.RecipientInformation; - /** * Reads a PDF document. * @author Paulo Soares @@ -1084,6 +1083,7 @@ else if (PdfName.AESV3.equals(dic.get(PdfName.CFM))) { } } else if (filter.equals(PdfName.PUBSEC)) { + decrypt.documentID = documentID; if ((cryptoMode & PdfWriter.ENCRYPTION_MASK) == PdfWriter.ENCRYPTION_AES_256) decrypt.setKey(encryptionKey); else diff --git a/itext/src/test/java/com/itextpdf/text/pdf/PdfEncryptionTest.java b/itext/src/test/java/com/itextpdf/text/pdf/PdfEncryptionTest.java index 89f1c0c858..2813a00690 100644 --- a/itext/src/test/java/com/itextpdf/text/pdf/PdfEncryptionTest.java +++ b/itext/src/test/java/com/itextpdf/text/pdf/PdfEncryptionTest.java @@ -46,16 +46,35 @@ This file is part of the iText (R) project. import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Paragraph; +import com.itextpdf.text.pdf.security.BouncyCastleDigest; +import com.itextpdf.text.pdf.security.DigestAlgorithms; +import com.itextpdf.text.pdf.security.ExternalDigest; +import com.itextpdf.text.pdf.security.ExternalSignature; +import com.itextpdf.text.pdf.security.MakeSignature; +import com.itextpdf.text.pdf.security.PrivateKeySignature; +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import org.junit.Before; +import org.junit.Test; + import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; -import org.junit.Before; -import org.junit.Test; - -import junit.framework.Assert; - -import static junit.framework.Assert.*; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.security.GeneralSecurityException; +import java.security.KeyStore; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.PrivateKey; +import java.security.Security; +import java.security.UnrecoverableKeyException; +import java.security.cert.Certificate; +import java.security.cert.CertificateException; +import java.security.cert.CertificateFactory; +import java.security.cert.X509Certificate; + +import static junit.framework.Assert.assertNull; public class PdfEncryptionTest { @@ -119,4 +138,64 @@ public void computeUserPasswordAES256() throws Exception { assertNull(password); } + + + @Test + public void encryptWithCertificateAndSignTest() throws IOException, DocumentException, GeneralSecurityException { + removeCryptographyRestrictions(); + Security.addProvider(new BouncyCastleProvider()); + String inPdf = SOURCE_FOLDER + "in.pdf"; + String outPdf = DEST_FOLDER + "encrypt_cert_signed.pdf"; + String tmpPdf = DEST_FOLDER + "encrypt_cert.pdf"; + + encryptPdfWithCertificate(inPdf, tmpPdf, SOURCE_FOLDER + "test.cer"); + + Certificate cert = getPublicCertificate(SOURCE_FOLDER + "test.cer"); + PrivateKey privateKey = getPrivateKey(SOURCE_FOLDER + "test.p12"); + certSign(getPublicCertificate(SOURCE_FOLDER + "test.cer"), privateKey, outPdf, new PdfReader(tmpPdf, cert, privateKey, new BouncyCastleProvider().getName()), "reason", "location"); + } + + private static void encryptPdfWithCertificate(String sourceDocument, String targetDocument, String certPath) throws IOException, DocumentException, CertificateException { + Certificate cert = getPublicCertificate(certPath); + Certificate[] certs = new Certificate[] {cert}; + PdfReader reader = new PdfReader(sourceDocument); + PdfStamper st = new PdfStamper(reader, new FileOutputStream(targetDocument), '\0', false); + int[] x = new int[1]; + x[0] = PdfWriter.ALLOW_SCREENREADERS; + st.setEncryption(certs, x, PdfWriter.STANDARD_ENCRYPTION_40); + st.close(); + } + + private static Certificate getPublicCertificate(String path) throws IOException, CertificateException { + FileInputStream is = new FileInputStream(path); + CertificateFactory cf = CertificateFactory.getInstance("X.509"); + X509Certificate cert = (X509Certificate) cf.generateCertificate(is); + return cert; + } + + private static PrivateKey getPrivateKey(String path) throws IOException, KeyStoreException, CertificateException, NoSuchAlgorithmException, UnrecoverableKeyException { + KeyStore ks = KeyStore.getInstance("PKCS12"); + ks.load(new FileInputStream(path), "kspass".toCharArray()); + String alias = ks.aliases().nextElement(); + PrivateKey pk = (PrivateKey) ks.getKey(alias, "kspass".toCharArray()); + return pk; + } + + private static void certSign(Certificate cert, PrivateKey privateKey, String destinationPath, PdfReader reader, String reason, String location) throws IOException, DocumentException, GeneralSecurityException { + Certificate[] chain = new Certificate[] {cert}; + + BouncyCastleProvider provider = new BouncyCastleProvider(); + ExternalSignature pks = new PrivateKeySignature(privateKey, DigestAlgorithms.SHA1, provider.getName()); + + FileOutputStream fout = new FileOutputStream(destinationPath); + PdfStamper stamper = PdfStamper.createSignature(reader, fout, '\0', null, true); + PdfSignatureAppearance appearance = stamper.getSignatureAppearance(); + appearance.setReason(reason); + appearance.setLocation(location); + ExternalDigest digest = new BouncyCastleDigest(); + MakeSignature.signDetached(appearance, digest, pks, chain, null, null, null, 0, + MakeSignature.CryptoStandard.CADES); + stamper.close(); + } + } diff --git a/itext/src/test/resources/com/itextpdf/text/pdf/PdfEncryptionTest/in.pdf b/itext/src/test/resources/com/itextpdf/text/pdf/PdfEncryptionTest/in.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2f59b49e6afeceecaabde04b1dc9fcba528baadf GIT binary patch literal 950 zcmah|O>fgM7#>JST?8Dsa6Tg%ki&S!(FN?kv;ihV?BwH?|X(!?!6T|7DNDBQU2 z$bl1A4j_TJ@f(nk5QRU`ZTt`H&@G~qz)}+X_47V?-siQmPQ6*cMN7$^oqzkG7ytn} zc&e1kuo;dyVX!&&IH?n#1_bVqXvCiY%dS*n&WLxUOy6u=Fl9b_rgf0+W?JW}*+!o~ z{nX5ZOlv;Nv_9m%-~MvO?#z{ohxJ!qf2p@-Ybd&VhTOAt6@CGIE3~klMn&y{=CDqp}|3~y;D;iQD&xZ?LN`*Jcv>m=6 dz!H9BllB$d#AN85K^Mn-N{27`P=1>+kVWyB^ zLtz6!5QjsUD;0K9u33GtO@{7_91q}E= zLfpdaU?Kldm_}x(#?a!_A_E0+UPBWDOCuu#OG6-tlHfNo1PWLfSwaQq@1!P1CFEdX zWMyD(V&rEqXkz4IYGPz$_`Sk%W6$-D%MGn^hd#60`Geai#;!By9ibvYh`=+mC zZD4sPk`r<6_`}oF*Q}U$R6oSv+1yo*txn5+Zpd4@I8~(e#E(_MRV@qd{C~ica!Bl2 z_Jyf8HZ>@ytYWt5I%PMRuc~ZnUe(6^lOykb{6GEMj_c;@4=bE`o_g5m=6%N#jd|UI zUP8g|EpuvDU#`f~o@aT_)p&aQvH9D@yPN!W`8>B2dMi2qNop=v`<)LfqgcfsWy%QSy<{dn>tXP$F)3EQb><|;;aG`l1o`2YL*dndV1F~Kb^Xz@{z<*o7>kI)?nf?~ zlh#Rh^Cgzddu_4o@4DSPkOL8zwt#`i$dGwovg!96%bi;noOhRQlQ=cSo+VvA?fSvz zzr0g#|0`kYiw9M`Wsbv0&RrNg&yb(TDbqbJ$Rf5r*0$cJVziClYO^`6!9ouH1! z*FS~KGt}~;Yc8rtl&t!u?9b=tt2JA(=FIK+wZ@A)_3gtK%zvZ#cE{JnUQgq%xcVE^ nbxqW`Q?ae~Yv1jCai_GtSZLWfF3&rEC?tPt+kH;Y2?F^50A5$q literal 0 HcmV?d00001 diff --git a/itext/src/test/resources/com/itextpdf/text/pdf/PdfEncryptionTest/test.p12 b/itext/src/test/resources/com/itextpdf/text/pdf/PdfEncryptionTest/test.p12 new file mode 100644 index 0000000000000000000000000000000000000000..dc8d373503a793f5ed11bf48364ccd837dce937f GIT binary patch literal 2598 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 vGTsAQiS1qzwzeqZ9WaYrhA@cZb)JpoX5 Date: Fri, 31 Mar 2017 12:22:15 +0300 Subject: [PATCH 07/46] Fix test --- .../src/test/java/com/itextpdf/text/pdf/PdfEncryptionTest.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/itext/src/test/java/com/itextpdf/text/pdf/PdfEncryptionTest.java b/itext/src/test/java/com/itextpdf/text/pdf/PdfEncryptionTest.java index 2813a00690..5249e13792 100644 --- a/itext/src/test/java/com/itextpdf/text/pdf/PdfEncryptionTest.java +++ b/itext/src/test/java/com/itextpdf/text/pdf/PdfEncryptionTest.java @@ -60,8 +60,6 @@ This file is part of the iText (R) project. import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; import java.security.GeneralSecurityException; import java.security.KeyStore; import java.security.KeyStoreException; @@ -142,7 +140,6 @@ public void computeUserPasswordAES256() throws Exception { @Test public void encryptWithCertificateAndSignTest() throws IOException, DocumentException, GeneralSecurityException { - removeCryptographyRestrictions(); Security.addProvider(new BouncyCastleProvider()); String inPdf = SOURCE_FOLDER + "in.pdf"; String outPdf = DEST_FOLDER + "encrypt_cert_signed.pdf"; From 4b6cf0f8cba9cee16d469fb9875d26f79502324c Mon Sep 17 00:00:00 2001 From: Alexey Subach Date: Fri, 31 Mar 2017 12:26:44 +0300 Subject: [PATCH 08/46] Allow running new test with unpatched JVM --- .../itextpdf/text/pdf/PdfEncryptionTest.java | 58 ++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/itext/src/test/java/com/itextpdf/text/pdf/PdfEncryptionTest.java b/itext/src/test/java/com/itextpdf/text/pdf/PdfEncryptionTest.java index 5249e13792..e520f3c67a 100644 --- a/itext/src/test/java/com/itextpdf/text/pdf/PdfEncryptionTest.java +++ b/itext/src/test/java/com/itextpdf/text/pdf/PdfEncryptionTest.java @@ -60,6 +60,8 @@ This file is part of the iText (R) project. import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; import java.security.GeneralSecurityException; import java.security.KeyStore; import java.security.KeyStoreException; @@ -137,9 +139,9 @@ public void computeUserPasswordAES256() throws Exception { assertNull(password); } - @Test public void encryptWithCertificateAndSignTest() throws IOException, DocumentException, GeneralSecurityException { + removeCryptographyRestrictions(); Security.addProvider(new BouncyCastleProvider()); String inPdf = SOURCE_FOLDER + "in.pdf"; String outPdf = DEST_FOLDER + "encrypt_cert_signed.pdf"; @@ -150,6 +152,7 @@ public void encryptWithCertificateAndSignTest() throws IOException, DocumentExce Certificate cert = getPublicCertificate(SOURCE_FOLDER + "test.cer"); PrivateKey privateKey = getPrivateKey(SOURCE_FOLDER + "test.p12"); certSign(getPublicCertificate(SOURCE_FOLDER + "test.cer"), privateKey, outPdf, new PdfReader(tmpPdf, cert, privateKey, new BouncyCastleProvider().getName()), "reason", "location"); + restoreCryptographyRestrictions(); } private static void encryptPdfWithCertificate(String sourceDocument, String targetDocument, String certPath) throws IOException, DocumentException, CertificateException { @@ -195,4 +198,57 @@ private static void certSign(Certificate cert, PrivateKey privateKey, String des stamper.close(); } + /** + * Due to import control restrictions by the governments of a few countries, + * the encryption libraries shipped by default with the Java SDK restrict the + * length, and as a result the strength, of encryption keys. Be aware that by + * using this method we remove cryptography restrictions via reflection for + * testing purposes. + *
+ * For more conventional way of solving this problem you need to replace the + * default security JARs in your Java installation with the Java Cryptography + * Extension (JCE) Unlimited Strength Jurisdiction Policy Files. These JARs + * are available for download from http://java.oracle.com/ in eligible countries. + */ + public static void removeCryptographyRestrictions() { + try { + Field field = Class.forName("javax.crypto.JceSecurity"). + getDeclaredField("isRestricted"); + if (field.isAccessible()) { + // unexpected case + return; + } + + Field modifiersField = Field.class.getDeclaredField("modifiers"); + modifiersField.setAccessible(true); + modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL); + modifiersField.setAccessible(false); + + field.setAccessible(true); + if (field.getBoolean(null)) { + field.set(null, java.lang.Boolean.FALSE); + } else { + field.setAccessible(false); + } + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + /** + * By using this method we restore cryptography restrictions via reflection. + */ + public static void restoreCryptographyRestrictions() { + try { + Field field = Class.forName("javax.crypto.JceSecurity"). + getDeclaredField("isRestricted"); + if (field.isAccessible()) { + field.set(null, java.lang.Boolean.TRUE); + field.setAccessible(false); + } + } catch (Exception ex) { + ex.printStackTrace(); + } + } + } From 5240161a7678e0f6bb01775f66f1511f63ac7632 Mon Sep 17 00:00:00 2001 From: Bart De Meyer Date: Wed, 12 Apr 2017 13:14:14 +0200 Subject: [PATCH 09/46] Hyperlink 'gratis' to Wikipedia article https://en.wikipedia.org/wiki/Gratis_versus_libre Closes https://github.com/itext/itextsharp/pull/29 --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index bec8eef932..f5f7a71f56 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ iText is licensed as [AGPL][agpl] software. AGPL is a free / open source software license. -This doesn't mean the software is gratis! +This doesn't mean the software is [gratis][gratis]! Buying a license is mandatory as soon as you develop commercial activities distributing the iText software inside your product or deploying it on a network @@ -41,3 +41,4 @@ Contact sales for more info: http://itextpdf.com/sales [contributing]: CONTRIBUTING.md [extrajars]: EXTRAJARS.md [itext]: http://itextpdf.com/ +[gratis]: https://en.wikipedia.org/wiki/Gratis_versus_libre From 6ca0f4adcdeb179e9a63178ce1cd7502c0e21eff Mon Sep 17 00:00:00 2001 From: Ilya Idamkin Date: Thu, 20 Apr 2017 20:48:05 +0300 Subject: [PATCH 10/46] Fix incorrect rotation of flattened acroField. Add test. The rotation of programmatically filled form filed was already applied via matrix of generated appearance stream. So there is no need to apply it again on form flattening. DEV-1856 --- .../com/itextpdf/text/pdf/PdfStamperImp.java | 37 +++++++++++------- .../com/itextpdf/text/pdf/FlatteningTest.java | 23 +++++++++++ .../pdf/FlatteningTest/cmp_rotatedField.pdf | Bin 0 -> 62109 bytes .../text/pdf/FlatteningTest/rotatedField.pdf | Bin 0 -> 61930 bytes 4 files changed, 45 insertions(+), 15 deletions(-) create mode 100644 itext/src/test/resources/com/itextpdf/text/pdf/FlatteningTest/cmp_rotatedField.pdf create mode 100644 itext/src/test/resources/com/itextpdf/text/pdf/FlatteningTest/rotatedField.pdf diff --git a/itext/src/main/java/com/itextpdf/text/pdf/PdfStamperImp.java b/itext/src/main/java/com/itextpdf/text/pdf/PdfStamperImp.java index d4838fc0db..e66f37e0e2 100644 --- a/itext/src/main/java/com/itextpdf/text/pdf/PdfStamperImp.java +++ b/itext/src/main/java/com/itextpdf/text/pdf/PdfStamperImp.java @@ -937,6 +937,8 @@ protected void flatFields() { if (as_n == null) as_n = appDic.getAsDict(PdfName.N); } + //The rotation can be already applied if the appearance stream was written to document during setField method + boolean applyRotation = false; if (acroFields.isGenerateAppearances()) { if (appDic == null || as_n == null) { try { @@ -952,6 +954,7 @@ protected void flatFields() { PdfArray bbox = stream.getAsArray(PdfName.BBOX); PdfArray rect = merged.getAsArray(PdfName.RECT); if (bbox != null && rect != null) { + applyRotation = true; float rectWidth = rect.getAsNumber(2).floatValue() - rect.getAsNumber(0).floatValue(); float bboxWidth = bbox.getAsNumber(2).floatValue() - bbox.getAsNumber(0).floatValue(); float rectHeight = rect.getAsNumber(3).floatValue() - rect.getAsNumber(1).floatValue(); @@ -1036,23 +1039,27 @@ else if (objReal instanceof PdfStream) { Rectangle box = PdfReader.getNormalizedRectangle(merged.getAsArray(PdfName.RECT)); PdfContentByte cb = getOverContent(page); cb.setLiteral("Q "); - /* - Apply field rotation - */ - AffineTransform tf = new AffineTransform(); - double fieldRotation = 0; - if(merged.getAsDict(PdfName.MK) != null){ - if(merged.getAsDict(PdfName.MK).get(PdfName.R) != null){ - fieldRotation = merged.getAsDict(PdfName.MK).getAsNumber(PdfName.R).floatValue(); + if (applyRotation) { + /* + Apply field rotation + */ + AffineTransform tf = new AffineTransform(); + double fieldRotation = 0; + if (merged.getAsDict(PdfName.MK) != null) { + if (merged.getAsDict(PdfName.MK).get(PdfName.R) != null) { + fieldRotation = merged.getAsDict(PdfName.MK).getAsNumber(PdfName.R).floatValue(); + } } + //Cast to radians + fieldRotation = fieldRotation * Math.PI / 180; + //Clamp to [-2*Pi, 2*Pi] + fieldRotation = fieldRotation % (2 * Math.PI); + //Calculate transformation matrix + tf = calculateTemplateTransformationMatrix(tf, fieldRotation, box); + cb.addTemplate(app, tf); + } else { + cb.addTemplate(app, box.getLeft(), box.getBottom()); } - //Cast to radians - fieldRotation = fieldRotation * Math.PI/180; - //Clamp to [-2*Pi, 2*Pi] - fieldRotation = fieldRotation%(2*Math.PI); - //Calculate transformation matrix - tf = calculateTemplateTransformationMatrix(tf,fieldRotation,box); - cb.addTemplate(app, tf); cb.setLiteral("q "); } } diff --git a/itext/src/test/java/com/itextpdf/text/pdf/FlatteningTest.java b/itext/src/test/java/com/itextpdf/text/pdf/FlatteningTest.java index 8e027f4a1e..4b6dac9f14 100644 --- a/itext/src/test/java/com/itextpdf/text/pdf/FlatteningTest.java +++ b/itext/src/test/java/com/itextpdf/text/pdf/FlatteningTest.java @@ -355,4 +355,27 @@ public void testAnnotationFlatteningWithSkewAndRotation() throws IOException, Do Assert.fail(errorMessage); } } + + @Test + public void testRotatedFilledField() throws IOException, DocumentException, InterruptedException { + new File(OUTPUT_FOLDER).mkdirs(); + + String file = "rotatedField.pdf"; + PdfReader pdfReader = new PdfReader(RESOURCES_FOLDER + file); + PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileOutputStream(OUTPUT_FOLDER + file)); + + AcroFields fields = pdfStamper.getAcroFields(); + fields.setField("Text1", "TEST"); + fields.setGenerateAppearances(true); + + pdfStamper.setFormFlattening(true); + pdfStamper.close(); + pdfReader.close(); + // compare + CompareTool compareTool = new CompareTool(); + String errorMessage = compareTool.compareByContent(OUTPUT_FOLDER + file, RESOURCES_FOLDER + "cmp_" + file, OUTPUT_FOLDER, "diff"); + if (errorMessage != null) { + Assert.fail(errorMessage); + } + } } diff --git a/itext/src/test/resources/com/itextpdf/text/pdf/FlatteningTest/cmp_rotatedField.pdf b/itext/src/test/resources/com/itextpdf/text/pdf/FlatteningTest/cmp_rotatedField.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2ca54188af6b37e31170c0c7259c823ea1685242 GIT binary patch literal 62109 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 Rp|WrV5KvH1+e8Nh{4e&((RKg; literal 0 HcmV?d00001 From c18afaa7759f5e34d040b2a8ca025919d2992461 Mon Sep 17 00:00:00 2001 From: "joris.schellekens" Date: Mon, 8 May 2017 12:25:21 +0200 Subject: [PATCH 11/46] DEV-1859 Added check to prevent ill-formatted StructureElements to cause NullReferenceException. Instead InvalidPdfException is thrown. --- .../resources/com/itextpdf/text/l10n/error/en.lng | 1 + .../resources/com/itextpdf/text/l10n/error/nl.lng | 1 + .../com/itextpdf/text/pdf/mc/StructureItems.java | 7 ++++--- .../com/itextpdf/text/pdf/mc/StructureObject.java | 13 +++++++------ 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/itext/src/main/resources/com/itextpdf/text/l10n/error/en.lng b/itext/src/main/resources/com/itextpdf/text/l10n/error/en.lng index 4686f1186c..6eadd9bc22 100644 --- a/itext/src/main/resources/com/itextpdf/text/l10n/error/en.lng +++ b/itext/src/main/resources/com/itextpdf/text/l10n/error/en.lng @@ -392,6 +392,7 @@ stdcf.not.found.encryption=/StdCF not found (encryption) stream.could.not.be.compressed.filter.is.not.a.name.or.array=Stream could not be compressed: filter is not a name or array. stream.object.dictionary.shall.not.contain.the.f.ffilter.or.fdecodeparams.keys=Stream object dictionary shall not contain the F, FFilter or FDecodeParams keys. structparent.not.found=StructParent not found. +structparentid.not.found=StructParent ID not found. support.only.sha1.hash.algorithm=Support only SHA1 hash algorithm. support.only.rsa.and.dsa.algorithms=Support only RSA and DSA algorithms. invalid.structparent=Invalid StructParent. diff --git a/itext/src/main/resources/com/itextpdf/text/l10n/error/nl.lng b/itext/src/main/resources/com/itextpdf/text/l10n/error/nl.lng index 45d943870b..c4794c53c5 100644 --- a/itext/src/main/resources/com/itextpdf/text/l10n/error/nl.lng +++ b/itext/src/main/resources/com/itextpdf/text/l10n/error/nl.lng @@ -392,6 +392,7 @@ stdcf.not.found.encryption=/StdCF niet gevonden (encryption) stream.could.not.be.compressed.filter.is.not.a.name.or.array=Stream kon niet gecomprimeerd worden: de filter is geen naam of array. stream.object.dictionary.shall.not.contain.the.f.ffilter.or.fdecodeparams.keys=Stream object dictionary mag geen F, FFilter of FDecodeParams sleutels bevatten. structparent.not.found=StructParent niet gevonden. +structparentid.not.found=StructParent ID niet gevonden. support.only.sha1.hash.algorithm=Enkel ondersteuning voor SHA1 hash algoritme. support.only.rsa.and.dsa.algorithms=Enkel ondersteuning voor RSA en DSA algoritmes. invalid.structparent=Ongeldige StructParent. diff --git a/xtra/src/main/java/com/itextpdf/text/pdf/mc/StructureItems.java b/xtra/src/main/java/com/itextpdf/text/pdf/mc/StructureItems.java index 304e7cbed3..36b93c1f1d 100644 --- a/xtra/src/main/java/com/itextpdf/text/pdf/mc/StructureItems.java +++ b/xtra/src/main/java/com/itextpdf/text/pdf/mc/StructureItems.java @@ -50,6 +50,7 @@ import com.itextpdf.text.DocumentException; import com.itextpdf.text.error_messages.MessageLocalization; +import com.itextpdf.text.exceptions.InvalidPdfException; import com.itextpdf.text.log.Logger; import com.itextpdf.text.log.LoggerFactory; import com.itextpdf.text.pdf.PdfArray; @@ -83,7 +84,7 @@ public class StructureItems extends ArrayList { * @param reader the reader holding the PDF to examine */ public StructureItems(PdfReader reader) - throws DocumentException { + throws DocumentException, InvalidPdfException { super(); PdfDictionary catalog = reader.getCatalog(); structTreeRoot = catalog.getAsDict(PdfName.STRUCTTREEROOT); @@ -117,7 +118,7 @@ public StructureItems(PdfReader reader) * @param ref the reference to the StructElem dictionary * @throws DocumentException */ - protected void processStructElems(PdfDictionary structElem, PdfIndirectReference ref) { + protected void processStructElems(PdfDictionary structElem, PdfIndirectReference ref) throws InvalidPdfException { LOGGER.info(String.format("addStructureItems(%s, %s)", structElem, ref)); if (structElem == null) return; @@ -132,7 +133,7 @@ protected void processStructElems(PdfDictionary structElem, PdfIndirectReference * @param ref the reference to the StructElem dictionary * @param object the kids object */ - protected void processStructElemKids(PdfDictionary structElem, PdfIndirectReference ref, PdfObject object) { + protected void processStructElemKids(PdfDictionary structElem, PdfIndirectReference ref, PdfObject object) throws InvalidPdfException { LOGGER.info(String.format("addStructureItem(%s, %s, %s)", structElem, ref, object)); if (object == null) return; diff --git a/xtra/src/main/java/com/itextpdf/text/pdf/mc/StructureObject.java b/xtra/src/main/java/com/itextpdf/text/pdf/mc/StructureObject.java index 3138412265..2f6d8804b5 100644 --- a/xtra/src/main/java/com/itextpdf/text/pdf/mc/StructureObject.java +++ b/xtra/src/main/java/com/itextpdf/text/pdf/mc/StructureObject.java @@ -43,10 +43,8 @@ */ package com.itextpdf.text.pdf.mc; -import com.itextpdf.text.pdf.PdfDictionary; -import com.itextpdf.text.pdf.PdfIndirectReference; -import com.itextpdf.text.pdf.PdfName; -import com.itextpdf.text.pdf.PdfObject; +import com.itextpdf.text.exceptions.InvalidPdfException; +import com.itextpdf.text.pdf.*; /** * A StructureItem that refers to an object from an OBJR dictionary. @@ -70,12 +68,15 @@ public class StructureObject extends StructureItem { * @param ref the reference of the parent structure element * @param dict the object reference dictionary */ - public StructureObject(PdfDictionary structElem, PdfIndirectReference ref, PdfDictionary dict) { + public StructureObject(PdfDictionary structElem, PdfIndirectReference ref, PdfDictionary dict) throws InvalidPdfException { this.structElem = structElem; this.ref = ref; this.obj = dict.getDirectObject(PdfName.OBJ); this.objref = dict.getAsIndirectObject(PdfName.OBJ); - this.structParent = ((PdfDictionary)obj).getAsNumber(PdfName.STRUCTPARENT).intValue(); + PdfNumber sp = ((PdfDictionary)obj).getAsNumber(PdfName.STRUCTPARENT); + if(sp == null) + throw new InvalidPdfException(""); + this.structParent = sp.intValue(); PdfIndirectReference pg = dict.getAsIndirectObject(PdfName.PG); if (pg == null) pg = structElem.getAsIndirectObject(PdfName.PG); From e3b3f89e2155f59b1aacb7617f3d10ce39578dcc Mon Sep 17 00:00:00 2001 From: Alexey Subach Date: Fri, 25 Nov 2016 13:01:22 +0300 Subject: [PATCH 12/46] Better processing intructions handling during XML parsing. More flexible parser configuration DEV-1858 --- .../tool/xml/parser/StateController.java | 4 +++ .../itextpdf/tool/xml/parser/XMLParser.java | 35 ++++++++++++++----- .../tool/xml/parser/XMLParserMemory.java | 11 +++++- ...ProcessingInstructionEncounteredState.java | 1 + .../xml/parser/state/SelfClosingTagState.java | 2 ++ .../xml/parser/state/SpecialCharState.java | 4 +-- 6 files changed, 46 insertions(+), 11 deletions(-) diff --git a/xmlworker/src/main/java/com/itextpdf/tool/xml/parser/StateController.java b/xmlworker/src/main/java/com/itextpdf/tool/xml/parser/StateController.java index d554306460..14e50d8485 100644 --- a/xmlworker/src/main/java/com/itextpdf/tool/xml/parser/StateController.java +++ b/xmlworker/src/main/java/com/itextpdf/tool/xml/parser/StateController.java @@ -272,4 +272,8 @@ public XMLParser starComment() { public XMLParser closeStarComment() { return setState(this.closeStarComment); } + + public State getPreviousState() { + return previousState; + } } diff --git a/xmlworker/src/main/java/com/itextpdf/tool/xml/parser/XMLParser.java b/xmlworker/src/main/java/com/itextpdf/tool/xml/parser/XMLParser.java index a845420a4f..1a06d99fd0 100644 --- a/xmlworker/src/main/java/com/itextpdf/tool/xml/parser/XMLParser.java +++ b/xmlworker/src/main/java/com/itextpdf/tool/xml/parser/XMLParser.java @@ -41,6 +41,12 @@ */ package com.itextpdf.tool.xml.parser; +import com.itextpdf.text.xml.XMLUtil; +import com.itextpdf.text.xml.simpleparser.IanaEncodings; +import com.itextpdf.tool.xml.parser.io.EncodingUtil; +import com.itextpdf.tool.xml.parser.io.MonitorInputReader; +import com.itextpdf.tool.xml.parser.io.ParserMonitor; + import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -50,14 +56,9 @@ import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.util.List; +import java.util.Map; import java.util.concurrent.CopyOnWriteArrayList; -import com.itextpdf.text.xml.XMLUtil; -import com.itextpdf.text.xml.simpleparser.IanaEncodings; -import com.itextpdf.tool.xml.parser.io.EncodingUtil; -import com.itextpdf.tool.xml.parser.io.MonitorInputReader; -import com.itextpdf.tool.xml.parser.io.ParserMonitor; - /** * Reads an XML file. Attach a {@link XMLParserListener} for receiving events. * @@ -73,6 +74,7 @@ public class XMLParser { private String text = null; private TagState tagState; private Charset charset; + private boolean decodeSpecialChars = true; /** * Constructs a default XMLParser ready for HTML/XHTML processing. @@ -217,7 +219,7 @@ public void parse(final Reader reader) throws IOException { /** * The actual parse method * - * @param r + * @param reader * @throws IOException */ private void parseWithReader(final Reader reader) throws IOException { @@ -366,9 +368,14 @@ public XMLParserMemory memory() { */ public void startElement() { currentTagState(TagState.OPEN); + String tagName = this.memory.getCurrentTag(); + Map attributes = this.memory.getAttributes(); + if (tagName.startsWith("?")) { + memory().processingInstruction().setLength(0); + } callText(); for (XMLParserListener l : listeners) { - l.startElement(this.memory.getCurrentTag(), this.memory.getAttributes(), this.memory.getNameSpace()); + l.startElement(tagName, attributes, this.memory.getNameSpace()); } this.memory().flushNameSpace(); } @@ -463,6 +470,18 @@ public void setMonitor(final ParserMonitor monitor) { this.monitor = monitor; } + /** + * Determines whether special chars like > will be decoded + * @param decodeSpecialChars true to decode, false to not decode + */ + public void setDecodeSpecialChars(boolean decodeSpecialChars) { + this.decodeSpecialChars = decodeSpecialChars; + } + + public boolean isDecodeSpecialChars() { + return decodeSpecialChars; + } + /** * @return the current buffer as a String */ diff --git a/xmlworker/src/main/java/com/itextpdf/tool/xml/parser/XMLParserMemory.java b/xmlworker/src/main/java/com/itextpdf/tool/xml/parser/XMLParserMemory.java index d0667567c3..ff7a15b62a 100644 --- a/xmlworker/src/main/java/com/itextpdf/tool/xml/parser/XMLParserMemory.java +++ b/xmlworker/src/main/java/com/itextpdf/tool/xml/parser/XMLParserMemory.java @@ -45,7 +45,6 @@ import com.itextpdf.tool.xml.parser.state.InsideTagHTMLState; -import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; @@ -62,6 +61,7 @@ public class XMLParserMemory { private final StringBuilder currentEntity = new StringBuilder(); private final StringBuilder comment = new StringBuilder(); private final StringBuilder baos = new StringBuilder(); + private final StringBuilder processingInstruction = new StringBuilder(); private final Map attr; private String wsTag = ""; private String currentNameSpace = ""; @@ -102,6 +102,7 @@ public void currentAttr(final String attr) { public boolean hasCurrentAttribute() { return null != this.currentAttr; } + /** * Sets the current attribute value and adds the attribute (if it's not * null) to the attribute map. @@ -161,6 +162,14 @@ public StringBuilder comment() { return this.comment; } + /** + * Returns the xml processing instruction buffer + * @return processing instruction buffer + */ + public StringBuilder processingInstruction() { + return this.processingInstruction; + } + /** * Returns last tag that needs to be taken into account for HTML Whitespace handling.
* Used by {@link InsideTagHTMLState}, only for HTML processing. diff --git a/xmlworker/src/main/java/com/itextpdf/tool/xml/parser/state/ProcessingInstructionEncounteredState.java b/xmlworker/src/main/java/com/itextpdf/tool/xml/parser/state/ProcessingInstructionEncounteredState.java index 0c4629c7d7..35839c6307 100644 --- a/xmlworker/src/main/java/com/itextpdf/tool/xml/parser/state/ProcessingInstructionEncounteredState.java +++ b/xmlworker/src/main/java/com/itextpdf/tool/xml/parser/state/ProcessingInstructionEncounteredState.java @@ -64,6 +64,7 @@ public ProcessingInstructionEncounteredState(final XMLParser parser) { */ public void process(final char character) { String tag = this.parser.bufferToString(); + this.parser.memory().processingInstruction().append(character); if (name == null && Character.isWhitespace(character)) { if (Character.isWhitespace(character)) { name = tag; diff --git a/xmlworker/src/main/java/com/itextpdf/tool/xml/parser/state/SelfClosingTagState.java b/xmlworker/src/main/java/com/itextpdf/tool/xml/parser/state/SelfClosingTagState.java index 2c80c34b48..ee357b0722 100644 --- a/xmlworker/src/main/java/com/itextpdf/tool/xml/parser/state/SelfClosingTagState.java +++ b/xmlworker/src/main/java/com/itextpdf/tool/xml/parser/state/SelfClosingTagState.java @@ -72,6 +72,8 @@ public void process(final char character) { this.parser.flush(); this.parser.memory().flushNameSpace(); this.parser.selectState().inTag(); + } else if (this.parser.selectState().getPreviousState() instanceof ProcessingInstructionEncounteredState) { + this.parser.memory().processingInstruction().append(character); } } diff --git a/xmlworker/src/main/java/com/itextpdf/tool/xml/parser/state/SpecialCharState.java b/xmlworker/src/main/java/com/itextpdf/tool/xml/parser/state/SpecialCharState.java index 3b9a287117..8773d0d35c 100644 --- a/xmlworker/src/main/java/com/itextpdf/tool/xml/parser/state/SpecialCharState.java +++ b/xmlworker/src/main/java/com/itextpdf/tool/xml/parser/state/SpecialCharState.java @@ -59,7 +59,7 @@ public class SpecialCharState implements State { * @param parser the XMLParser */ public SpecialCharState(final XMLParser parser) { - this.parser =parser; + this.parser = parser; } /* (non-Javadoc) @@ -71,7 +71,7 @@ public void process(final char character) { // if ("nbsp".equals(entity.toString())) { // parser.append(' '); // TODO check yes or no if it's good idea to transform   into a space ? // } else { - char decoded = EntitiesToUnicode.decodeEntity(entity.toString()); + char decoded = parser.isDecodeSpecialChars() ? EntitiesToUnicode.decodeEntity(entity.toString()) : 0; if (decoded == '\0') { parser.append('&').append(entity.toString()).append(';'); parser.memory().lastChar(';'); From c404b10978fb765396fdef2bfc85ad338a8da273 Mon Sep 17 00:00:00 2001 From: Ilya Idamkin Date: Mon, 5 Jun 2017 15:23:50 +0300 Subject: [PATCH 13/46] Fix bug with using incorrect TrueType fonts when correct alternative is provided. DEVSIX-1261 --- .../com/itextpdf/text/pdf/FontSelector.java | 39 ++++++++++++++++--- .../com/itextpdf/text/pdf/TrueTypeFont.java | 9 ++++- 2 files changed, 41 insertions(+), 7 deletions(-) diff --git a/itext/src/main/java/com/itextpdf/text/pdf/FontSelector.java b/itext/src/main/java/com/itextpdf/text/pdf/FontSelector.java index a43163db3b..e7506ea659 100644 --- a/itext/src/main/java/com/itextpdf/text/pdf/FontSelector.java +++ b/itext/src/main/java/com/itextpdf/text/pdf/FontSelector.java @@ -48,7 +48,10 @@ import com.itextpdf.text.Phrase; import com.itextpdf.text.Utilities; import com.itextpdf.text.error_messages.MessageLocalization; +import com.itextpdf.text.log.Logger; +import com.itextpdf.text.log.LoggerFactory; +import java.text.MessageFormat; import java.util.ArrayList; /** Selects the appropriate fonts that contain the glyphs needed to @@ -61,7 +64,10 @@ */ public class FontSelector { + private static final Logger LOGGER = LoggerFactory.getLogger(PdfSmartCopy.class); + protected ArrayList fonts = new ArrayList(); + protected ArrayList unsupportedFonts = new ArrayList(); protected Font currentFont = null; /** @@ -69,6 +75,10 @@ public class FontSelector { * @param font the Font */ public void addFont(Font font) { + if (!isSupported(font)) { + unsupportedFonts.add(font); + return; + } if (font.getBaseFont() != null) { fonts.add(font); return; @@ -85,7 +95,7 @@ public void addFont(Font font) { * @return a Phrase with one or more chunks */ public Phrase process(String text) { - if (fonts.size() == 0) + if (getSize() == 0) throw new IndexOutOfBoundsException(MessageLocalization.getComposedMessage("no.font.is.defined")); char cc[] = text.toCharArray(); int len = cc.length; @@ -99,7 +109,7 @@ public Phrase process(String text) { } } if (sb.length() > 0) { - Chunk ck = new Chunk(sb.toString(), currentFont != null ? currentFont : fonts.get(0)); + Chunk ck = new Chunk(sb.toString(), currentFont != null ? currentFont : getFont(0)); ret.add(ck); } return ret; @@ -114,8 +124,8 @@ protected Chunk processChar(char[] cc, int k, StringBuffer sb) { Font font = null; if (Utilities.isSurrogatePair(cc, k)) { int u = Utilities.convertToUtf32(cc, k); - for (int f = 0; f < fonts.size(); ++f) { - font = fonts.get(f); + for (int f = 0; f < getSize(); ++f) { + font = getFont(f); if (font.getBaseFont().charExists(u) || Character.getType(u) == Character.FORMAT) { if (currentFont != font) { if (sb.length() > 0 && currentFont != null) { @@ -130,8 +140,8 @@ protected Chunk processChar(char[] cc, int k, StringBuffer sb) { } } } else { - for (int f = 0; f < fonts.size(); ++f) { - font = fonts.get(f); + for (int f = 0; f < getSize(); ++f) { + font = getFont(f); if (font.getBaseFont().charExists(c) || Character.getType(c) == Character.FORMAT) { if (currentFont != font) { if (sb.length() > 0 && currentFont != null) { @@ -148,4 +158,21 @@ protected Chunk processChar(char[] cc, int k, StringBuffer sb) { } return newChunk; } + + protected int getSize() { + return fonts.size() + unsupportedFonts.size(); + } + + protected Font getFont(int i) { + return i < fonts.size() ? fonts.get(i) : unsupportedFonts.get(i); + } + + private boolean isSupported(Font font) { + BaseFont bf = font.getBaseFont(); + if (bf instanceof TrueTypeFont && BaseFont.WINANSI.equals(bf.getEncoding()) && !((TrueTypeFont) bf).isWinAnsiSupported()) { + LOGGER.warn(MessageFormat.format("TrueType Font {0} has WINANSI encoding but doesn't have WINANSI cmap.", font)); + return false; + } + return true; + } } diff --git a/itext/src/main/java/com/itextpdf/text/pdf/TrueTypeFont.java b/itext/src/main/java/com/itextpdf/text/pdf/TrueTypeFont.java index ddec387d68..4cd5961d94 100644 --- a/itext/src/main/java/com/itextpdf/text/pdf/TrueTypeFont.java +++ b/itext/src/main/java/com/itextpdf/text/pdf/TrueTypeFont.java @@ -1808,5 +1808,12 @@ protected int[] getRawCharBBox(int c, String name) { return bboxes[metric[0]]; } - + /** + * Checks whether this font may be used with winansi encoding. + * + * @return true if the font can be correctly used with winansi encodings + */ + boolean isWinAnsiSupported() { + return cmap10 != null; + } } From dcd551fb3aa601c1b80fa40c16e1b8bdddb25fd4 Mon Sep 17 00:00:00 2001 From: Ilya Idamkin Date: Mon, 5 Jun 2017 18:13:32 +0300 Subject: [PATCH 14/46] Fix log message. DEVSIX-1261 --- itext/src/main/java/com/itextpdf/text/pdf/FontSelector.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/itext/src/main/java/com/itextpdf/text/pdf/FontSelector.java b/itext/src/main/java/com/itextpdf/text/pdf/FontSelector.java index e7506ea659..af07993914 100644 --- a/itext/src/main/java/com/itextpdf/text/pdf/FontSelector.java +++ b/itext/src/main/java/com/itextpdf/text/pdf/FontSelector.java @@ -170,7 +170,7 @@ protected Font getFont(int i) { private boolean isSupported(Font font) { BaseFont bf = font.getBaseFont(); if (bf instanceof TrueTypeFont && BaseFont.WINANSI.equals(bf.getEncoding()) && !((TrueTypeFont) bf).isWinAnsiSupported()) { - LOGGER.warn(MessageFormat.format("TrueType Font {0} has WINANSI encoding but doesn't have WINANSI cmap.", font)); + LOGGER.warn(MessageFormat.format("cmap(1, 0) not found for TrueType Font {0}, it is required for WinAnsi encoding.", font)); return false; } return true; From a011b74c313f09d8ebe2c9d0bca00ca4b1f1c060 Mon Sep 17 00:00:00 2001 From: "joris.schellekens" Date: Fri, 9 Jun 2017 10:21:00 +0200 Subject: [PATCH 15/46] Ensure that pg entry can be optional, as the spec intended --- xtra/src/main/java/com/itextpdf/text/pdf/mc/StructureMCID.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xtra/src/main/java/com/itextpdf/text/pdf/mc/StructureMCID.java b/xtra/src/main/java/com/itextpdf/text/pdf/mc/StructureMCID.java index f04b731f5a..59def64c00 100644 --- a/xtra/src/main/java/com/itextpdf/text/pdf/mc/StructureMCID.java +++ b/xtra/src/main/java/com/itextpdf/text/pdf/mc/StructureMCID.java @@ -63,7 +63,7 @@ public class StructureMCID extends StructureItem { * @param mcid an MCID */ public StructureMCID(PdfIndirectReference pg, PdfNumber mcid) { - this.pageref = pg.getNumber(); + this.pageref = pg == null ? -1 : pg.getNumber(); this.mcid = mcid.intValue(); } From ec2a56b4585740ae0335d1a3af11fb95c076615e Mon Sep 17 00:00:00 2001 From: Amedee Van Gasse Date: Fri, 7 Jul 2017 09:48:33 +0200 Subject: [PATCH 16/46] Remove Google Analytics tracking DEVSIX-1345 --- itext/pom.xml | 12 ------------ pdfa/pom.xml | 12 ------------ pom.xml | 12 ------------ xmlworker/pom.xml | 12 ------------ xtra/pom.xml | 12 ------------ 5 files changed, 60 deletions(-) diff --git a/itext/pom.xml b/itext/pom.xml index cf9d46f16e..03249ecb53 100644 --- a/itext/pom.xml +++ b/itext/pom.xml @@ -268,18 +268,6 @@ http://developers.itextpdf.com/reference/classes -
- (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ - (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), - m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) - })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); - - ga('create', 'UA-11854164-1', 'itextpdf.com'); - ga('send', 'pageview'); - - - ]]>
diff --git a/pdfa/pom.xml b/pdfa/pom.xml index b3ba7e1fef..422a56f6b6 100644 --- a/pdfa/pom.xml +++ b/pdfa/pom.xml @@ -144,18 +144,6 @@ http://developers.itextpdf.com/reference/classes -
- (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ - (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), - m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) - })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); - - ga('create', 'UA-11854164-1', 'itextpdf.com'); - ga('send', 'pageview'); - - - ]]>
diff --git a/pom.xml b/pom.xml index 4292e5a2a2..4ea6221811 100644 --- a/pom.xml +++ b/pom.xml @@ -52,18 +52,6 @@ com.itextpdf.tool.xml* -
-(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ -(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), -m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) -})(window,document,'script','//www.google-analytics.com/analytics.js','ga'); - -ga('create', 'UA-11854164-1', 'itextpdf.com'); -ga('send', 'pageview'); - - - ]]>
diff --git a/xmlworker/pom.xml b/xmlworker/pom.xml index 4d8edb0155..3ddb2fccef 100644 --- a/xmlworker/pom.xml +++ b/xmlworker/pom.xml @@ -212,18 +212,6 @@ http://developers.itextpdf.com/reference/classes -
- (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ - (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), - m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) - })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); - - ga('create', 'UA-11854164-1', 'itextpdf.com'); - ga('send', 'pageview'); - - - ]]>
diff --git a/xtra/pom.xml b/xtra/pom.xml index 0438995868..5efe9018da 100644 --- a/xtra/pom.xml +++ b/xtra/pom.xml @@ -154,18 +154,6 @@ http://developers.itextpdf.com/reference/classes -
- (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ - (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), - m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) - })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); - - ga('create', 'UA-11854164-1', 'itextpdf.com'); - ga('send', 'pageview'); - - - ]]>
From db999c007b681684d51663fdc877974ba2a36e04 Mon Sep 17 00:00:00 2001 From: Amedee Van Gasse Date: Fri, 7 Jul 2017 10:31:36 +0200 Subject: [PATCH 17/46] Remove UTF characters with encoding errors from Javadocs With this change, Debian maintainers no longer need to apply utf8.patch. --- .../IndicCompositeCharacterComparator.java | 21 ++++++------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/itext/src/main/java/com/itextpdf/text/pdf/languages/IndicCompositeCharacterComparator.java b/itext/src/main/java/com/itextpdf/text/pdf/languages/IndicCompositeCharacterComparator.java index 5f88f9eee9..42d66f015f 100644 --- a/itext/src/main/java/com/itextpdf/text/pdf/languages/IndicCompositeCharacterComparator.java +++ b/itext/src/main/java/com/itextpdf/text/pdf/languages/IndicCompositeCharacterComparator.java @@ -47,32 +47,23 @@ /** *

- * This works on CompositeCharcaters or Juktakshar-s of Indian languages like Bangla, Hindi, etc. CompositeCharcters + * This works on CompositeCharacters or Juktakshar-s of Indian languages like Bangla, Hindi, etc. CompositeCharacters * are single glyphs consisting of more than one characters. - *

+ *

*

* This class works on these CompositeCharacters and places the Strings having higher number - * of Characters before the one with lower no. This is necessay to properly display the CompositeCharacters + * of Characters before the one with lower no. This is necessary to properly display the CompositeCharacters * when they occur side by side. *

-// *

-// *

Examples of CompositeCharactes from Bangla

-// *
    -// *
  • �?�?�?
  • -// *
  • �?�?
  • -// *
  • �?�?ষ�?ম
  • -// *
  • �?�?ষ
  • -// *
-// *

* * @author Palash Ray */ public class IndicCompositeCharacterComparator implements Comparator { - + public int compare(String o1, String o2) { - if (o2.length() > o1.length()) { + if (o2.length() > o1.length()) { return 1; - } else if (o1.length() > o2.length()) { + } else if (o1.length() > o2.length()) { return -1; } else { return o1.compareTo(o2); From a619e5e7b0c8e5ec78412ffd8061d1a68ee4b994 Mon Sep 17 00:00:00 2001 From: Amedee Van Gasse Date: Fri, 7 Jul 2017 11:45:31 +0200 Subject: [PATCH 18/46] Add unit test for IndicCompositeCharacterComparator --- .../IndicCompositeCharacterComparator.java | 8 ++-- ...IndicCompositeCharacterComparatorTest.java | 41 +++++++++++++++++++ 2 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 itext/src/test/java/com/itextpdf/text/pdf/languages/IndicCompositeCharacterComparatorTest.java diff --git a/itext/src/main/java/com/itextpdf/text/pdf/languages/IndicCompositeCharacterComparator.java b/itext/src/main/java/com/itextpdf/text/pdf/languages/IndicCompositeCharacterComparator.java index 42d66f015f..dbfca64018 100644 --- a/itext/src/main/java/com/itextpdf/text/pdf/languages/IndicCompositeCharacterComparator.java +++ b/itext/src/main/java/com/itextpdf/text/pdf/languages/IndicCompositeCharacterComparator.java @@ -61,13 +61,13 @@ public class IndicCompositeCharacterComparator implements Comparator { public int compare(String o1, String o2) { - if (o2.length() > o1.length()) { + if (o1.length() < o2.length()) { return 1; - } else if (o1.length() > o2.length()) { + } + if (o1.length() > o2.length()) { return -1; - } else { - return o1.compareTo(o2); } + return o1.compareTo(o2); } } diff --git a/itext/src/test/java/com/itextpdf/text/pdf/languages/IndicCompositeCharacterComparatorTest.java b/itext/src/test/java/com/itextpdf/text/pdf/languages/IndicCompositeCharacterComparatorTest.java new file mode 100644 index 0000000000..a516304e58 --- /dev/null +++ b/itext/src/test/java/com/itextpdf/text/pdf/languages/IndicCompositeCharacterComparatorTest.java @@ -0,0 +1,41 @@ +package com.itextpdf.text.pdf.languages; + +import org.junit.Test; + +import static org.junit.Assert.assertTrue; + +public class IndicCompositeCharacterComparatorTest { + + @Test + public void testLengthIsEqualAndStringsAreEqual() { + String oneString = "\u0938\u0924"; + String twoString = "\u0938\u0924"; + int result = new IndicCompositeCharacterComparator().compare(oneString, twoString); + assertTrue("expected to be equal", result == 0); + } + + @Test + public void testLengthIsEqualAndStringsAreNotEqual() { + String oneString = "\u0938\u0924"; + String twoString = "\u0924\u0938"; + int result = new IndicCompositeCharacterComparator().compare(oneString, twoString); + assertTrue("expected not to be equal", result != 0); + } + + @Test + public void testFirstStringIsShorter() { + String oneString = "\u0938\u0924"; + String twoString = "\u0938\u0924\u0938\u0924"; + int result = new IndicCompositeCharacterComparator().compare(oneString, twoString); + assertTrue("expected to be greater than", result >= 1); + } + + @Test + public void testFirstStringIsLonger() { + String oneString = "\u0938\u0924\u0938\u0924"; + String twoString = "\u0938\u0924"; + int result = new IndicCompositeCharacterComparator().compare(oneString, twoString); + assertTrue("expected to be less than", result <= -1); + } + +} \ No newline at end of file From 68e828f27b6ea5c85b91f96a9e1add3a61301a69 Mon Sep 17 00:00:00 2001 From: jenkins Date: Fri, 7 Jul 2017 12:07:08 +0200 Subject: [PATCH 19/46] Add missing copyright headers --- ...IndicCompositeCharacterComparatorTest.java | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/itext/src/test/java/com/itextpdf/text/pdf/languages/IndicCompositeCharacterComparatorTest.java b/itext/src/test/java/com/itextpdf/text/pdf/languages/IndicCompositeCharacterComparatorTest.java index a516304e58..3077a668f7 100644 --- a/itext/src/test/java/com/itextpdf/text/pdf/languages/IndicCompositeCharacterComparatorTest.java +++ b/itext/src/test/java/com/itextpdf/text/pdf/languages/IndicCompositeCharacterComparatorTest.java @@ -1,3 +1,45 @@ +/* + This file is part of the iText (R) project. + Copyright (c) 1998-2017 iText Group NV + Authors: iText Software. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License version 3 + as published by the Free Software Foundation with the addition of the + following permission added to Section 15 as permitted in Section 7(a): + FOR ANY PART OF THE COVERED WORK IN WHICH THE COPYRIGHT IS OWNED BY + ITEXT GROUP. ITEXT GROUP DISCLAIMS THE WARRANTY OF NON INFRINGEMENT + OF THIRD PARTY RIGHTS + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Affero General Public License for more details. + You should have received a copy of the GNU Affero General Public License + along with this program; if not, see http://www.gnu.org/licenses or write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA, 02110-1301 USA, or download the license from the following URL: + http://itextpdf.com/terms-of-use/ + + The interactive user interfaces in modified source and object code versions + of this program must display Appropriate Legal Notices, as required under + Section 5 of the GNU Affero General Public License. + + In accordance with Section 7(b) of the GNU Affero General Public License, + a covered work must retain the producer line in every PDF that is created + or manipulated using iText. + + You can be released from the requirements of the license by purchasing + a commercial license. Buying such a license is mandatory as soon as you + develop commercial activities involving the iText software without + disclosing the source code of your own applications. + These activities include: offering paid services to customers as an ASP, + serving PDFs on the fly in a web application, shipping iText with a closed + source product. + + For more information, please contact iText Software Corp. at this + address: sales@itextpdf.com + */ package com.itextpdf.text.pdf.languages; import org.junit.Test; From cef16359acfaf4ba653d04cf897a980f1ed899c5 Mon Sep 17 00:00:00 2001 From: Michael Demey Date: Wed, 12 Jul 2017 16:29:16 +0200 Subject: [PATCH 20/46] avoiding nullpointers in flattening free text annotations DEV-1887 --- .../com/itextpdf/text/pdf/PdfStamperImp.java | 37 ++++++++++++------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/itext/src/main/java/com/itextpdf/text/pdf/PdfStamperImp.java b/itext/src/main/java/com/itextpdf/text/pdf/PdfStamperImp.java index e66f37e0e2..8411edcea2 100644 --- a/itext/src/main/java/com/itextpdf/text/pdf/PdfStamperImp.java +++ b/itext/src/main/java/com/itextpdf/text/pdf/PdfStamperImp.java @@ -45,6 +45,7 @@ import com.itextpdf.awt.geom.AffineTransform; import com.itextpdf.awt.geom.Point; +import com.itextpdf.text.BaseColor; import com.itextpdf.text.DocumentException; import com.itextpdf.text.ExceptionConverter; import com.itextpdf.text.Image; @@ -1233,12 +1234,13 @@ private void flattenAnnotations(boolean flattenFreeTextAnnotations) { if (!(annoto instanceof PdfDictionary)) continue; PdfDictionary annDic = (PdfDictionary) annoto; + final PdfObject subType = annDic.get(PdfName.SUBTYPE); if (flattenFreeTextAnnotations) { - if (!(annDic.get(PdfName.SUBTYPE)).equals(PdfName.FREETEXT)) { + if (! PdfName.FREETEXT.equals(subType)) { continue; } } else { - if ((annDic.get(PdfName.SUBTYPE)).equals(PdfName.WIDGET)) { + if (PdfName.WIDGET.equals(subType)) { // skip widgets continue; } @@ -1264,15 +1266,17 @@ private void flattenAnnotations(boolean flattenFreeTextAnnotations) { ((PdfDictionary) objReal).put(PdfName.SUBTYPE, PdfName.FORM); app = new PdfAppearance((PdfIndirectReference) obj); } else { - if (objReal.isDictionary()) { - PdfName as_p = appDic.getAsName(PdfName.AS); - if (as_p != null) { - PdfIndirectReference iref = (PdfIndirectReference) ((PdfDictionary) objReal).get(as_p); - if (iref != null) { - app = new PdfAppearance(iref); - if (iref.isIndirect()) { - objReal = PdfReader.getPdfObject(iref); - ((PdfDictionary) objReal).put(PdfName.SUBTYPE, PdfName.FORM); + if (objReal != null ) { + if (objReal.isDictionary()) { + PdfName as_p = appDic.getAsName(PdfName.AS); + if (as_p != null) { + PdfIndirectReference iref = (PdfIndirectReference) ( (PdfDictionary) objReal ).get(as_p); + if (iref != null) { + app = new PdfAppearance(iref); + if (iref.isIndirect()) { + objReal = PdfReader.getPdfObject(iref); + ( (PdfDictionary) objReal ).put(PdfName.SUBTYPE, PdfName.FORM); + } } } } @@ -1280,10 +1284,17 @@ private void flattenAnnotations(boolean flattenFreeTextAnnotations) { } if (app != null) { Rectangle rect = PdfReader.getNormalizedRectangle(annDic.getAsArray(PdfName.RECT)); - Rectangle bBox = PdfReader.getNormalizedRectangle((objDict.getAsArray(PdfName.BBOX))); + Rectangle bBox = null; + + if ( objDict != null ) { + bBox = PdfReader.getNormalizedRectangle((objDict.getAsArray(PdfName.BBOX))); + } else { + bBox = rect; + } + PdfContentByte cb = getOverContent(page); cb.setLiteral("Q "); - if (objDict.getAsArray(PdfName.MATRIX) != null && + if (objDict != null && objDict.getAsArray(PdfName.MATRIX) != null && !Arrays.equals(DEFAULT_MATRIX, objDict.getAsArray(PdfName.MATRIX).asDoubleArray())) { double[] matrix = objDict.getAsArray(PdfName.MATRIX).asDoubleArray(); Rectangle transformBBox = transformBBoxByMatrix(bBox, matrix); From 8012939052977e452aa6a31847e26d3824ffd62c Mon Sep 17 00:00:00 2001 From: Michael Demey Date: Thu, 13 Jul 2017 14:09:12 +0200 Subject: [PATCH 21/46] simple flattening of freetext annotations - DEV-1887 --- .../com/itextpdf/text/pdf/PdfStamperImp.java | 32 +++++++++++++++++-- .../com/itextpdf/text/l10n/error/en.lng | 2 ++ .../com/itextpdf/text/l10n/error/nl.lng | 2 ++ 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/itext/src/main/java/com/itextpdf/text/pdf/PdfStamperImp.java b/itext/src/main/java/com/itextpdf/text/pdf/PdfStamperImp.java index 8411edcea2..d9d6776ed0 100644 --- a/itext/src/main/java/com/itextpdf/text/pdf/PdfStamperImp.java +++ b/itext/src/main/java/com/itextpdf/text/pdf/PdfStamperImp.java @@ -45,7 +45,6 @@ import com.itextpdf.awt.geom.AffineTransform; import com.itextpdf.awt.geom.Point; -import com.itextpdf.text.BaseColor; import com.itextpdf.text.DocumentException; import com.itextpdf.text.ExceptionConverter; import com.itextpdf.text.Image; @@ -55,6 +54,8 @@ import com.itextpdf.text.exceptions.BadPasswordException; import com.itextpdf.text.log.Counter; import com.itextpdf.text.log.CounterFactory; +import com.itextpdf.text.log.Logger; +import com.itextpdf.text.log.LoggerFactory; import com.itextpdf.text.pdf.AcroFields.Item; import com.itextpdf.text.pdf.collection.PdfCollection; import com.itextpdf.text.pdf.interfaces.PdfViewerPreferences; @@ -113,6 +114,7 @@ class PdfStamperImp extends PdfWriter { protected HashMap namedDestinations = new HashMap(); protected Counter COUNTER = CounterFactory.getCounter(PdfStamper.class); + private Logger logger; protected Counter getCounter() { return COUNTER; @@ -138,6 +140,7 @@ protected Counter getCounter() { */ protected PdfStamperImp(PdfReader reader, OutputStream os, char pdfVersion, boolean append) throws DocumentException, IOException { super(new PdfDocument(), os); + this.logger = LoggerFactory.getLogger(PdfStamperImp.class); if (!reader.isOpenedWithFullPermissions()) throw new BadPasswordException(MessageLocalization.getComposedMessage("pdfreader.not.opened.with.owner.password")); if (reader.isTampered()) @@ -1280,6 +1283,30 @@ private void flattenAnnotations(boolean flattenFreeTextAnnotations) { } } } + } else { + if ( PdfName.FREETEXT.equals(subType) ) { + final PdfString defaultAppearancePdfString = annDic.getAsString(PdfName.DA); + if (defaultAppearancePdfString != null) { + final PdfString freeTextContent = annDic.getAsString(PdfName.CONTENTS); + final String defaultAppearanceString = defaultAppearancePdfString.toString(); + + app = new PdfAppearance(this); + + // quickly and naively flattening the freetext annotation + app.saveState(); + app.beginText(); + app.setLiteral(defaultAppearanceString); + app.setLiteral("(" + freeTextContent.toString() + ") Tj\n"); + app.endText(); + app.restoreState(); + } else { + // The DA entry is required for free text annotations + // Not throwing an exception as we don't want to stop the flow, result is that this annotation won't be flattened. + this.logger.warn(MessageLocalization.getComposedMessage("freetext.annotation.doesnt.contain.da")); + } + } else { + this.logger.warn(MessageLocalization.getComposedMessage("annotation.type.not.supported.flattening")); + } } } if (app != null) { @@ -1289,7 +1316,8 @@ private void flattenAnnotations(boolean flattenFreeTextAnnotations) { if ( objDict != null ) { bBox = PdfReader.getNormalizedRectangle((objDict.getAsArray(PdfName.BBOX))); } else { - bBox = rect; + bBox = new Rectangle(0,0, rect.getWidth(), rect.getHeight()); + app.setBoundingBox(bBox); } PdfContentByte cb = getOverContent(page); diff --git a/itext/src/main/resources/com/itextpdf/text/l10n/error/en.lng b/itext/src/main/resources/com/itextpdf/text/l10n/error/en.lng index 6eadd9bc22..2096de6f30 100644 --- a/itext/src/main/resources/com/itextpdf/text/l10n/error/en.lng +++ b/itext/src/main/resources/com/itextpdf/text/l10n/error/en.lng @@ -74,6 +74,7 @@ an.uncolored.pattern.was.expected=An uncolored pattern was expected. an.uncolored.tile.pattern.can.not.have.another.pattern.or.shading.as.color=An uncolored tile pattern can not have another pattern or shading as color. annotation.of.type.1.should.have.contents.key=Annotation of type {1} should have Contents key. annotation.type.1.not.allowed=Annotation type {1} not allowed. +annotation.type.not.supported.flattening=This annotation is not supported for flattening. Skipping this annotation. appearance.dictionary.of.widget.subtype.and.btn.field.type.shall.contain.only.the.n.key.with.dictionary.value=Appearance dictionary of Widget subtype and Btn field type shall contain only the n key with dictionary value appearance.dictionary.shall.contain.only.the.n.key.with.stream.value=Appearance dictionary shall contain only the N key with stream value. append.mode.does.not.support.changing.the.encryption.status=Append mode does not support changing the encryption status. @@ -194,6 +195,7 @@ font.1.with.2.is.not.recognized=Font '{1}' with '{2}' is not recognized. font.and.size.must.be.set.before.writing.any.text=Font and size must be set before writing any text font.size.too.small.1=Font size too small: {1} fontfactoryimp.cannot.be.null=FontFactoryImp cannot be null. +freetext.annotation.doesnt.contain.da=FreeText Annotation doesn't contain a DA. Not flattening this annotation. freetext.flattening.is.not.supported.in.append.mode=FreeText flattening is not supported in append mode. annotation.flattening.is.not.supported.in.append.mode=Annotation flattening is not supported in append mode. getcell.at.illegal.index.1.max.is.2=getCell at illegal index :{1} max is {2} diff --git a/itext/src/main/resources/com/itextpdf/text/l10n/error/nl.lng b/itext/src/main/resources/com/itextpdf/text/l10n/error/nl.lng index c4794c53c5..71dbc34123 100644 --- a/itext/src/main/resources/com/itextpdf/text/l10n/error/nl.lng +++ b/itext/src/main/resources/com/itextpdf/text/l10n/error/nl.lng @@ -74,6 +74,7 @@ an.uncolored.pattern.was.expected=Er werd een ongekleurd patroon verwacht. an.uncolored.tile.pattern.can.not.have.another.pattern.or.shading.as.color=Een ongekleurd tile pattern kan geen ander pattern of shading als color gebruiken. annotation.of.type.1.should.have.contents.key=Annotation van type {1} moet een Contents sleutel hebben. annotation.type.1.not.allowed=Annotation type {1} niet toegelaten. +annotation.type.not.supported.flattening=Dit annotatie type is niet ondersteund tijdens het flattenen. Deze wordt overgeslaan. appearance.dictionary.of.widget.subtype.and.btn.field.type.shall.contain.only.the.n.key.with.dictionary.value=Appearance dictionary van subtype Widget en field type Btn mag enkel de N sleutel met als waarde een Dictionaty bevatten appearance.dictionary.shall.contain.only.the.n.key.with.stream.value=Appearance dictionary mag enkel de N sleutel met een stream waarde bevatten. append.mode.does.not.support.changing.the.encryption.status=Append mode laat geen wijziging toe van de encryptie status. @@ -194,6 +195,7 @@ font.1.with.2.is.not.recognized=Font '{1}' met '{2}' werd niet herkend. font.and.size.must.be.set.before.writing.any.text=Font en size moeten bepaald zijn vooraleer je tekst schrijft. font.size.too.small.1=Font size te klein: {1} fontfactoryimp.cannot.be.null=FontFactoryImp kan niet null zijn. +freetext.annotation.doesnt.contain.da=FreeText Annotatie bevat geen DA. Deze annotatie kan niet worden geflattened en wordt overgeslaan. freetext.flattening.is.not.supported.in.append.mode=FreeText flattening is niet ondersteund in append mode. annotation.flattening.is.not.supported.in.append.mode=Het flattenen van annotations is niet ondersteund in append mode. getcell.at.illegal.index.1.max.is.2=getCell op ongeldige index:{1} maximum: {2} From 920bbaabbbc9fe4ae1d0333ad7a6ce773d44a2b6 Mon Sep 17 00:00:00 2001 From: Michael Demey Date: Thu, 13 Jul 2017 14:55:42 +0200 Subject: [PATCH 22/46] added tests for freetext flattening DEV-1887 --- .../text/pdf/FreeTextFlatteningTest.java | 64 ++++++++++++++++++ .../pdf/FreeTextFlatteningTest/flattened.pdf | Bin 0 -> 24861 bytes .../FreeTextFlatteningTest/freetext-no-da.pdf | Bin 0 -> 24286 bytes .../pdf/FreeTextFlatteningTest/freetext.pdf | Bin 0 -> 24541 bytes 4 files changed, 64 insertions(+) create mode 100644 itext/src/test/java/com/itextpdf/text/pdf/FreeTextFlatteningTest.java create mode 100644 itext/src/test/resources/com/itextpdf/text/pdf/FreeTextFlatteningTest/flattened.pdf create mode 100644 itext/src/test/resources/com/itextpdf/text/pdf/FreeTextFlatteningTest/freetext-no-da.pdf create mode 100644 itext/src/test/resources/com/itextpdf/text/pdf/FreeTextFlatteningTest/freetext.pdf diff --git a/itext/src/test/java/com/itextpdf/text/pdf/FreeTextFlatteningTest.java b/itext/src/test/java/com/itextpdf/text/pdf/FreeTextFlatteningTest.java new file mode 100644 index 0000000000..46fccba705 --- /dev/null +++ b/itext/src/test/java/com/itextpdf/text/pdf/FreeTextFlatteningTest.java @@ -0,0 +1,64 @@ +package com.itextpdf.text.pdf; + +import com.itextpdf.testutils.CompareTool; +import com.itextpdf.text.DocumentException; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +import org.junit.Assert; +import org.junit.Test; + +public class FreeTextFlatteningTest { + + private final String FOLDER = "./src/test/resources/com/itextpdf/text/pdf/FreeTextFlatteningTest/"; + + + @Test + public void flattenCorrectlyTest() throws IOException, DocumentException, InterruptedException { + String target = "./target/com/itextpdf/test/pdf/FreeTextFlattening/"; + new File(target).mkdirs(); + String outputFile = target + "freetext-flattened.pdf"; + + flattenFreeText(new FileInputStream(FOLDER + "freetext.pdf"), new FileOutputStream(outputFile)); + checkFlattenedPdf(new FileInputStream(outputFile), 0); + + String errorMessage = new CompareTool().compare(outputFile, FOLDER + "flattened.pdf", target, "diff"); + if ( errorMessage != null ) { + Assert.fail(errorMessage); + } + } + + @Test + public void flattenWithoutDA() throws IOException, DocumentException { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + flattenFreeText(new FileInputStream(FOLDER + "freetext-no-da.pdf"), baos); + checkFlattenedPdf(new ByteArrayInputStream(baos.toByteArray()), 1); + } + + private void checkFlattenedPdf(InputStream inputStream, int expectedAnnotationsSize) throws IOException, DocumentException { + PdfReader reader = new PdfReader(inputStream); + PdfDictionary pageDictionary = reader.getPageN(1); + if ( pageDictionary.contains(PdfName.ANNOTS )) { + PdfArray annotations = pageDictionary.getAsArray(PdfName.ANNOTS); + Assert.assertTrue(annotations.size() == expectedAnnotationsSize); + } + } + + private void flattenFreeText(final InputStream inputStream, OutputStream outputStream) throws IOException, DocumentException { + PdfReader reader = new PdfReader(inputStream); + PdfStamper stamper = new PdfStamper(reader, outputStream); + + stamper.setFormFlattening(true); + stamper.setFreeTextFlattening(true); + stamper.setAnnotationFlattening(true); + + stamper.close(); + } +} \ No newline at end of file diff --git a/itext/src/test/resources/com/itextpdf/text/pdf/FreeTextFlatteningTest/flattened.pdf b/itext/src/test/resources/com/itextpdf/text/pdf/FreeTextFlatteningTest/flattened.pdf new file mode 100644 index 0000000000000000000000000000000000000000..18ee6496de73cb94df2deec93829a458fb163d71 GIT binary patch literal 24861 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

SniC?*K5N*yqH;Mi)B|T4$C6&ap@I7 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 a>u11tQaJzrJuBjp;!r4qfB;-qh2cM5Zx%@a literal 0 HcmV?d00001 diff --git a/itext/src/test/resources/com/itextpdf/text/pdf/FreeTextFlatteningTest/freetext-no-da.pdf b/itext/src/test/resources/com/itextpdf/text/pdf/FreeTextFlatteningTest/freetext-no-da.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1305a4bcc299a9b5973bdcfc885a8274bd940156 GIT binary patch literal 24286 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 TfA1s_(mKItxVaHpiZuTP(D0(X literal 0 HcmV?d00001 From 08cbe1f238543c31705e2ad0c4b0e6f6e9547881 Mon Sep 17 00:00:00 2001 From: Daniel Lichtenberger Date: Fri, 19 May 2017 15:36:25 +0200 Subject: [PATCH 23/46] Performance: avoid expensive logging calls in table rendering SUP-2042, DEV-1865 --- .../main/java/com/itextpdf/text/pdf/PdfPRow.java | 5 ++++- .../main/java/com/itextpdf/text/pdf/PdfPTable.java | 13 ++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/itext/src/main/java/com/itextpdf/text/pdf/PdfPRow.java b/itext/src/main/java/com/itextpdf/text/pdf/PdfPRow.java index ad67fe7f5f..abbeb09456 100644 --- a/itext/src/main/java/com/itextpdf/text/pdf/PdfPRow.java +++ b/itext/src/main/java/com/itextpdf/text/pdf/PdfPRow.java @@ -46,6 +46,7 @@ import java.util.HashMap; import com.itextpdf.text.*; +import com.itextpdf.text.log.Level; import com.itextpdf.text.log.Logger; import com.itextpdf.text.log.LoggerFactory; import com.itextpdf.text.pdf.interfaces.IAccessibleElement; @@ -709,7 +710,9 @@ public void copyRowContent(PdfPTable table, int idx) { * an empty row would result */ public PdfPRow splitRow(PdfPTable table, int rowIndex, float new_height) { - LOGGER.info(String.format("Splitting row %s available height: %s", rowIndex, new_height)); + if (LOGGER.isLogging(Level.INFO)) { + LOGGER.info(String.format("Splitting row %s available height: %s", rowIndex, new_height)); + } // second part of the row PdfPCell newCells[] = new PdfPCell[cells.length]; float calHs[] = new float[cells.length]; diff --git a/itext/src/main/java/com/itextpdf/text/pdf/PdfPTable.java b/itext/src/main/java/com/itextpdf/text/pdf/PdfPTable.java index 5d04d1cdf4..6ff3c9d57f 100644 --- a/itext/src/main/java/com/itextpdf/text/pdf/PdfPTable.java +++ b/itext/src/main/java/com/itextpdf/text/pdf/PdfPTable.java @@ -54,6 +54,7 @@ import com.itextpdf.text.Rectangle; import com.itextpdf.text.api.Spaceable; import com.itextpdf.text.error_messages.MessageLocalization; +import com.itextpdf.text.log.Level; import com.itextpdf.text.log.Logger; import com.itextpdf.text.log.LoggerFactory; import com.itextpdf.text.pdf.events.PdfPTableEventForwarder; @@ -806,7 +807,9 @@ public float writeSelectedRows(int colStart, int colEnd, int rowStart, int rowEn colEnd = Math.min(colEnd, totalCols); } - LOGGER.info(String.format("Writing row %s to %s; column %s to %s", rowStart, rowEnd, colStart, colEnd)); + if (LOGGER.isLogging(Level.INFO)) { + LOGGER.info(String.format("Writing row %s to %s; column %s to %s", rowStart, rowEnd, colStart, colEnd)); + } float yPosStart = yPos; @@ -2107,7 +2110,9 @@ public boolean cellEnds() { * @since iText 5.4.3 */ public FittingRows getFittingRows(float availableHeight, int startIdx) { - LOGGER.info(String.format("getFittingRows(%s, %s)", availableHeight, startIdx)); + if (LOGGER.isLogging(Level.INFO)) { + LOGGER.info(String.format("getFittingRows(%s, %s)", availableHeight, startIdx)); + } if ( startIdx > 0 && startIdx < rows.size() ) { assert (getRow(startIdx).getCells()[0] != null); // top left cell of current page may not be null } @@ -2133,7 +2138,9 @@ public FittingRows getFittingRows(float availableHeight, int startIdx) { state.consumeRowspan(completedRowsHeight, rowHeight); } else { state.beginCell(cell, completedRowsHeight, rowHeight); - LOGGER.info(String.format("Height after beginCell: %s (cell: %s)", state.height, cell.getCachedMaxHeight())); + if (LOGGER.isLogging(Level.INFO)) { + LOGGER.info(String.format("Height after beginCell: %s (cell: %s)", state.height, cell.getCachedMaxHeight())); + } } if (state.cellEnds() && state.height > maxCompletedRowsHeight) { maxCompletedRowsHeight = state.height; From 8d456d848e804a0ae08c7d04701168a61730c075 Mon Sep 17 00:00:00 2001 From: Valera Goman Date: Tue, 25 Jul 2017 16:55:51 +0300 Subject: [PATCH 24/46] Avoid expensive logging calls throughout the project --- .../text/pdf/security/LtvVerifier.java | 9 +++++++-- .../text/pdf/security/OCSPVerifier.java | 9 +++++++-- .../com/itextpdf/tool/xml/html/head/Link.java | 9 +++++++-- .../itextpdf/tool/xml/html/head/Style.java | 4 +++- .../xml/pipeline/end/PdfWriterPipeline.java | 3 ++- .../com/itextpdf/text/pdf/mc/MCParser.java | 19 +++++++++++++------ .../itextpdf/text/pdf/mc/StructureItems.java | 9 +++++++-- .../text/pdf/util/SmartPdfSplitter.java | 15 +++++++++++---- 8 files changed, 57 insertions(+), 20 deletions(-) diff --git a/itext/src/main/java/com/itextpdf/text/pdf/security/LtvVerifier.java b/itext/src/main/java/com/itextpdf/text/pdf/security/LtvVerifier.java index f595246b20..6f5f5e5dc6 100644 --- a/itext/src/main/java/com/itextpdf/text/pdf/security/LtvVerifier.java +++ b/itext/src/main/java/com/itextpdf/text/pdf/security/LtvVerifier.java @@ -55,6 +55,7 @@ import java.util.Date; import java.util.List; +import com.itextpdf.text.log.Level; import org.bouncycastle.cert.ocsp.BasicOCSPResp; import org.bouncycastle.cert.ocsp.OCSPException; import org.bouncycastle.cert.ocsp.OCSPResp; @@ -109,7 +110,9 @@ public LtvVerifier(PdfReader reader) throws GeneralSecurityException { signatureName = names.get(names.size() - 1); this.signDate = new Date(); pkcs7 = coversWholeDocument(); - LOGGER.info(String.format("Checking %ssignature %s", pkcs7.isTsp() ? "document-level timestamp " : "", signatureName)); + if (LOGGER.isLogging(Level.INFO)) { + LOGGER.info(String.format("Checking %ssignature %s", pkcs7.isTsp() ? "document-level timestamp " : "", signatureName)); + } } /** @@ -292,7 +295,9 @@ public void switchToPreviousRevision() throws IOException, GeneralSecurityExcept names = fields.getSignatureNames(); signatureName = names.get(names.size() - 1); pkcs7 = coversWholeDocument(); - LOGGER.info(String.format("Checking %ssignature %s", pkcs7.isTsp() ? "document-level timestamp " : "", signatureName)); + if (LOGGER.isLogging(Level.INFO)) { + LOGGER.info(String.format("Checking %ssignature %s", pkcs7.isTsp() ? "document-level timestamp " : "", signatureName)); + } } else { LOGGER.info("No signatures in revision"); diff --git a/itext/src/main/java/com/itextpdf/text/pdf/security/OCSPVerifier.java b/itext/src/main/java/com/itextpdf/text/pdf/security/OCSPVerifier.java index 905c304958..20fc84cd41 100644 --- a/itext/src/main/java/com/itextpdf/text/pdf/security/OCSPVerifier.java +++ b/itext/src/main/java/com/itextpdf/text/pdf/security/OCSPVerifier.java @@ -56,6 +56,7 @@ import java.util.Enumeration; import java.util.List; +import com.itextpdf.text.log.Level; import org.bouncycastle.asn1.ocsp.OCSPObjectIdentifiers; import org.bouncycastle.cert.X509CertificateHolder; import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter; @@ -170,10 +171,14 @@ public boolean verify(BasicOCSPResp ocspResp, X509Certificate signCert, X509Cert Date nextUpdate = resp[i].getNextUpdate(); if (nextUpdate == null) { nextUpdate = new Date(resp[i].getThisUpdate().getTime() + 180000l); - LOGGER.info(String.format("No 'next update' for OCSP Response; assuming %s", nextUpdate)); + if (LOGGER.isLogging(Level.INFO)) { + LOGGER.info(String.format("No 'next update' for OCSP Response; assuming %s", nextUpdate)); + } } if (signDate.after(nextUpdate)) { - LOGGER.info(String.format("OCSP no longer valid: %s after %s", signDate, nextUpdate)); + if (LOGGER.isLogging(Level.INFO)) { + LOGGER.info(String.format("OCSP no longer valid: %s after %s", signDate, nextUpdate)); + } continue; } // check the status of the certificate diff --git a/xmlworker/src/main/java/com/itextpdf/tool/xml/html/head/Link.java b/xmlworker/src/main/java/com/itextpdf/tool/xml/html/head/Link.java index 4dadb809fa..da3534a507 100644 --- a/xmlworker/src/main/java/com/itextpdf/tool/xml/html/head/Link.java +++ b/xmlworker/src/main/java/com/itextpdf/tool/xml/html/head/Link.java @@ -47,6 +47,7 @@ import java.util.List; import com.itextpdf.text.Element; +import com.itextpdf.text.log.Level; import com.itextpdf.text.log.Logger; import com.itextpdf.text.log.LoggerFactory; import com.itextpdf.tool.xml.NoCustomContextException; @@ -78,9 +79,13 @@ public List start(final WorkerContext ctx, final Tag tag) { try { getCSSResolver(ctx).addCssFile(href, false); } catch (CssResolverException e) { - LOG.error(String.format(LocaleMessages.getInstance().getMessage(LocaleMessages.LINK_404), href), e); + if (LOG.isLogging(Level.ERROR)) { + LOG.error(String.format(LocaleMessages.getInstance().getMessage(LocaleMessages.LINK_404), href), e); + } } catch (NoCustomContextException e) { - LOG.warn(String.format(LocaleMessages.getInstance().getMessage(LocaleMessages.CUSTOMCONTEXT_404_CONTINUE), CssResolverPipeline.class.getName())); + if (LOG.isLogging(Level.WARN)) { + LOG.warn(String.format(LocaleMessages.getInstance().getMessage(LocaleMessages.CUSTOMCONTEXT_404_CONTINUE), CssResolverPipeline.class.getName())); + } } } } diff --git a/xmlworker/src/main/java/com/itextpdf/tool/xml/html/head/Style.java b/xmlworker/src/main/java/com/itextpdf/tool/xml/html/head/Style.java index 4ddedadf64..fbaf0dcf37 100644 --- a/xmlworker/src/main/java/com/itextpdf/tool/xml/html/head/Style.java +++ b/xmlworker/src/main/java/com/itextpdf/tool/xml/html/head/Style.java @@ -88,7 +88,9 @@ public List content(final WorkerContext ctx, final Tag tag, final Strin LOG.trace(content); } } catch (NoCustomContextException e) { - LOG.warn(String.format(LocaleMessages.getInstance().getMessage(LocaleMessages.CUSTOMCONTEXT_404_CONTINUE), CssResolverPipeline.class.getName())); + if (LOG.isLogging(Level.WARN)) { + LOG.warn(String.format(LocaleMessages.getInstance().getMessage(LocaleMessages.CUSTOMCONTEXT_404_CONTINUE), CssResolverPipeline.class.getName())); + } } return new ArrayList(0); } diff --git a/xmlworker/src/main/java/com/itextpdf/tool/xml/pipeline/end/PdfWriterPipeline.java b/xmlworker/src/main/java/com/itextpdf/tool/xml/pipeline/end/PdfWriterPipeline.java index 4ecb917069..8b993120d9 100644 --- a/xmlworker/src/main/java/com/itextpdf/tool/xml/pipeline/end/PdfWriterPipeline.java +++ b/xmlworker/src/main/java/com/itextpdf/tool/xml/pipeline/end/PdfWriterPipeline.java @@ -46,6 +46,7 @@ import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Element; +import com.itextpdf.text.log.Level; import com.itextpdf.text.log.Logger; import com.itextpdf.text.log.LoggerFactory; import com.itextpdf.text.pdf.PdfWriter; @@ -141,7 +142,7 @@ private void write(final WorkerContext context, final ProcessObject po) throws P if (writable instanceof WritableElement) { for (Element e : ((WritableElement) writable).elements()) { try { - if (!doc.add(e)) { + if (!doc.add(e) && LOG.isLogging(Level.TRACE)) { LOG.trace(String.format( LocaleMessages.getInstance().getMessage(LocaleMessages.ELEMENT_NOT_ADDED), e.toString())); diff --git a/xtra/src/main/java/com/itextpdf/text/pdf/mc/MCParser.java b/xtra/src/main/java/com/itextpdf/text/pdf/mc/MCParser.java index 0b06dce58c..ccdf043394 100644 --- a/xtra/src/main/java/com/itextpdf/text/pdf/mc/MCParser.java +++ b/xtra/src/main/java/com/itextpdf/text/pdf/mc/MCParser.java @@ -54,6 +54,7 @@ import com.itextpdf.text.Rectangle; import com.itextpdf.text.error_messages.MessageLocalization; import com.itextpdf.text.io.RandomAccessSourceFactory; +import com.itextpdf.text.log.Level; import com.itextpdf.text.log.Logger; import com.itextpdf.text.log.LoggerFactory; import com.itextpdf.text.pdf.ByteBuffer; @@ -240,8 +241,10 @@ public void parse(PdfDictionary page, PdfIndirectReference pageref) throws IOExc baos.close(); stream.setData(baos.toByteArray()); // showing how many items are left - LOGGER.info(String.format("There are %d items left for processing", items.size())); - } + if (LOGGER.isLogging(Level.INFO)) { + LOGGER.info(String.format("There are %d items left for processing", items.size())); + } + } /** * When an XObject with a StructParent is encountered, @@ -251,8 +254,10 @@ public void parse(PdfDictionary page, PdfIndirectReference pageref) throws IOExc protected void dealWithXObj(PdfName xobj) { PdfDictionary dict = xobjects.getAsStream(xobj); PdfNumber structParent = dict.getAsNumber(PdfName.STRUCTPARENT); - LOGGER.info(String.format("Encountered StructParent %s in content", structParent)); - if (structParent == null) + if (LOGGER.isLogging(Level.INFO)) { + LOGGER.info(String.format("Encountered StructParent %s in content", structParent)); + } + if (structParent == null) return; StructureItem item = items.get(0); if (item.checkStructParent(pageref.getNumber(), structParent.intValue()) == 1) @@ -271,8 +276,10 @@ protected void dealWithMcid(PdfNumber mcid) throws IOException, DocumentExceptio if (mcid == null) return; StructureItem item = items.get(0); - LOGGER.info(String.format("Encountered MCID %s in content, comparing with %s", mcid, item)); - switch (item.checkMCID(pageref.getNumber(), mcid.intValue())) { + if (LOGGER.isLogging(Level.INFO)) { + LOGGER.info(String.format("Encountered MCID %s in content, comparing with %s", mcid, item)); + } + switch (item.checkMCID(pageref.getNumber(), mcid.intValue())) { case 0 : StructureObject obj = (StructureObject)item; convertToXObject(obj); diff --git a/xtra/src/main/java/com/itextpdf/text/pdf/mc/StructureItems.java b/xtra/src/main/java/com/itextpdf/text/pdf/mc/StructureItems.java index 36b93c1f1d..7d757eaf21 100644 --- a/xtra/src/main/java/com/itextpdf/text/pdf/mc/StructureItems.java +++ b/xtra/src/main/java/com/itextpdf/text/pdf/mc/StructureItems.java @@ -51,6 +51,7 @@ import com.itextpdf.text.DocumentException; import com.itextpdf.text.error_messages.MessageLocalization; import com.itextpdf.text.exceptions.InvalidPdfException; +import com.itextpdf.text.log.Level; import com.itextpdf.text.log.Logger; import com.itextpdf.text.log.LoggerFactory; import com.itextpdf.text.pdf.PdfArray; @@ -119,7 +120,9 @@ public StructureItems(PdfReader reader) * @throws DocumentException */ protected void processStructElems(PdfDictionary structElem, PdfIndirectReference ref) throws InvalidPdfException { - LOGGER.info(String.format("addStructureItems(%s, %s)", structElem, ref)); + if (LOGGER.isLogging(Level.INFO)) { + LOGGER.info(String.format("addStructureItems(%s, %s)", structElem, ref)); + } if (structElem == null) return; processStructElemKids(structElem, ref, structElem.getDirectObject(PdfName.K)); @@ -134,7 +137,9 @@ protected void processStructElems(PdfDictionary structElem, PdfIndirectReference * @param object the kids object */ protected void processStructElemKids(PdfDictionary structElem, PdfIndirectReference ref, PdfObject object) throws InvalidPdfException { - LOGGER.info(String.format("addStructureItem(%s, %s, %s)", structElem, ref, object)); + if (LOGGER.isLogging(Level.INFO)) { + LOGGER.info(String.format("addStructureItem(%s, %s, %s)", structElem, ref, object)); + } if (object == null) return; StructureItem item; diff --git a/xtra/src/main/java/com/itextpdf/text/pdf/util/SmartPdfSplitter.java b/xtra/src/main/java/com/itextpdf/text/pdf/util/SmartPdfSplitter.java index 1d05ce14a0..00e29f2f14 100644 --- a/xtra/src/main/java/com/itextpdf/text/pdf/util/SmartPdfSplitter.java +++ b/xtra/src/main/java/com/itextpdf/text/pdf/util/SmartPdfSplitter.java @@ -45,6 +45,7 @@ import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; +import com.itextpdf.text.log.Level; import com.itextpdf.text.log.Logger; import com.itextpdf.text.log.LoggerFactory; import com.itextpdf.text.pdf.PdfCopy; @@ -71,7 +72,9 @@ public SmartPdfSplitter(PdfReader reader) throws IOException { this.reader = reader; reader.setAppendable(true); numberOfPages = reader.getNumberOfPages(); - LOGGER.info(String.format("Creating a splitter for a document with %s pages", numberOfPages)); + if (LOGGER.isLogging(Level.INFO)) { + LOGGER.info(String.format("Creating a splitter for a document with %s pages", numberOfPages)); + } } public boolean hasMorePages() { @@ -102,13 +105,17 @@ public boolean split(OutputStream os, long sizeInBytes) throws IOException, Docu page = counter.getLength(resources); resources = counter.getResources(); length += page + trailer + xrefLength(resources.size()); - LOGGER.info(String.format("Page %s: Comparing %s with %s", currentPage, length, sizeInBytes)); - LOGGER.info(String.format(" page %s trailer %s xref %s", page, trailer, xrefLength(resources.size()))); + if (LOGGER.isLogging(Level.INFO)) { + LOGGER.info(String.format("Page %s: Comparing %s with %s", currentPage, length, sizeInBytes)); + LOGGER.info(String.format(" page %s trailer %s xref %s", page, trailer, xrefLength(resources.size()))); + } if (!hasPage || length < sizeInBytes) { hasPage = true; copy.addPage(copy.getImportedPage(reader, currentPage)); length = copy.getOs().getCounter(); - LOGGER.info(String.format("Size after adding page: %s", length)); + if (LOGGER.isLogging(Level.INFO)) { + LOGGER.info(String.format("Size after adding page: %s", length)); + } if (length > sizeInBytes) overSized = true; currentPage++; } From 4d3958d3b4e5c40e1ebaf6d932f2e981a28f4433 Mon Sep 17 00:00:00 2001 From: Vladimir Osipchuk Date: Mon, 31 Jul 2017 16:47:13 +0300 Subject: [PATCH 25/46] Enable line style operators processing while cleaning up. Fix cmps. DEV-1879 --- .../pdfcleanup/PdfCleanUpContentOperator.java | 2 -- .../text/pdf/pdfcleanup/cmp_dashedBezier.pdf | Bin 7778 -> 7783 bytes .../cmp_dashedClosedRotatedTriangles.pdf | Bin 14290 -> 14313 bytes .../cmp_dashedStyledClosedBezier.pdf | Bin 7863 -> 7872 bytes .../pdf/pdfcleanup/cmp_degenerateCases.pdf | Bin 32931 -> 16931 bytes .../text/pdf/pdfcleanup/cmp_lotOfDashes.pdf | Bin 33385 -> 12557 bytes .../text/pdf/pdfcleanup/cmp_miterTest.pdf | Bin 6456 -> 6227 bytes .../pdf/pdfcleanup/cmp_styledLineArts.pdf | Bin 16303 -> 16328 bytes 8 files changed, 2 deletions(-) diff --git a/xtra/src/main/java/com/itextpdf/text/pdf/pdfcleanup/PdfCleanUpContentOperator.java b/xtra/src/main/java/com/itextpdf/text/pdf/pdfcleanup/PdfCleanUpContentOperator.java index 58549fcddc..5087cafaf6 100644 --- a/xtra/src/main/java/com/itextpdf/text/pdf/pdfcleanup/PdfCleanUpContentOperator.java +++ b/xtra/src/main/java/com/itextpdf/text/pdf/pdfcleanup/PdfCleanUpContentOperator.java @@ -157,8 +157,6 @@ public void invoke(PdfContentStreamProcessor pdfContentStreamProcessor, PdfLiter disableOutput = true; } } - } else if (lineStyleOperators.contains(operatorStr)) { - disableOutput = true; } else if (textShowingOperators.contains(operatorStr) && !allChunksAreVisible(cleanUpStrategy.getChunks())) { disableOutput = true; diff --git a/xtra/src/test/resources/com/itextpdf/text/pdf/pdfcleanup/cmp_dashedBezier.pdf b/xtra/src/test/resources/com/itextpdf/text/pdf/pdfcleanup/cmp_dashedBezier.pdf index 6912938612eaaf695492dc765aa84d47fa97ed6d..69785bcd955558df3f5b72474d6dfefeeb7197d0 100644 GIT binary patch delta 903 zcmaE4^W0{`DOPTC19M|TLo-8jL&M2eSuKPj82KzY%1bg_0D6BLxFfhgw8bR9i@> z{`}U-Th=qB3eLSzy#9FEy4#}Xf1h4Xu`MR$s13ou~?nVu|MFrtb=`{xPO;)-63&RdEIA9^%sLA zmaODx4OO2KksqlM_VoC=6DE_IWBPaWB|W?A$i|zW*!;|c-O<>h)VBsTl7Vjvjq=+JeO5~=E_mQ6<-WU3e6!4+<+txO%w%0E zbG<@ApXb;PufC0%|4wNrsB8Dm^b8k!Fm0-VNR{RmP!$R~NDua#qM%^S}7 zg>PO-o26;neM!@^<<80eXP2?P`&PjFCnqyXL~|zJkxrkTb&zMR&XXVcfA4>Y{`Xn^ z-qqr}|Cs*YIXHi_hlma1^_rQPVu)E9LezO9S!`-G$ delta 849 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 NXo8_oV=EKz{{a(`4>JG& delta 4806 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 literal 32931 zcmeI5O^jsMb>By{6$ot^U>up`P>U4D5iBC=s(STZ6LOp(XZR6wL|Pn0{E(2Y?)vB& zR#%OxyU8Ipkqk<)6vdFU;z%(d5egv@1Yt#X5+sWxhO$T`BT5`Vh64mh3?rhv@J3l= z6Xf?l=iGX)s;efMsDo@s!&%Nj4p8LAqhn~9h$aYq4Z++;${>i`l!>z1T zEzNeXZ9VWnNW?Wc6~rla=a? za-&^qm$F7yu7O*va;MqOZlReV+z!f9(9Hf@qh4?4&7H~Xqw%!=Hk!$PQ2!^@hH2*e z-~Y*%uKdBzUwo+g_nvw6&U;-mXYaV{w@zxNc{-Xw1+@;AR4+H`-Bu~I#u*hYnR)2m|86>cRLMsPN&>xwr;Uwf^a)1*J`GITej5u`e?E?;U8W3lRMs5J@dtH-u;D> zx@n(^Zd%=PqftW_-B!8XZkB5JnO3_~s#WXdtl8YGn?$%BlxuZUyB*yOzcm`~_EF9F z?NNWa`*o@2+Sf+=)7}?R&2OANd(S&JZ+_*D&+VMgE`K=!Q|a&D_3e|Y>70sc8trno zM#Qeyn&oP>Ug|W!`$X(X|IN|0o&K8&*>8^a zd&5`n{I{R|xtsT%{qeJ}J%8_eKDTr4x8HZ)_zBxJcb~iK^Cwl)Jr&h-o9vnvs%bUL zb)r;;OU-nnbuAlxtOUTNX8blU*}JHN!VYy=xOi?fuDHqv6i<3)(d| z@BQG9Z+`WjXV3iWo#)WaJFc6nf9LM*N!?^*UZ;@hVK(Jvty!uQf!lSI)9RG74*RCj zD7U+}$Y>Jbc2KTW&h3TnYj2Ep`q$ptnM}Vq>Q7!LK-GU(|4#Lx_u+@1xbnnLzVwkl z`2JsC4&8r#*MC`~n$t;wo3%2@Ojc^P8$_x`sm8u();pzE6;Ir%ZQeJDa62g1s^+%# z&9!fg#yi)(xpQs$I9<(y6;+-{cJ zS+|ZdTIFU7S6s)+>P-@1_R+13DiLl6zy^aIh}O4T`yN_-CC(d2+um*QkHeg?N(N5 z*Kj=bTZHgLxE++IpqsZw*9hD@!~WZ&VQ(zm?C*bT)F1Brra7Dsa#A?^ReW(VOnv9B z-&>=b(@BVHWfHw=x6~wbSKGuXwogX~DfydQs3y^E2jM!^w7Rzw!M`yYj(0FAqV~1v z#G(}br`P|2MX9g8_M@{m-}BzD{j(qZkH?-{oS^PsqnA@khpU_rvIcsomx)yw=2Yb* z)o!-<`c`f@=+KJ@*Qw<;4^TUp&i>>L6!ZFMf4KA3nGe)k|GwU=Ui<|`sIPwIj^=A0 z{Ppkdyz=cY-1m;Be4qPUcOR@#%qiu=Br-Zvwu#2=md=y}s4681dEweEc1#w8+d+8> zs(E9y&yjLxI>zG+dkRq1AJ*&D)}z1ir={2MpPAZw#a)5exi31`bHhs+Lsr*^BOLL#I}W0XI=YNl8d`QFZS z_%_zGtCK?SYoqB-|2Jh#&)#$M9d^!VUoED5fBC+<-d>}c(@BTxRKz$(mfG!%%0#Es z;IOHJR!0qu&7nKdZ3p2`ubIg=M*ZGC^$1i%{C)$?cuDK?u9*-1`0Ux|e|yL-yLBDi-IG&EY|4+g2{>qhE{}N@r z4_`Vj0jjNPqsqyo+T5--ez{)#<@+lSQ|CKk^yOZ)tkJC2TieyT^}29Dd&3HMtBLNF z!BMZ@JL)a!md{*yBGnda-Bxo^N_^l~Zd~u}y)ZZ`?G7k;Jb3QU|M|Z-R~q*pJoky_ zmFku24-fXokG(PCuft|asRVqC&?+?#^?9wB_3H0E( z{iCDn=PQ+$UV5qgQoTHzk1AQW+pSb%dS&%IaljJ%$SWwaXyls+!w#b9$w2!u{Y>nF0 ztZ}|sJ+E!jIA5=(xrl&mHy*ycLeRKc?Vhh?=WX|`62vz8KO{jN=abnzc+Sk~_fOc# z?{BueCBxfbcRvNgq>BFD`5|Te9$TY#{rY6QXQoy``qabL;{2uA-m%u}@kE2+$VptnCGKvnI zmwWx~Mx)=^-rcS4Za0U6cE3C9_J-N;T*d675{7}fRTlQ9mjCzvy*tQl>G)lBy{oR< z(!gzXes_1htFGJ9z-@JYcX$2&Ro7OYfs@QXc;+7y$h71ZjbgDsAI4M9$S z?b5_r>n9;udxzHjtq!%zHto9Hhq}Z4fV$VpRDUO1JOt5HD;JiTAO$Nyio*trBh$J( zvN+Q>er{apFt>V|n<{653{;mm)Ec?t=yGeQsp=wCu&XIJRA&m2j+!+? zRB)}a$wh3HOZ(a~Txm5ew5j)c=cae2T-B&jdI;JLFj%G5VAbjxZ7a1puUnmB_P+{ArjXJ4ORJMl!%Yj8%(VZ z6KSBBxgO2op_4?q0S2dN4Nf=;kz!LeYQT0d#$MFg37MLRm{rS}Srg9yF|1%}4H&GV zHOAqxq>*t*4pJG!8W@~XYjBde(3ygk$rvy=$y#XaB&czy5QfUJDTAq1!_pd@WG#X* zPDh=&QxDn=Fj&c2)Hzt8B0*fG$tY_9BC0`I3lJKI8i-pFGx$!q8*rsHSjm{w*#_#C zDGE0z@;dECXsq&9V+E9uRLxSWgw&0>q+$R?ALeOr2!78-|D;W;7cp4KUU@JHi zU)0L8W7aB5(RJc7T7khS_0>2$WhJ}eDG~MEh*lcKNPQ(CR+CyCTJWZoNvl;hB&1PV zicCcql+kEv%KO^V0%ZnVVI!LIu!wRO> zfWb=kLTik}zG-lqkw|3_YhZ9nt-(p=LT5xZDFVu*5mDBnYm$(OG^oLYG~_Pc8ZfnL zSXzUVtVJ-!!FM(4T$Tsz1{kblE$SSs2y=ps)GCoNp5QEN0TR|ss;&lVXy-4%mDXS- zb5Um-2n~vs+gPLB2#r$7F(b0}NKFHCS;p5-r=*#+A_kEq)_&-H;`_LK+7nF;|kq7&f&Arvzi1hG;RG zpxpq2RcZ}ZEVF3&)?^H5;Tx&6U>Hp>meKGOO4XbejR99$gHvjaabz_-qMK+pz+jbH zgB5{Uw00UpsDKu|f!=5tuaL&U5X@L}7$T?E7$?CPM`ps)uZea83|6T%SjlSiAQ=*kbWPPdCp$BTp4AyAbEdrua z_3g$?%>sZSRD!`tuvvAr6X^N8Ak_9>1A~vXhIBH8Cf*`7IgB0Rz_MC|!-&t@LO_<&QlcW47i4r~%%O>#!{C%U zo5&PNM2nRKZGu6&0VZ0>*w$&p#+9W2Jxaq_io{fcvrGkOMJR+!aHTa^rPh!cH`{1p zE#`ArsenPd0VY}riM6E84n0cSqN~-@T2cye#y-r2av0;L)?k%j$SgZ)VF^K-V9+KQvj1r7dWfuCYp6DEK1qEqpOr#PCn{gRbRRej5rjRHBNymbd zN@YN+Lm{DzLNK*DTtP9aY=Wn|6KR6cIp7LPq>_nJa%y$xp_=CwB_bsNb3{BNEfG2M zn@7+i(+*Q>z+e@vf!NLs9z;*1G7!NaO)z!#)`XCWhrP&NZHuUI2DEM3P;3_RoR+%1 zhT*^;tDay8Eb~xna7r-7p-RACaxG{R4B7;PR@S1g>?Nx5aI>VgRN(Sq;#NP-rs2 zmDXUDT4P+94R=b3Ho>4xFlZA@v`D1~M^k5q9>1+3s#eA`A!R8*D?%Y;f-9}TDz(PA zG7WCj5^aJ(n_$o;m}n&xhLbuw^!Uy0W4U!XXU>Y8M+0FCE^K_J|{wb?Ep@#N2;=*s4& zuVvwap0;s@k^KBAxHqy2hK!UGmy@Oho)ed~nqs^s8v(ACtfyJo`k53KgtP&*66)Qi(R3)fEo46IonpXItmQRA8e-@Pl)A#vD5y!V=2@6Ja!YUTS z=w865YC;Hx5Yh|xRQO=)ti1%p`v_Vr(MNXplxBxi%xoA#x)^G^Sw^3>%lXqqLbwH$dkUjfs=8 z6G+1)1#%PH^AVOTAhrTi|UNEn2X*BBjBXY#){5H>Pd?yrMhPd#xfUfq1;K+ zs&TLvGs_&tu&Fi1NifDyUd=UIqTK+4RcZ}ZR23lg?2m|Ph=pMLF=@e6K{Br+=;0}c zA+gL!tuai3F^mo;TvsOA4KP@x)?kJEg4DBU4nc;9jV7YX*W8MF^dc`{7@*hZa%dhZ zhcQg*9K*dA zt&lTXbaj0zZs>^w&(#vLCp$>ERBQJY=d*-MrS%+2)&)vKMBg-owmy$$cvap@J8PhG zioS`H1WUtYjhT9AfAa z5s2Kz*^vio(t635t`vb9CqF$T7$PSaoMa>FY~xTK6fHJl{$V3DR(Y$jveKex{k#S= zP9CT^5K2bOHyEof&*OA{b4zQ$mDU(1wZ=FoP!9+u+6^#RrPg4@UKgz&e9heKS;OFr zF$(%kH9<=QVISr(a%c`OhcQs<90Tb_g-0zD?FJaEQfsi%;{nim3Bm4lKDoF z4Zr8Wqn_z*BTxtn4>fvLXpf-UQ=;Y>a~Shxd~1zOkf8P&eU-*j8;M3-il7&NZ50HQ z%J6D>IMok-wyuk3RbfS?%3xYou}a~F4Wof5@1!j+p*Z}Rj<8Bii1?CBR-HM!n#yn- z-ik{w`yk)6)nV zA0tyhrf_U|fK-Lbt&r>sZQIN$$-WXKvMd}$TZ?*H39IQwQfTU={35cuWqda$V}d9_cdaI)?ML@Zlwma4eQ3 z0J@VVm0+=0Jah@fwtQ)2WLzcNdC`p6v8}e0p@(>Nx9rMJ~w2pEt{O~ z%WP+`&#gC0;uu$gFx+gp?y)aJ(aOGXUO{bEX18y?vW`)mGxP4bCXJixS&H?sgkvEr z%TYxJBhx~#18`p|?)XY@vmhVK)O|RtOqd+TrA37Z58tp79_tf^jjN7_SP`EMVfRr| zow8drggZtcVcaoTF*!A3yNm83*V9AJ&e^j-c1I&kYj~Wt_m>kuJZ#fKzV^Mu*Pq7N zzVg}WsTkLm&mNy`XIJfW4uN`v#TU+Xt7elf%s|RYW}@!G3vH@^q9coI(|n%}Ll#J- zUF};v*PYCgryq5a^L>l>RPuBRv=rAoG~(+pn%uX73FqhNZ_ifR@!F;bq&c196S)0DM zw&nFcTa(SwexI$+h9gAuH>~u-WIH*V^$7=exY`49wQX4xx2sC1!S2`#RpN_aMX|>z~3lGty(# zy2E$<;n~w(pmXgo67)QlX0@{nwdlmBaAVUUi$+;`1T1w|Xd_O0c1w3_Pk}O# zCw~k!_WT``vGdUh)6U(6BTU=vr$#ycTLuH#En8B?D#n{zJ{o%m1{Cc5Yyd;H zojrB#;@j<-?i{T8nxP$vrxqMdJWP_wD;B2i77na7ti_G?6pRvia-U#(NSb4$*rm}U zfz-y<(lDl3W~{Ami~zbXkZPCxHMatVsW-C=hAGoyoK3nZY#6J>nzO{r?oU&9X*O`%h6_Di$Hhc3+) zyfj{a%kSy?G_ig zG+TVo(rj^&OS7ejzcgDF^@}@Mmx;@E>(a?#aHhqxy7aA^QdBsC-B*4p7MiT zJ2)c=CT!Z%Z&M?ej*S*0YJ6yJs7V(IXpKNEg}4Vzw6H zi?dS(u!5In>lws?pI(7r@?ehUH+W_ahft7bWwxHd|cwo3CM`E*~#6(S{#iXoQj%VQ;PN@7&y-q6&4lU{c zi{c8TEm9TKhF_wl#ZkD$Ca?mqIFP;a4TVGs&p8K@Q7;j@OfAB{SDUDsk$ksgG?Gyq zI2iH`qHyPtb5Mb+I18K@r$EVouh#os0-xltHnGhxERydwIUpw(hT#t`sE4&l4*3VR zxCQuY>UKk>8bz)e6BJXG`miW3OUlvkd)s=X);QpZVBKQsertm%qay~+@3+3przM?F?(E=n6 zYn7!GnOiN((@_;VNeD$5;@7n;hxeWdu@-0}^_7yBC=I2)-ZLR6(L#YzC*qJmYc7=f zde4M>{Zn7Yr1F;#l!j7Y?X{c_lvE*8Unp(9K5HlqEhw#LLaUT(m57-U#{Ge7e#(e) zYga$EZAVW>Y)LDLXp#7tqa2a_X#24(xq4x%;FPsL7#3UCuC%KTNz6f9uRyX|gP8Lh zM{H=Fu2>*;BRkA)hxutGHW@c#RCRT5W-!EouN9#5H$iY^cj}A>Kepd8(yfOVx3FX# z*}XcUi%C`HefLq})-#zHrk^;Mx~|nxjl>N(@|`9o0@bhM5RrP})9L`?2Bh=Lw@wMHnIk%S(XZG>eq>ipA)}g(zeK_lm?9ngNx>{LRm8&$F7Q4Sd}Hqglea7) zaia*=F0u4>JE_6(A7r(7R<+&=TC&?JF<+288$^G%YL)F51o~D8yl6!6V%#r zYocpLu!0Njn=&C|I3%(16(!$eN02#0&@_mNdYB+^Auw5y7s8cVoH3_%%}& zdx?!fPjaw@TM0#mlVJ_ya^%_U@;Hs+y2)jTHDUu>K|R(8YD*CuvVt6GvDxSx)pB@; z-ZAA)zTgaHekxW?o>F2ah@FRI%hW59)kwgpV@qzcM?s|-Ug@uK&;*iJTH(LOIh0(1 ztkbTnYx3N-nJjqMR65kd3;q|yGHu;68fRaxrJ*E<@9#Cg=vR2hNc^H-R?ixXAM`8v zZ};J_se$|E;!sI`#LX43Oe zws|uD%iR+iTI%YIIys}b6{zE4b@n0@Ad&9$)-64Of#fLqI;(EZiiCsITQB{=@2CJu z=ysK#kZGx_Gvb9#i#<*Hg_CRHLAm=;dO@7oz-g&#a4PI;W`eQneKPE5w=o`F>yPI^B zLlpamJ1QNPSvp(5lbnh@gHd5~leH>x>4d=Sq;yVGn92!0OC5txVRKV>B{gW%i|vDf z>!No(qotm~XtBM2ZEKBBU41vvQ@zpPu=4QiczVRUReyEdKYSjOBz*Ep*TuUN3NP(> zsyFBN-f<@C1KspUKiB^}!5PeJ294BT8Y|XIZ;Xw%$nx&kXU2p;G$S5-CU@0qUhK2% zCVf_x8=pHRy|}`9;6L=X9DP<&n!c8QN}p?}Ek5I4;uFW(_(W`rPpngXs#=_|0ZNGv z<`S*kxWy+1EG=^vKZvQovRkD=AeQ{I8g>o@dr-b;`0+x+PZLXmnQ z?;|W2&5sQxFJd)D`dshQE{9a_K$lAwKkV(*($yi~j!O3zBv^g1N*bbaX*?Vb*c-eY zm>pEvoey3dRQ7uF*|f4Zp7WZ3;bd^5(w`mm_V(B^mHp%Cs5d`8nDma1DznjSI(VTn zNBGLoc+wy6WJ=}J$Frk>UMDgckp5Rj^WKZR|F_nu>>f`hgQH5nHyZK!U;n4SJK^OK zlkxS#@nL0f(C;1YSNM%!{WF}*U|bo_dwY8CMP+n6o*3K7V0e_H`FON{R5=(=j}I%? z2lJ!-+3{g-+IKNvzuP+;EP#=kfV4QJq5S*8mo}J@AI*FH!9j2SLS;BcuF4aK6G`~w z<;v5ps%QISl&Cp8=U8vCT$y;+*`RXhEw9)=SWdNa`FK9#L!+{HJl7Ju3}~?g zvlj-_-QFD3sVo@p&91-f!p(Sn!hi{nr|7j^tFSS7)5BysJF1lVpZ;K2ne)n%Lte5x z=vNMU?Ad9hKN!sigUa>E@uBPL=%v}=F$x>c=9Qy;+7_s{cYHLc92{fmb*Xeb>uc$a z+a889ne-~G`=USc9P|$NjwdEir=!MCANS^Z$ul4Kdy}D$5MLe=^lO!iwlOLfeYA^( z&34hYQsv@e>KAQ;UA$a*I1PWBkGCA79Ws>y20UXLGjlfR}Vk*@B0a zp40ZcxmTd&-5pp|rMFW^O>BjC)HaO{M~PIz1(JYG<|?2XtcN_aVaU39#K*Bm{B;mYrs zR~sC$#XUaRcj>L=dbxPE@Sx!^D&-JbkFX5?nd%U{F-k83I zxiOQs&6%0^7PIF+m4fY!`CzzJCEwrT?Mv|=Wr`;EOT*IQJ4HbKSDG%qz9Wk~ z@m+`G$O>)7W5OrC;|Y`#-%)8k@m-hHd4*rCMum9wyC!GL)$cmYYUR5+_nIfZ|)s>;?Uo>x$>7PRPQuU?*g0RylsH&^GI&V=Lcv>Ku8OzpHgRC+1PF zW*iHb`_-#8Y9XuNH7VPye%I2@(|?P3@Ip#z8Y|yb+pQD*D15EXx6TtMh3^PVPePmp%%J7{{_l5vbDisUFTeZ#-OoACajxrrrh}-$Y$Mnr_0BS@pxs>!eXgUp zVGu2p+f~dpZkTkWhhXG60eX@fVxnv7gtEg#7D-1xr{v{1+;V~5_3&xyQh z@vCqVY50h@>MGiT0#o*{rbtBB*vOqI{?+4^eV_hg)?u63~RDQZ3zf91njpIEt+ z$yrunD*_*pF~`v)JKr7KFqG0(>}9BI_&saF@R*gkq{&@I9x&fOO0e*4)%H#2{3FU? zw$CJy3*7p3!m*4Ag7wlZ@7fMVi?qq+xZUI}7eoUa`STVzsynF#xIxLfy8?9L^GRVf zDUJ;BvTnvh3qB2%<}K#;a{C4VLi5e_*?R*%Cl(VNfduBvXCC)_p{(SDWCpQHp-!Uy0NmM*Fz9*)sDxJrtKlWAqSgembKBu~TRxxz} z$L0l;d@0^M=%~Tp4V^CNxZ38c@uWJRX{9<+!p(QB_v)k4x|h}NJ$}tk;tQ6nn+J2n z@-A47$zFA+Ga&l(dr54}*=}9>k{2V7iW29G-k7k_wbyJe@H^R)Ih_?BM(wD`PLp+y zBRu?=s2K5R)GFE@ZYdei{R*K;uj6&iq05F7*sStTXYUVj|b`tYB)p6+fK{Nshq z@$VfAqwQ}AJL5i1(h646hT)?xeZy0J)Dz_Cc8b0R%TEQpSWu8pWIolol<(>H3G06` zFIhQ5Hbb}XjY>wDK?)o4nQpK;=SckH)gkdm=TFEQH2t-;@O{*yxu>+3ixA>_v0&}n zjd`GO8kyG6Hy3y2?kqq0MXzn2L$d%HsamcNAAr?Uci@iEUg4}`5by6=cHZ8IwJOQ| zY8N2tCjGq3Bfi{z7VY{qUsTh`Q{Y)Sr{>I$i2TR>o9h?zj~i!v_z~yW&JW4we5r1w zgzVBcmg%Ya)S11ScX3sD7W$2f&_;_-F{}aPS*uBx-^%vf$X5RwqBHY@Rj);?#moHO z+_ki7S2Qg_71@PksFsH;Zdcb6*QoJz=e&1nbJx(6gkdUto$AWA>}%p01!4HVQ@_>k zc=+A66kb!9e}vF-fY1UKD4f}Pb!#m?4_^ml`vTcBTfAVokE=}H@&yA%X){~==s_@^ zmNP2o^O^{ML)3WnHK6hh@$^UlYY(yW4N=pGaM+jtLDtmSuhiPlj(scDu!xoTW}bN| zt-ADPH($UpB!jB*h0c%;-1pkn`7NH2ts8gNn)2{mN4$aNnSjciwfG#oRk5!Xa21N) zp}~jemh}{XypVbDexa3+Z;@lPgd>!MSsB}yW<&XuLPI+}f8o|rlafaQC-noQ=z}@7 zgx-|K_4>v1vTmB4n{uw{sqKYKIcxUTHtNnhYxdNZ+0Q%w2+AM(_WhDY?5Sn*OyaZZ z@2=f^vRue8w~j-bW>=@22Q~rd=`$!Of|i;jKuwP%5VVsQThv%XW8Nr`gc>V7Nr0OA zu6ZElk{WAJ%q0bqP-BhBKbKB_8ONPU66y3*IO}wJ72HTX{Gh;{2>3yMk`TBPxNGuH zn(m=M=w%$RpQVAjrpC%3kVc6TOAoyp(-8<~L#Qa?uJvz%Mg*Kqk7R%d{xlvCL0^Ua zx@D(dUsuj=DwZ36v68=X4&N41G825xB)(NyS487I$NKm)CE%=6rNtEu%boFOLHTwd zY&r#FN%W{H*m~)C!m^UT129Ky-yNUmhz&WO8>V3uV}hK1pnU)3odPePq6OW`nIvBg zZHcSc5At>2oUyUj%$MW3uoL|g!u^}(Ny_cZyF0%N>pTeVeBT{^^M=9!i4t?SJH9@H z16Pvf4;MPg;0B9ort)1jgxX5&W}#~gr2Pwwx-4y9CeCaD;Lh{p)Ds+hP1;mRtc6<} z&hfPPa`Rfgn%6|I0z;uw)y$KTEg~&p*vlJu8nCi$Mr%kIuJPS*Slo{4A%>)e>}{r< zkG;gnK|yR!S>lj8dw0uV@9Kbyl{fhE;UD&efUgQ+K7e&3;Mn4JegBuO;ME?G5&*Z@ zNd6pxq!WgXONZr$Z!UqGaV~B!{R+OUywAb!ZSJFjTNI>DtP3AjmHL-(4jrP$k{A=Q2D41b= zlCZ{zKf>I{1t16GoEWjI@#RH7bR5+o4oUq&Mak{vQqQeMIIyp!FXnoz(@vf@O@50= zE;01{7}XEyURjm?#*Be6YcRdZOO7ltcSQ9WsPDoH=S4H?xrnb*5jei)x{ zW%qS03l7-QIVIHJvT@ZrbyhNV_$V%=k4v7|mX;xQ+6>TWUM|+)JSr@{p`xi>+kuGX zHOnbh(nQ8x%f=lSMw&j$5Y#L+oM0Eupxg~EhsEUxb|Bb}3M0W3M}<;D)cv^5tPTVc z%mjm-fxDTB9f+BuB1qFO8G^%s**V8y8CMiDbMOh-IhKLF(9+sYa~WS zNe3C%o{f{dnKQ%i1aWT)I5%-Sf;EpRIO>bw#9EOKKLxe+fxRkgE zM`epOHO}^64rM$NDKgAeIFxC&r6JanV^yEsTXkF)X-S>qkaS#MysL%>S>k*@`%#ak z9@6uEPEMW;a>XSqH%A1xg`D}z6ltlLJ8)0KrANl(P(hAJ2Xg+gcy&%yqcM^|kt;_j z{yL|M)&v<(k&9!q?zxwLzyuiw>XNT>j@)2)kyAiv)N|pr#u&qknb-Q%c@lXs6uC3U zt&yfwc@oyK6uDtndC3J_#m-Y2v7grrjHRVDam^A2jr#y-t)ii)tixbixDHvqNZ-$E zlGx>l5v^sfWjCpBZWZH0(69e~{fz#bvhTm%{EA1bny0mzN3DjZwT4Hnmgjx#(?yzK3V#sOR9QKg)6ZJjZP@j{1un^-3J|S{(I;9Q76)_4XX~E*$k3j(UF% zTo8vKt8|dhLCpAgdt{8Fsu3fnqcmoGqCGM}QPqKwGaEF%9_5>Ck4#on^<}idGIAc0 z!Prk7&75kFOjA^iVzh|^Q)Gew9~sQqnfAzRMRDZ4a6?Wxgy&xdp6hBoHd^FMt!MNM zIZ%)-V}T$ANH&ao?ZWq5|1|I*zSCm{HgA!fB71h_-qKQ6^Z4|p{fj1HAj_iWt{0VN zc`tJ|P@++wduq1)@hsDpXs_s+j_eQ;Txcw$8A2qk8gy zd*t^|)(w?vW(Yq$k*K&*T0JoZ;LKQZ@%J?(;N{a0Y($en6W?hH?K4omd)i>@5^ImR z)p}@U%*TYvRo}V)$bEci92pANsCjQ6ZtLm$A$Y)}e@T4x2FKKlYuuQ-Yr*)JkD3p+ z<6f1#y~4`SsVWs8Fd%1O+dX9vG)h|Rf34lvz?a<@Y5DEmt#NhCRU}LS#xlI=hXoDpjxk6 zwj@V=!LG1>{mKMp`ba!dVDU>4h>`o7|0B+mbQ%!UcSs0c}ZE7EhYAW0IaVjp^goUkjw zw7&h!P;x#f8-w9*_bLLYg2O10{lcs)xLwdL$zI{#*{fM_SbLRI+o^x+_Bo7Ni5Gvv zE-FrF3bC&Bd$FXSxMX(hzlqcnl)neYBMD&2?b6cv z@BM12wIlV1sID<>xSW1+!Y3^hkup8zz-+GX_R#Bf@)?zJR&Ujb3X7z47OzwB;g$Ms zKH+CkVp)jM1N@I)2iZL6@Mjc&=kv=IW`tQ`9|wjrP3d#8loYtgKa>;>2a?aG6~~I6 zv;C@t3l+(X#(uAx4vc^_B`irj_|NI&gXv7(m;qkeQ)2M3*!3tPj=t7A$y$rD-#Uafpma4dTQHlA9TD{;Q6m|b(OJ#}P zH?3=NL0_%JL#ns`Zu+|+)T9+4%l{?lOpw4e0>5=-Duo2-#Z@BgGHH}b2SJ&jxe6#E_in`ZGM zfhpw7Nvm*G?3*JWt;Dj9yVq71=ju|V1-+kwL<4h-mjcm2M^*mTiBVAcTOvs5vcmBo zW(6r9rq;?JQQlF16=}x}XHEj)64O^E;LKU{bYaNc@()y$CA%)=>v-dv7fwf5UAZ#4 zyo@W;u%LkyR?92VUBv3M`}^>6o|q>gRG(Q~*lHx!-S60Pn@PQUxbbQoT;=LUhOFY< zQ@~ob`-do5QF*aX$F4G)C%VJkD7Uirrm8f5QmS~!Uj|V>iwLzt=W3^U#8%E$4;BG=p1(R3w4R?mWWV>`T zr@rGwx9kU?gP?pM$(`vHTkv%)=T$ZE<#O(AU4rJZBsK;VKfH%4M&I&VFzB!xSV+J> zpYU00brOiuSIK5coYSA{(Ta+=r!#llE$9Q3X9w*I)@L4A1mJhO0MwgI>f1NjZRqxwjqAf<^-OJo@=#`Vh;|ZQ)bv^y^Vd5G z_y7}qb!l4h_!~E&I7atPAlW=fG0Aud_q09tMuTZGKG$D?5#4serf={g*4M;y(s=F+ zacEZB7NbgcoJ&B>Kb?Ci^7gwwjD&qV^k@7ZE?DM%Rv&XZHl2Ir3{AEj9YP)v0mx)> zdum;piMZVzz8iXUyIYeS+Kjy24co_&j6J{^8ppOT$I@n1$tVd0rO*Nb^I3V{<+P^r zLxtL<2>ErJ(c9WWr=|pc{`;nOL~-ZSr^ntZg-00CcH$JwSQUh*uc5esU*6^SYs(oV zMBpAmO$bb*i1ber%%@NNJpiWuqaJ@LJjzJrX{j)990i$Y4@^le-TsRlL;|sq zf3yS={>mpq!7i?moa7GnntXtQeqbm%RnV+4rA%_1tUA*avpTWY=F5hf$kazHi`~@}&&BSt={h&+4L@IDM^OIA=(7k*KVX6{vacAT2dhq3&*}(cllMmA0aI*S)*254}uZn!vk~T2CmEJJ* zgY}c)vt^Zy;#uDc!74n{dn6a2buPpI*<_|5QZnmyg{D!xO%ecEwS`e`V$%foeB=P=I?1#b1aTzI;Ek=u`OMo5hA;k|0HoUE zBWvVFj{l@5H}b0+Py@)#l2iUsb#E2FR(33e{4rCtDBvI_v`R~T+X!id8F871=5G+5 zvvaM5&aH(hG0SYs2Xq}&2(Z0w4J+(O0DjeB9?7u@_m z-xwQv$PRF=`KN#r605;wqXm}wUVZ}!Ijnr$vNH&;&OnP-w|oox+soA@{);7YxZb<` zt)vv5JY?jMl*5A)w=a!Ng9G~PpVz%F%xFB13kxS=Ti({LZ@Bqa*T}Pb4|hc`XFfU5 zqj}nTrIy!YB`U_ahLCs-eL=OX?#|kn;3r^xU0mSKTAD<~($Y;NHKFZrb)mhPgd9GF zc=ruaa9CRkJ#EfFSoS~j#gct6!`ry09EzV`WO(Q$L~sf42bYLW+7Jep;yRzj;O77M z;e(s$ENQW5`0Q$})?)3&k$_=s@8Qy0YXN7zl*<{`5X}Fo6Xsdm{?L!5A~Ydi082~G zowWGyfsw|h>Ah*Aj6JxH;WnCT!mC3B^P7vcXr*dryI0JFoXwMsuQ+SpEV*TXLq`vA z(Sxn%`(O*ss;<|^#xRDZc9Z7ABLRtnM8(%caDqs5tM@S&cJhv&Vn0^50!|$R4v$?~ zUdvsJwQOl@s;Ms118NB6@4~{%Ye;wCMwQd&5pY-;5WHAiq}*oM5RoXBW_1S)C))BY zyjUt4;{iT{ujW12b2PLZjnSJTx!x(g)}~--JKy?r-Fk- z(A3#A_h*Gvq%q@VT&jyK59%m_mXahuZEtp2_vdtSe^@Eqc6<-@dyT6!h_m_sU%hLb#~_7zbAG3T8z-_DUv!s^ZFi#})VB&7fE10;ik>X_` zqrJ_cpif*{oLfo^ZVAz|aYuobBuFKq#e8{1e^!AgqTMiH%)?xa6yz2sNy}fQr9gYP zbac3{p!hDmq7BBz1%34wO8O@XqI8KLqK0z033?12Kyj5@AbQZ3N1N0SLQW2%0`h@p zePjp>Msh;TY?N%dVenl53F3%yvG?GHk&Xtzl>L)J7^%c=FC~_K!3WrOn^ATHkMA7a ze(MGXi(UXYW%mQzo+QRv|1pyFgb(N-Txy) zG&(lW8UPnW`f5fj99VJ~6P;KYikG@V5K|CoT;> zCejc1NeqKZ!oh7p`u+03q+$Py1U#4hFFq-7tL*1u+-)3PQ0}A?S_4O4@Pt?lfu8Ab#t4gxh>QGoT1)4Fv2n+EyQ3WFU~m{zoQ{`QSyzSbe*n&JZz})* literal 33385 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 diff --git a/xtra/src/test/resources/com/itextpdf/text/pdf/pdfcleanup/cmp_miterTest.pdf b/xtra/src/test/resources/com/itextpdf/text/pdf/pdfcleanup/cmp_miterTest.pdf index 60047c0238395e054f566a7af9c5e7ea32f32412..f027f975f80d2e0254857f1486a7a07da6924a86 100644 GIT binary patch delta 830 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 delta 3115 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 Date: Tue, 1 Aug 2017 15:44:41 +0300 Subject: [PATCH 26/46] Port 07dd2fa. Suggested by Jorrit Schippers. DEV-1884 --- .../tool/xml/parser/state/InsideTagHTMLState.java | 2 +- .../java/com/itextpdf/tool/xml/BugRunnerTest.java | 1 + xmlworker/src/test/resources/bugs/starcomments.html | 12 ++++++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 xmlworker/src/test/resources/bugs/starcomments.html diff --git a/xmlworker/src/main/java/com/itextpdf/tool/xml/parser/state/InsideTagHTMLState.java b/xmlworker/src/main/java/com/itextpdf/tool/xml/parser/state/InsideTagHTMLState.java index c1978f6652..3b96bae850 100644 --- a/xmlworker/src/main/java/com/itextpdf/tool/xml/parser/state/InsideTagHTMLState.java +++ b/xmlworker/src/main/java/com/itextpdf/tool/xml/parser/state/InsideTagHTMLState.java @@ -100,7 +100,7 @@ public void process(final char character) { } else if (character == '&') { this.parser.selectState().specialChar(); } else { - if (character == '*' && this.parser.memory().lastChar() == '/') { + if (HTML.Tag.STYLE.equals(this.parser.currentTag()) && character == '*' && this.parser.memory().lastChar() == '/' && parser.memory().current().length() > 0) { this.parser.selectState().starComment(); this.parser.memory().current().deleteCharAt(this.parser.memory().current().lastIndexOf("/")); if (this.parser.bufferSize() > 0) { diff --git a/xmlworker/src/test/java/com/itextpdf/tool/xml/BugRunnerTest.java b/xmlworker/src/test/java/com/itextpdf/tool/xml/BugRunnerTest.java index a6455c8686..39fb23d4d8 100644 --- a/xmlworker/src/test/java/com/itextpdf/tool/xml/BugRunnerTest.java +++ b/xmlworker/src/test/java/com/itextpdf/tool/xml/BugRunnerTest.java @@ -76,6 +76,7 @@ public void setup() { list.add("3353957.html"); list.add("ol-test.html"); list.add("processing-instructions.html"); + list.add("starcomments.html"); } @Test diff --git a/xmlworker/src/test/resources/bugs/starcomments.html b/xmlworker/src/test/resources/bugs/starcomments.html new file mode 100644 index 0000000000..4bd41b8d3e --- /dev/null +++ b/xmlworker/src/test/resources/bugs/starcomments.html @@ -0,0 +1,12 @@ + + + + + + http://www.example.com/
* hi + + + + / + + \ No newline at end of file From 9aaafcd35a5a1521d129ca7b8276265765b99f77 Mon Sep 17 00:00:00 2001 From: Vladimir Osipchuk Date: Tue, 1 Aug 2017 15:48:34 +0300 Subject: [PATCH 27/46] Add a new test related to slash-asterisk comments. DEV-1884 --- .../examples/custom/StarCommentTest02.java | 51 ++++++++++++++++++ .../custom/starComment02/starComment02.html | 14 +++++ .../custom/starComment02/starComment02.pdf | Bin 0 -> 953 bytes 3 files changed, 65 insertions(+) create mode 100644 xmlworker/src/test/java/com/itextpdf/tool/xml/examples/custom/StarCommentTest02.java create mode 100644 xmlworker/src/test/resources/com/itextpdf/tool/xml/examples/custom/starComment02/starComment02.html create mode 100644 xmlworker/src/test/resources/com/itextpdf/tool/xml/examples/custom/starComment02/starComment02.pdf diff --git a/xmlworker/src/test/java/com/itextpdf/tool/xml/examples/custom/StarCommentTest02.java b/xmlworker/src/test/java/com/itextpdf/tool/xml/examples/custom/StarCommentTest02.java new file mode 100644 index 0000000000..335bacc9ce --- /dev/null +++ b/xmlworker/src/test/java/com/itextpdf/tool/xml/examples/custom/StarCommentTest02.java @@ -0,0 +1,51 @@ +/* + This file is part of the iText (R) project. + Copyright (c) 1998-2017 iText Group NV + Authors: iText Software. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License version 3 + as published by the Free Software Foundation with the addition of the + following permission added to Section 15 as permitted in Section 7(a): + FOR ANY PART OF THE COVERED WORK IN WHICH THE COPYRIGHT IS OWNED BY + ITEXT GROUP. ITEXT GROUP DISCLAIMS THE WARRANTY OF NON INFRINGEMENT + OF THIRD PARTY RIGHTS + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Affero General Public License for more details. + You should have received a copy of the GNU Affero General Public License + along with this program; if not, see http://www.gnu.org/licenses or write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA, 02110-1301 USA, or download the license from the following URL: + http://itextpdf.com/terms-of-use/ + + The interactive user interfaces in modified source and object code versions + of this program must display Appropriate Legal Notices, as required under + Section 5 of the GNU Affero General Public License. + + In accordance with Section 7(b) of the GNU Affero General Public License, + a covered work must retain the producer line in every PDF that is created + or manipulated using iText. + + You can be released from the requirements of the license by purchasing + a commercial license. Buying such a license is mandatory as soon as you + develop commercial activities involving the iText software without + disclosing the source code of your own applications. + These activities include: offering paid services to customers as an ASP, + serving PDFs on the fly in a web application, shipping iText with a closed + source product. + + For more information, please contact iText Software Corp. at this + address: sales@itextpdf.com + */ +package com.itextpdf.tool.xml.examples.custom; + +import com.itextpdf.tool.xml.examples.SampleTest; + +public class StarCommentTest02 extends SampleTest { + protected String getTestName() { + return "starComment02"; + } +} diff --git a/xmlworker/src/test/resources/com/itextpdf/tool/xml/examples/custom/starComment02/starComment02.html b/xmlworker/src/test/resources/com/itextpdf/tool/xml/examples/custom/starComment02/starComment02.html new file mode 100644 index 0000000000..3bc20ab075 --- /dev/null +++ b/xmlworker/src/test/resources/com/itextpdf/tool/xml/examples/custom/starComment02/starComment02.html @@ -0,0 +1,14 @@ + + + + + + +* hello world */ + +

Hello World!

+ +/* hello world */ + + + diff --git a/xmlworker/src/test/resources/com/itextpdf/tool/xml/examples/custom/starComment02/starComment02.pdf b/xmlworker/src/test/resources/com/itextpdf/tool/xml/examples/custom/starComment02/starComment02.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ef677e8cc6582adee24c98bf21710a03ee8a1449 GIT binary patch literal 953 zcmah|&ubGw6t3c-EJYMjJ$P^wLK8|dGn<(tD<$Mt(-zYR+G*ug=8Q$RheK`{tYP{rcWcvQ=+naF!U!&tKks zG)#a1?`#`0GqB0RuG|6`A=n6dk_p)8Ig-_x%RN>qMN%;5jxl&L{Z$x8X1@Ijq4xN~ zk=c4r&*hFkO-xSgC#oL~$w9)jBk^tW?e~YmP8=N5+UrA-C_me~f2R5P;)A_w+fTb^ zFZ~$1a^bvLew5n3RoE)OxW4t~_V^mOJa%<8TQykdos?6aZjX%GT)Df$V9V(;xX8S~ zsq(=(Qn%Eiph(P3XtRj-h07u}QiF$5e=xv`VwaS`n!;EpBcMmORVJZMAouHDSJw43 z{X~{wJ)H=)`yHu^YXrlp6R{yY&w9H|2Cf5VLnT!ZcHvqOR>CMaJ(o(Sd3BjT^XfSw z)ly%zfZ@%+i`Mn1_U0&r#zJb2bb7oylpu=toga}~f_r_JiBzz{2J$7KS(?RWroB{Y zwda>tz;hEJlra%5fFT3S3EtlUORHcbRherwGrLSg0S`CQX;@RMm&&iJ{~=Ysp@UEn zVN6LLqiK|zLTD-t7rFOO!f2*}V7`Gs!B8!n7|2taqreBJm}w~`w1Mz9hOkm2hUJQC zkuePa1tU2nevC&7#Stcj6ZDwSPoW*$W1s+S&Lz Date: Tue, 1 Aug 2017 15:58:51 +0300 Subject: [PATCH 28/46] Add test for null keys in PdfDictionary from c# pull request DEV-1862 --- .../itextpdf/text/pdf/PdfDictionaryTest.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 itext/src/test/java/com/itextpdf/text/pdf/PdfDictionaryTest.java diff --git a/itext/src/test/java/com/itextpdf/text/pdf/PdfDictionaryTest.java b/itext/src/test/java/com/itextpdf/text/pdf/PdfDictionaryTest.java new file mode 100644 index 0000000000..a03625aa59 --- /dev/null +++ b/itext/src/test/java/com/itextpdf/text/pdf/PdfDictionaryTest.java @@ -0,0 +1,24 @@ +package com.itextpdf.text.pdf; + +import org.junit.Assert; +import org.junit.Test; + +public class PdfDictionaryTest { + @Test + public void pdfDictionaryGetReturnsNullIfKeyIsNull() { + PdfDictionary dictionary = new PdfDictionary(); + + PdfObject value = dictionary.get(null); + + Assert.assertNull(value); + } + + @Test + public void pdfDictionaryContainsReturnsFalseIfKeyIsNull() { + PdfDictionary dictionary = new PdfDictionary(); + + boolean contained = dictionary.contains(null); + + Assert.assertFalse(contained); + } +} From ad38371c396ac5ffbfb28056809e8ffaa5a18ccd Mon Sep 17 00:00:00 2001 From: Valera Goman Date: Thu, 27 Jul 2017 18:07:08 +0300 Subject: [PATCH 29/46] Prevent XXE-vulnerability DEV-1863 --- .../com/itextpdf/testutils/CompareTool.java | 15 +++++++++++++++ .../java/com/itextpdf/text/pdf/XfaForm.java | 9 +++++++++ .../com/itextpdf/text/pdf/XfaXmlLocator.java | 5 +++++ .../com/itextpdf/text/xml/xmp/XmpReader.java | 10 ++++++++++ .../com/itextpdf/text/zugferd/InvoiceDOM.java | 18 ++++++++++++++++-- 5 files changed, 55 insertions(+), 2 deletions(-) diff --git a/itext/src/main/java/com/itextpdf/testutils/CompareTool.java b/itext/src/main/java/com/itextpdf/testutils/CompareTool.java index 4d982ccd5c..ca688a8161 100644 --- a/itext/src/main/java/com/itextpdf/testutils/CompareTool.java +++ b/itext/src/main/java/com/itextpdf/testutils/CompareTool.java @@ -79,6 +79,7 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; +import java.io.StringReader; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; @@ -91,6 +92,7 @@ import java.util.StringTokenizer; import java.util.TreeSet; +import javax.xml.XMLConstants; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; @@ -104,6 +106,8 @@ import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; +import org.xml.sax.EntityResolver; +import org.xml.sax.InputSource; import org.xml.sax.SAXException; /** @@ -375,6 +379,9 @@ public void writeReportToXml(OutputStream stream) throws ParserConfigurationExce xmlReport.appendChild(root); TransformerFactory tFactory = TransformerFactory.newInstance(); + try { + tFactory.setAttribute(XMLConstants.FEATURE_SECURE_PROCESSING, true); + } catch (Exception exc) {} Transformer transformer = tFactory.newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); DOMSource source = new DOMSource(xmlReport); @@ -1193,6 +1200,7 @@ public boolean compareXmls(byte[] xml1, byte[] xml2) throws ParserConfigurationE dbf.setIgnoringElementContentWhitespace(true); dbf.setIgnoringComments(true); DocumentBuilder db = dbf.newDocumentBuilder(); + db.setEntityResolver(new SafeEmptyEntityResolver()); org.w3c.dom.Document doc1 = db.parse(new ByteArrayInputStream(xml1)); doc1.normalizeDocument(); @@ -1343,6 +1351,7 @@ public boolean compareXmls(String xml1, String xml2) throws ParserConfigurationE dbf.setIgnoringElementContentWhitespace(true); dbf.setIgnoringComments(true); DocumentBuilder db = dbf.newDocumentBuilder(); + db.setEntityResolver(new SafeEmptyEntityResolver()); org.w3c.dom.Document doc1 = db.parse(new File(xml1)); doc1.normalizeDocument(); @@ -1486,5 +1495,11 @@ public void renderImage(ImageRenderInfo renderInfo) { } + private static class SafeEmptyEntityResolver implements EntityResolver { + public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException { + return new InputSource(new StringReader("")); + } + } + } diff --git a/itext/src/main/java/com/itextpdf/text/pdf/XfaForm.java b/itext/src/main/java/com/itextpdf/text/pdf/XfaForm.java index d68f1cdb7d..61aa66d545 100644 --- a/itext/src/main/java/com/itextpdf/text/pdf/XfaForm.java +++ b/itext/src/main/java/com/itextpdf/text/pdf/XfaForm.java @@ -52,6 +52,7 @@ import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; +import java.io.StringReader; import java.util.ArrayList; import java.util.Collection; import java.util.EmptyStackException; @@ -65,6 +66,7 @@ import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; +import org.xml.sax.EntityResolver; import org.xml.sax.InputSource; import org.xml.sax.SAXException; @@ -141,6 +143,7 @@ else if (xfa instanceof PRStream) { DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance(); fact.setNamespaceAware(true); DocumentBuilder db = fact.newDocumentBuilder(); + db.setEntityResolver(new SafeEmptyEntityResolver()); domDocument = db.parse(new ByteArrayInputStream(bout.toByteArray())); extractNodes(); } @@ -1159,6 +1162,7 @@ public void fillXfaForm(InputSource is, boolean readOnly) throws IOException { DocumentBuilder db; try { db = dbf.newDocumentBuilder(); + db.setEntityResolver(new SafeEmptyEntityResolver()); Document newdoc = db.parse(is); fillXfaForm(newdoc.getDocumentElement(), readOnly); } catch (ParserConfigurationException e) { @@ -1223,5 +1227,10 @@ private Node getFirstElementNode(Node src) { return result; } + private static class SafeEmptyEntityResolver implements EntityResolver { + public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException { + return new InputSource(new StringReader("")); + } + } } diff --git a/itext/src/main/java/com/itextpdf/text/pdf/XfaXmlLocator.java b/itext/src/main/java/com/itextpdf/text/pdf/XfaXmlLocator.java index 860b8e5e36..84bb0a64a3 100644 --- a/itext/src/main/java/com/itextpdf/text/pdf/XfaXmlLocator.java +++ b/itext/src/main/java/com/itextpdf/text/pdf/XfaXmlLocator.java @@ -48,6 +48,7 @@ import org.w3c.dom.Document; import org.xml.sax.SAXException; +import javax.xml.XMLConstants; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; @@ -101,6 +102,10 @@ public void setDocument(Document document) throws IOException, DocumentException ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); TransformerFactory tf = TransformerFactory.newInstance(); + try { + tf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); + } catch (Exception exc) {} + Transformer trans = tf.newTransformer(); //Convert Document to byte[] to save to PDF diff --git a/itext/src/main/java/com/itextpdf/text/xml/xmp/XmpReader.java b/itext/src/main/java/com/itextpdf/text/xml/xmp/XmpReader.java index ed789a7721..b04daa804e 100644 --- a/itext/src/main/java/com/itextpdf/text/xml/xmp/XmpReader.java +++ b/itext/src/main/java/com/itextpdf/text/xml/xmp/XmpReader.java @@ -46,6 +46,7 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.io.StringReader; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; @@ -55,6 +56,8 @@ import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; +import org.xml.sax.EntityResolver; +import org.xml.sax.InputSource; import org.xml.sax.SAXException; import com.itextpdf.text.ExceptionConverter; @@ -96,6 +99,7 @@ public XmpReader(byte[] bytes) throws SAXException, IOException { DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance(); fact.setNamespaceAware(true); DocumentBuilder db = fact.newDocumentBuilder(); + db.setEntityResolver(new SafeEmptyEntityResolver()); ByteArrayInputStream bais = new ByteArrayInputStream(bytes); domDocument = db.parse(bais); } catch (ParserConfigurationException e) { @@ -219,4 +223,10 @@ public byte[] serializeDoc() throws IOException { fout.close(); return fout.toByteArray(); } + + private static class SafeEmptyEntityResolver implements EntityResolver { + public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException { + return new InputSource(new StringReader("")); + } + } } diff --git a/pdfa/src/main/java/com/itextpdf/text/zugferd/InvoiceDOM.java b/pdfa/src/main/java/com/itextpdf/text/zugferd/InvoiceDOM.java index e727bb0163..4e452e8121 100644 --- a/pdfa/src/main/java/com/itextpdf/text/zugferd/InvoiceDOM.java +++ b/pdfa/src/main/java/com/itextpdf/text/zugferd/InvoiceDOM.java @@ -64,8 +64,10 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; +import java.io.StringReader; import java.util.Date; +import javax.xml.XMLConstants; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; @@ -82,6 +84,8 @@ import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; +import org.xml.sax.EntityResolver; +import org.xml.sax.InputSource; import org.xml.sax.SAXException; /** @@ -121,8 +125,9 @@ public InvoiceDOM(BasicProfile data) // loading the XML template DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); + docBuilder.setEntityResolver(new SafeEmptyEntityResolver()); InputStream is = StreamUtil.getResourceStream("com/itextpdf/text/zugferd/zugferd-template.xml"); - doc = docBuilder.parse(is); + doc = docBuilder.parse(is); // importing the data importData(doc, data); } @@ -1161,11 +1166,14 @@ protected void importLineItemBasic(Element parent, public byte[] toXML() throws TransformerException { removeEmptyNodes(doc); TransformerFactory transformerFactory = TransformerFactory.newInstance(); + try { + transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); + } catch (Exception exc) {} Transformer transformer = transformerFactory.newTransformer(); transformer.setOutputProperty(OutputKeys.METHOD, "xml"); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); - DOMSource source = new DOMSource(doc); + DOMSource source = new DOMSource(doc); ByteArrayOutputStream out = new ByteArrayOutputStream(); Result result = new StreamResult(out); transformer.transform(source, result); @@ -1203,4 +1211,10 @@ protected void check(String s, String message) throws DataIncompleteException { if (s == null || s.trim().length() == 0) throw new DataIncompleteException(message); } + + private static class SafeEmptyEntityResolver implements EntityResolver { + public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException { + return new InputSource(new StringReader("")); + } + } } From c494099ff8281ceb8c470de14ec7093ef3e8e32e Mon Sep 17 00:00:00 2001 From: Alexey Subach Date: Thu, 3 Aug 2017 11:47:25 +0300 Subject: [PATCH 30/46] Replace remote image URL with static image from resources --- .../background_image_div01.html | 2 +- .../div/background_image_div01/itext.png | Bin 0 -> 2206 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 xmlworker/src/test/resources/com/itextpdf/tool/xml/examples/css/background/background_image/div/background_image_div01/itext.png diff --git a/xmlworker/src/test/resources/com/itextpdf/tool/xml/examples/css/background/background_image/div/background_image_div01/background_image_div01.html b/xmlworker/src/test/resources/com/itextpdf/tool/xml/examples/css/background/background_image/div/background_image_div01/background_image_div01.html index 8c05c59e60..cd7488b2ac 100644 --- a/xmlworker/src/test/resources/com/itextpdf/tool/xml/examples/css/background/background_image/div/background_image_div01/background_image_div01.html +++ b/xmlworker/src/test/resources/com/itextpdf/tool/xml/examples/css/background/background_image/div/background_image_div01/background_image_div01.html @@ -6,7 +6,7 @@ texttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttextvtexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttext -
+
image from web texttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttext
diff --git a/xmlworker/src/test/resources/com/itextpdf/tool/xml/examples/css/background/background_image/div/background_image_div01/itext.png b/xmlworker/src/test/resources/com/itextpdf/tool/xml/examples/css/background/background_image/div/background_image_div01/itext.png new file mode 100644 index 0000000000000000000000000000000000000000..d961f4efacb9eef8aeb26892f5aa3404a7aec220 GIT binary patch literal 2206 zcmV;P2x0e$P)|H%_+h!2`;L-^F3=}K{QD$h{YfI-V98SO+n;hzxVAvEOvKhvzd$W^>RP(FI|7M{4w>% z@a^fBiOYzefBn5B=LsAU19lw#`}ZHytUu_lOIz$oydaN%CjI=|weiI>qfDitdNEF;uf^GSu zFB{BZ7JDlElO(H0_=Yy9EqHUm7Oiy%98!ZPor%a|O(IzYP!qRW668i-5`LlyYKt+W zhWcb6{=A7KQuh}Jvb$UWb+B+~ID_M)R3*;8S!k-_gl z`u%`(T*{;BM6iMArgsJ;tMR{Ex}6$BYv~}OO>OM-_Vf!D%{@(}Lf_kKst5$E?1^-I zB4tul6KqR#-bFJ%eiwYJ~qV*?4%5qNIraEz7`CjOPpJ}qy_VgqhRbWr( zw||O$+o_0TLy0`k3{QKnAyFxRJ7yM}YD-)rhw`pSd7;j=4lU&*_yuJ;U@Jq)R7IqS zh-$EozW4QVKelB+-+h(Z4$?{vm-r|AxaVxEWRObt%Fu6x*dv#%k{}J49#%+3)QPoT zrktYv?$}tT75L^TS&Li<(N?s(<3g+IPQ3wk$Wz-52?pTLAB<0pjILiq{cRIJbAi`y zrhMy>;(kcsV0jm@l|ba_4@6=|#u*NRmWibGmc$ZCq-065_}=fl9imNmFr&_3c^9$m zgo|jWW89+y=eUxaWxYHRmDKOzb6NHiKwpQj4w2rrfDtW0JQMD~J!{~WH*;~%;0|S1 zlJ;jI*tS1Fgg1sH3mx_o9{(oEl4uE{Dzcp-jYc}{Z0kf(b~Q%&pH_b>i{yqm5?oNLX9%CFU$hyusuyXPJ$6FLDYe8k!}Z)ep>;u0Q6f_65Kgk9rj#w zSduIwT0#SvvVe#Rsq6tQ@+u`BWSOpzlWdW8_oVIMz}e}ime+J+dgzj9i84tRtrAC$ zeSVikgopCfTsN)Pfg#~e+;cft5$S%OO($X{0i^?CJq$^*D#DE_kP}8SCF9&x_q;!J z*c1ObIwV;VEwNrS8#)fX)8eB@ETu!r!2(I!%fgcoe0$rb_fk3_ticHj+3i(HR41Bf zDEe*R+19_#qqOEV1S8sQKtK~T3(`6enMhHsEpgtEBuk^gdU_0`_ z!Idk&Is`XL@xa33|@bLa=cI?kiVJ1Ma?LDwa=}t=({(Akh*;sWL%X z4Y(5x$3eK(4aXle4aW%*EkTq`vLL;QD`pVl((YOXH5>;D85l|EL5-FmUI?}pgAfx9 z$3tg7FcRlvr!Pjd1W`J{1_cd5JkK)-v7mvGal`Qe^;;4xL6kwTEolVv;B0kRbn*&B zcg=;lfsyxypAoXinEEZH10n%w0?q~Tf^nW^-^O#mVt@#H(p<(A1vMOx2S&#Aw*$Hr ziFR8Fwg}yDQ*85%*s}CFX!;;Tks*Qt2SygMQBXP{>P#eX{2ND-T?VB4BZ>AkB#TYU zd=R30ZopmYAjAR(Mxu8Ddm)o(w}xZ`iDZfN^f%Q`qC;Ay#@9lyQB}hbMZZO4``+2< zx4Vv=<4Ckygs$VfFm)uRh-$6u2|_#a1Xr5|+(`8?H_ZR_SY(X6IABz33u?6W1sy#b z(ry$61~Ngf&Nqxiz8J~_7kL}sfVipEGNSzfn>NdSO82Y{pu+}DxhropFtYCc*QnN^ zAlk_$7+&s_YK;H6A=hT&2upjdV^8!Qcvqzkn`1pdzYX2``fc5#*-?|e$D6mOU$9H3 z={g{=ChX>YqxaMS1ILEnYC@EW6sw3wgX>4Ojx`t3=E?|vNIf7ri=32TlsUaS^WPF2b#l?6^S=6+6@8oY7Atm1+#c?j2{_I&V`D*RZOC z0EyB%3sUJPx1fFDreUrf<0AbwE?Jv2mx=;eP=J07}BBB2uQ#TmS$707*qoM6N<$f*`UNZ~y=R literal 0 HcmV?d00001 From d05698783b223c0004746eddd79921cd5dc527e8 Mon Sep 17 00:00:00 2001 From: jenkins Date: Thu, 3 Aug 2017 10:47:52 +0200 Subject: [PATCH 31/46] Add missing copyright headers --- .../text/pdf/FreeTextFlatteningTest.java | 42 +++++++++++++++++++ .../itextpdf/text/pdf/PdfDictionaryTest.java | 42 +++++++++++++++++++ 2 files changed, 84 insertions(+) diff --git a/itext/src/test/java/com/itextpdf/text/pdf/FreeTextFlatteningTest.java b/itext/src/test/java/com/itextpdf/text/pdf/FreeTextFlatteningTest.java index 46fccba705..5a0ad405e6 100644 --- a/itext/src/test/java/com/itextpdf/text/pdf/FreeTextFlatteningTest.java +++ b/itext/src/test/java/com/itextpdf/text/pdf/FreeTextFlatteningTest.java @@ -1,3 +1,45 @@ +/* + This file is part of the iText (R) project. + Copyright (c) 1998-2017 iText Group NV + Authors: iText Software. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License version 3 + as published by the Free Software Foundation with the addition of the + following permission added to Section 15 as permitted in Section 7(a): + FOR ANY PART OF THE COVERED WORK IN WHICH THE COPYRIGHT IS OWNED BY + ITEXT GROUP. ITEXT GROUP DISCLAIMS THE WARRANTY OF NON INFRINGEMENT + OF THIRD PARTY RIGHTS + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Affero General Public License for more details. + You should have received a copy of the GNU Affero General Public License + along with this program; if not, see http://www.gnu.org/licenses or write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA, 02110-1301 USA, or download the license from the following URL: + http://itextpdf.com/terms-of-use/ + + The interactive user interfaces in modified source and object code versions + of this program must display Appropriate Legal Notices, as required under + Section 5 of the GNU Affero General Public License. + + In accordance with Section 7(b) of the GNU Affero General Public License, + a covered work must retain the producer line in every PDF that is created + or manipulated using iText. + + You can be released from the requirements of the license by purchasing + a commercial license. Buying such a license is mandatory as soon as you + develop commercial activities involving the iText software without + disclosing the source code of your own applications. + These activities include: offering paid services to customers as an ASP, + serving PDFs on the fly in a web application, shipping iText with a closed + source product. + + For more information, please contact iText Software Corp. at this + address: sales@itextpdf.com + */ package com.itextpdf.text.pdf; import com.itextpdf.testutils.CompareTool; diff --git a/itext/src/test/java/com/itextpdf/text/pdf/PdfDictionaryTest.java b/itext/src/test/java/com/itextpdf/text/pdf/PdfDictionaryTest.java index a03625aa59..e58ca2c9c3 100644 --- a/itext/src/test/java/com/itextpdf/text/pdf/PdfDictionaryTest.java +++ b/itext/src/test/java/com/itextpdf/text/pdf/PdfDictionaryTest.java @@ -1,3 +1,45 @@ +/* + This file is part of the iText (R) project. + Copyright (c) 1998-2017 iText Group NV + Authors: iText Software. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License version 3 + as published by the Free Software Foundation with the addition of the + following permission added to Section 15 as permitted in Section 7(a): + FOR ANY PART OF THE COVERED WORK IN WHICH THE COPYRIGHT IS OWNED BY + ITEXT GROUP. ITEXT GROUP DISCLAIMS THE WARRANTY OF NON INFRINGEMENT + OF THIRD PARTY RIGHTS + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Affero General Public License for more details. + You should have received a copy of the GNU Affero General Public License + along with this program; if not, see http://www.gnu.org/licenses or write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA, 02110-1301 USA, or download the license from the following URL: + http://itextpdf.com/terms-of-use/ + + The interactive user interfaces in modified source and object code versions + of this program must display Appropriate Legal Notices, as required under + Section 5 of the GNU Affero General Public License. + + In accordance with Section 7(b) of the GNU Affero General Public License, + a covered work must retain the producer line in every PDF that is created + or manipulated using iText. + + You can be released from the requirements of the license by purchasing + a commercial license. Buying such a license is mandatory as soon as you + develop commercial activities involving the iText software without + disclosing the source code of your own applications. + These activities include: offering paid services to customers as an ASP, + serving PDFs on the fly in a web application, shipping iText with a closed + source product. + + For more information, please contact iText Software Corp. at this + address: sales@itextpdf.com + */ package com.itextpdf.text.pdf; import org.junit.Assert; From 691a097874b21c5e905d6bfa91e0411eef689ba0 Mon Sep 17 00:00:00 2001 From: Vladimir Osipchuk Date: Thu, 3 Aug 2017 13:41:03 +0300 Subject: [PATCH 32/46] Add new cleanup test. DEV-1879 --- .../pdf/pdfcleanup/PdfCleanUpProcessorTest.java | 3 +++ .../text/pdf/pdfcleanup/cmp_helloHelvetica.pdf | Bin 0 -> 1154 bytes .../text/pdf/pdfcleanup/helloHelvetica.pdf | Bin 0 -> 1029 bytes 3 files changed, 3 insertions(+) create mode 100644 xtra/src/test/resources/com/itextpdf/text/pdf/pdfcleanup/cmp_helloHelvetica.pdf create mode 100644 xtra/src/test/resources/com/itextpdf/text/pdf/pdfcleanup/helloHelvetica.pdf diff --git a/xtra/src/test/java/com/itextpdf/text/pdf/pdfcleanup/PdfCleanUpProcessorTest.java b/xtra/src/test/java/com/itextpdf/text/pdf/pdfcleanup/PdfCleanUpProcessorTest.java index dd75b35988..24a2368293 100644 --- a/xtra/src/test/java/com/itextpdf/text/pdf/pdfcleanup/PdfCleanUpProcessorTest.java +++ b/xtra/src/test/java/com/itextpdf/text/pdf/pdfcleanup/PdfCleanUpProcessorTest.java @@ -89,6 +89,7 @@ public static Collection data() { List cleanUpLocations2 = Arrays.asList(new PdfCleanUpLocation(1, new Rectangle(97f, 405f, 480f, 445f), BaseColor.GRAY)); List cleanUpLocations3 = Arrays.asList(new PdfCleanUpLocation(1, new Rectangle(97f, 605f, 480f, 645f), BaseColor.GRAY)); List cleanUpLocations4 = Arrays.asList(new PdfCleanUpLocation(1, new Rectangle(212, 394, 212 + 186, 394 + 170), null)); + List cleanUpLocations5= Arrays.asList(new PdfCleanUpLocation(1, new Rectangle(0f, 0f, 595f, 680f), BaseColor.GRAY)); return Arrays.asList(new Object[][] {{"page229.pdf", "page229_01.pdf", "cmp_page229_01.pdf", cleanUpLocations1}, {"page229-modified-Tc-Tw.pdf", "page229-modified-Tc-Tw.pdf", "cmp_page229-modified-Tc-Tw.pdf", cleanUpLocations1}, @@ -118,6 +119,8 @@ public static Collection data() { {"absentICentry.pdf", "absentICentry.pdf", "cmp_absentICentry.pdf", null}, {"lotOfDashes.pdf", "lotOfDashes.pdf", "cmp_lotOfDashes.pdf", null}, {"clipPathReduction.pdf", "clipPathReduction.pdf", "cmp_clipPathReduction.pdf", cleanUpLocations4}, + {"helloHelvetica.pdf", "helloHelvetica.pdf", "cmp_helloHelvetica.pdf", cleanUpLocations5}, + }); } diff --git a/xtra/src/test/resources/com/itextpdf/text/pdf/pdfcleanup/cmp_helloHelvetica.pdf b/xtra/src/test/resources/com/itextpdf/text/pdf/pdfcleanup/cmp_helloHelvetica.pdf new file mode 100644 index 0000000000000000000000000000000000000000..84fc609ba5a537d1e94d1d3b3f68f9f32b96a35c GIT binary patch literal 1154 zcmbVLO=uHA6h4TG>ko=YFC!97kYr|eGrNh#V47{L*q@Nb_E3A6>`vO1WT)&-YU+TZb=^FQ^dkrz32zAsw@jNH7%|w#oXrTF)Y^!m&zy!$L&z*J6DWb>gZ;VUV9!7q z+|>|5ahVOYI8XVkF#-CAz`1DdRIxWcN&P^`Iu|<*>dbMgE_Fa75VBkMX8}&&gsS}y zV+@vEUZc_O`UIZ}(;L8IcB4)`9?NDG>N(Ontz%&?^~U%(5VpXATjSJ+g_>~8qBe7A zHXCqZV_j*^j9#5r9-Z84{aU*+zg+lv{Y2k^qBXa7VgF9`^5L1sTVK4ruzN^*`f#|f z@Z)Oi6wZ(51{rF&MX64Y__b=$pO6*c(_ZSMyg6)ugC8PwMEB(%fZ^l4Q=z*Iz^h6@-N>ljo) zJEjT`#+#2=eOb@yjDKKG)F%D#b`gQh4>+oonDHIl~ZY(~Qxb}G1Hn2v30rd~BF)fA#; jk|3(9x}B9iN7m;vzG2*yfD@muo0Li#N+i-fP*DB=Sq)}; literal 0 HcmV?d00001 diff --git a/xtra/src/test/resources/com/itextpdf/text/pdf/pdfcleanup/helloHelvetica.pdf b/xtra/src/test/resources/com/itextpdf/text/pdf/pdfcleanup/helloHelvetica.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d42e7c258813f10da5b8fd6ea4a8750d7b330a31 GIT binary patch literal 1029 zcmah|zi-n(6s7}GWicVxPeLIHReI-hY$vFSlqO9R^;eXnFtioA+L!by#~04$k|H57 zbts6j6DtD?0}~Yz3x5C-ENrM0iGPDT*KMFkaD#n*_r34F_r2##yWS|6v#yc(e){Q) zVFLvC_O3BE2OBJqRKP|+B&}1A`xGwIa3FU;$*NQ$DJU5l>}>YIRP*T7k$*dTXZOH= zcziIrDyFWy|91U@K|?=fS351HI1yFjp`@XVfEL<;E7WIXo{u+>`n1b7C>8M*Y!jg{ z04Ikyv7Kjg1!x$aV`oTkHG3Z zu$ikawwDWgR76VFW)I6o;^`*~hD{pmQOP_4 z7eX~Ys%m(jh1D=(7vJ4@TWYJdi)QjndNkqHJxqCPJXTFL;S%$s4LuT_t+R}z9g~!? zpnU@Y*HA^K3ploI*`N>3W4P>s)vAMyIaGGHErK17C`8G(9a^Gx*>kZ|#H4JOEB{Aq!B*JkK#y7nb~snw iB-<`~Oo6NX$Ry1z{MmdXl0?YFBNt;MlUZ167{35`tt&PF literal 0 HcmV?d00001 From 4dabef86e78ec1b37971f47fd207a35d035082dd Mon Sep 17 00:00:00 2001 From: Ilya Idamkin Date: Thu, 3 Aug 2017 12:39:12 +0300 Subject: [PATCH 33/46] Throw exception on adding null key to PdfDictionary It doesn't make sense from pdf point to have dictionary with null key. DEV-1862 --- .../com/itextpdf/text/pdf/PdfDictionary.java | 5 +++ .../com/itextpdf/text/l10n/error/en.lng | 1 + .../com/itextpdf/text/l10n/error/nl.lng | 1 + .../itextpdf/text/pdf/PdfDictionaryTest.java | 31 +++++++++++++++++++ 4 files changed, 38 insertions(+) diff --git a/itext/src/main/java/com/itextpdf/text/pdf/PdfDictionary.java b/itext/src/main/java/com/itextpdf/text/pdf/PdfDictionary.java index 438c07eec6..10e0d2cdb0 100644 --- a/itext/src/main/java/com/itextpdf/text/pdf/PdfDictionary.java +++ b/itext/src/main/java/com/itextpdf/text/pdf/PdfDictionary.java @@ -43,6 +43,7 @@ */ package com.itextpdf.text.pdf; +import com.itextpdf.text.error_messages.MessageLocalization; import com.itextpdf.text.pdf.internal.PdfIsoKeys; import java.io.IOException; @@ -188,6 +189,8 @@ public String toString() { * key */ public void put(final PdfName key, final PdfObject object) { + if (key == null) + throw new IllegalArgumentException(MessageLocalization.getComposedMessage("key.is.null")); if (object == null || object.isNull()) hashMap.remove(key); else @@ -207,6 +210,8 @@ public void put(final PdfName key, final PdfObject object) { * key */ public void putEx(final PdfName key, final PdfObject value) { + if (key == null) + throw new IllegalArgumentException(MessageLocalization.getComposedMessage("key.is.null")); if (value == null) return; put(key, value); diff --git a/itext/src/main/resources/com/itextpdf/text/l10n/error/en.lng b/itext/src/main/resources/com/itextpdf/text/l10n/error/en.lng index 2096de6f30..6d42f42862 100644 --- a/itext/src/main/resources/com/itextpdf/text/l10n/error/en.lng +++ b/itext/src/main/resources/com/itextpdf/text/l10n/error/en.lng @@ -274,6 +274,7 @@ it.is.not.possible.to.free.reader.in.merge.fields.mode=It is not possible to fre java.awt.image.fetch.aborted.or.errored=java.awt.Image fetch aborted or errored java.awt.image.interrupted.waiting.for.pixels=java.awt.Image Interrupted waiting for pixels! jpeg2000.enumerated.colour.space.19.(CIEJab).shall.not.be.used=JPEG2000 enumerated colour space 19 (CIEJab) shall not be used. +key.is.null=key is null. keyword.encrypt.shall.not.be.used.in.the.trailer.dictionary=Keyword Encrypt shall not be used in the trailer dictionary. lab.cs.black.point=The BlackPoint entry in Lab color space could be only an array of three numbers [XB YB ZB]. All three of these numbers shall be non-negative. Default value: [0.0 0.0 0.0]. lab.cs.range=The Range entry in Lab color space could be only an array of four numbers [amin amax bmin bmax]. Default value: [-100 100 -100 100]. diff --git a/itext/src/main/resources/com/itextpdf/text/l10n/error/nl.lng b/itext/src/main/resources/com/itextpdf/text/l10n/error/nl.lng index 71dbc34123..6d58c2e11d 100644 --- a/itext/src/main/resources/com/itextpdf/text/l10n/error/nl.lng +++ b/itext/src/main/resources/com/itextpdf/text/l10n/error/nl.lng @@ -274,6 +274,7 @@ it.is.not.possible.to.free.reader.in.merge.fields.mode=freeReader is niet mogeli java.awt.image.fetch.aborted.or.errored=Ophalen van java.awt.Image afgebroken of misgelopen. java.awt.image.interrupted.waiting.for.pixels=java.awt.Image onderbroken; aan het wachten op pixels! jpeg2000.enumerated.colour.space.19.(CIEJab).shall.not.be.used=JPEG2000 enumerated colour space 19 (CIEJab) mag niet gebruikt worden. +key.is.null=sleutel is nul. keyword.encrypt.shall.not.be.used.in.the.trailer.dictionary=Keyword Encrypt mag niet gebruikt worden in de trailer dictionary. lab.cs.black.point=De BlackPoint entry in Lab color space mag enkel een array zijn van drie getallen [XB YB ZB]. Al deze getallen moeten niet-negatief zijn. Standaardwaarde: [0.0 0.0 0.0]. lab.cs.range=De Range entry in Lab color space mag enkel een array zijn van vier getallen [amin amax bmin bmax]. Standaardwaarde: [-100 100 -100 100]. diff --git a/itext/src/test/java/com/itextpdf/text/pdf/PdfDictionaryTest.java b/itext/src/test/java/com/itextpdf/text/pdf/PdfDictionaryTest.java index e58ca2c9c3..5c00ed4a98 100644 --- a/itext/src/test/java/com/itextpdf/text/pdf/PdfDictionaryTest.java +++ b/itext/src/test/java/com/itextpdf/text/pdf/PdfDictionaryTest.java @@ -63,4 +63,35 @@ public void pdfDictionaryContainsReturnsFalseIfKeyIsNull() { Assert.assertFalse(contained); } + + @Test + public void pdfDictionaryRemoveDoesNothingIfKeyIsNull() { + PdfDictionary dictionary = new PdfDictionary(); + + dictionary.remove(null); + } + + @Test + public void pdfDictionaryPutThrowsExceptionIfKeyIsNull() { + PdfDictionary dictionary = new PdfDictionary(); + + try { + dictionary.put(null, new PdfName("null")); + Assert.fail("IllegalArgumentException expected"); + } catch (IllegalArgumentException e) { + Assert.assertEquals(e.getMessage(), "key is null."); + } + } + + @Test + public void pdfDictionaryPutExThrowsExceptionIfKeyIsNull() { + PdfDictionary dictionary = new PdfDictionary(); + + try { + dictionary.putEx(null, new PdfName("null")); + Assert.fail("IllegalArgumentException expected"); + } catch (IllegalArgumentException e) { + Assert.assertEquals(e.getMessage(), "key is null."); + } + } } From 31e2a202a30a0ed18600ceae9f355ba7b0a34992 Mon Sep 17 00:00:00 2001 From: Ilya Idamkin Date: Fri, 4 Aug 2017 12:39:36 +0300 Subject: [PATCH 34/46] Fix string bounds calculations with fractional metrics disabled The whole point of disabled fractional metrics is to round up scaled font metrics to integers, so calculating bounds in not original scale and then scaling it down didn't make sense. DEV-1881 --- .../java/com/itextpdf/awt/PdfGraphics2D.java | 31 +++++++++++++------ 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/itext/src/main/java/com/itextpdf/awt/PdfGraphics2D.java b/itext/src/main/java/com/itextpdf/awt/PdfGraphics2D.java index 42540f217c..6cfbd6202f 100644 --- a/itext/src/main/java/com/itextpdf/awt/PdfGraphics2D.java +++ b/itext/src/main/java/com/itextpdf/awt/PdfGraphics2D.java @@ -507,21 +507,32 @@ public void drawString(String s, float x, float y) { double width = 0; if (font.getSize2D() > 0) { - float scale = 1000 / font.getSize2D(); - Font derivedFont = font.deriveFont(AffineTransform.getScaleInstance(scale, scale)); - width = derivedFont.getStringBounds(s, getFontRenderContext()).getWidth(); - if (derivedFont.isTransformed()) - width /= scale; + if (RenderingHints.VALUE_FRACTIONALMETRICS_OFF.equals(getRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS))) { + width = font.getStringBounds(s, getFontRenderContext()).getWidth(); + } else { + float scale = 1000 / font.getSize2D(); + Font derivedFont = font.deriveFont(AffineTransform.getScaleInstance(scale, scale)); + width = derivedFont.getStringBounds(s, getFontRenderContext()).getWidth(); + if (derivedFont.isTransformed()) + width /= scale; + } } // if the hyperlink flag is set add an action to the text Object url = getRenderingHint(HyperLinkKey.KEY_INSTANCE); if (url != null && !url.equals(HyperLinkKey.VALUE_HYPERLINKKEY_OFF)) { - float scale = 1000 / font.getSize2D(); - Font derivedFont = font.deriveFont(AffineTransform.getScaleInstance(scale, scale)); - double height = derivedFont.getStringBounds(s, getFontRenderContext()).getHeight(); - if (derivedFont.isTransformed()) - height /= scale; + double height = 0; + if (font.getSize2D() > 0) { + if (RenderingHints.VALUE_FRACTIONALMETRICS_OFF.equals(getRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS))) { + height = font.getStringBounds(s, getFontRenderContext()).getHeight(); + } else { + float scale = 1000 / font.getSize2D(); + Font derivedFont = font.deriveFont(AffineTransform.getScaleInstance(scale, scale)); + height = derivedFont.getStringBounds(s, getFontRenderContext()).getHeight(); + if (derivedFont.isTransformed()) + height /= scale; + } + } double leftX = cb.getXTLM(); double leftY = cb.getYTLM(); PdfAction action = new PdfAction(url.toString()); From 184ebac3133b7a644e450435d0d4e6a0d6ce424c Mon Sep 17 00:00:00 2001 From: Ilya Idamkin Date: Fri, 4 Aug 2017 13:03:47 +0300 Subject: [PATCH 35/46] Make PdfGraphics2D more consistent with inner Graphics2D Note that RenderingHints may still be different for PdfGraphics2D and inner Graphics2D if someone explicitly gets rendering hints and will change then not through PdfGraphics2D. DEV-1881 --- .../java/com/itextpdf/awt/PdfGraphics2D.java | 44 +++++++++++-------- 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/itext/src/main/java/com/itextpdf/awt/PdfGraphics2D.java b/itext/src/main/java/com/itextpdf/awt/PdfGraphics2D.java index 6cfbd6202f..321a499206 100644 --- a/itext/src/main/java/com/itextpdf/awt/PdfGraphics2D.java +++ b/itext/src/main/java/com/itextpdf/awt/PdfGraphics2D.java @@ -202,14 +202,15 @@ private static final class Kid { private Graphics2D getDG2() { if (dg2 == null) { dg2 = new BufferedImage(2, 2, BufferedImage.TYPE_INT_RGB).createGraphics(); - dg2.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); - setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); - setRenderingHint(HyperLinkKey.KEY_INSTANCE, HyperLinkKey.VALUE_HYPERLINKKEY_OFF); + dg2.setRenderingHints(rhints); } return dg2; } - private PdfGraphics2D() {} + private PdfGraphics2D() { + setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); + setRenderingHint(HyperLinkKey.KEY_INSTANCE, HyperLinkKey.VALUE_HYPERLINKKEY_OFF); + } public PdfGraphics2D(PdfContentByte cb, final float width, final float height) { this(cb, width, height, null, false, false, 0); @@ -828,32 +829,33 @@ public void setStroke(Stroke s) { /** * Sets a rendering hint - * @param arg0 - * @param arg1 + * @param hintKey + * @param hintValue */ @Override - public void setRenderingHint(Key arg0, Object arg1) { - if (arg1 != null) { - rhints.put(arg0, arg1); + public void setRenderingHint(Key hintKey, Object hintValue) { + if (hintValue != null) { + rhints.put(hintKey, hintValue); } else { - if (arg0 instanceof HyperLinkKey) - { - rhints.put(arg0, HyperLinkKey.VALUE_HYPERLINKKEY_OFF); + if (hintKey instanceof HyperLinkKey) { + rhints.put(hintKey, HyperLinkKey.VALUE_HYPERLINKKEY_OFF); } - else - { - rhints.remove(arg0); + else { + rhints.remove(hintKey); } } + if (dg2 != null) { + dg2.setRenderingHint(hintKey, hintValue); + } } /** - * @param arg0 a key + * @param hintKey a key * @return the rendering hint */ @Override - public Object getRenderingHint(Key arg0) { - return rhints.get(arg0); + public Object getRenderingHint(Key hintKey) { + return rhints.get(hintKey); } /** @@ -863,6 +865,9 @@ public Object getRenderingHint(Key arg0) { public void setRenderingHints(Map hints) { rhints.clear(); rhints.putAll(hints); + if (dg2 != null) { + dg2.setRenderingHints(hints); + } } /** @@ -871,6 +876,9 @@ public void setRenderingHints(Map hints) { @Override public void addRenderingHints(Map hints) { rhints.putAll(hints); + if (dg2 != null) { + dg2.addRenderingHints(hints); + } } /** From af4fe6315bd702c65267f1f80697a8988780689b Mon Sep 17 00:00:00 2001 From: Samuel Huylebroeck Date: Tue, 8 Aug 2017 16:13:01 +0200 Subject: [PATCH 36/46] Port Datamatrix improvements from iText7 DEV-1913 --- itext/barcodeDataMatrix.pdf | Bin 0 -> 1544 bytes .../itextpdf/text/pdf/BarcodeDatamatrix.java | 770 +++++++++++++----- .../BarcodeDatamatrixTest.java | 303 +++++++ .../cmp_barcodeDataMatrix01.pdf | Bin 0 -> 3247 bytes .../cmp_barcodeDataMatrix02.pdf | Bin 0 -> 1256 bytes .../cmp_barcodeDataMatrix03.pdf | Bin 0 -> 1459 bytes .../cmp_barcodeDataMatrix04.pdf | Bin 0 -> 1448 bytes .../cmp_barcodeDataMatrix05.pdf | Bin 0 -> 2732 bytes .../cmp_barcodeDataMatrix06.pdf | Bin 0 -> 1467 bytes .../cmp_barcodeDataMatrix07.pdf | Bin 0 -> 3672 bytes .../cmp_barcodeDataMatrix08.pdf | Bin 0 -> 3268 bytes .../cmp_barcodeDataMatrix09.pdf | Bin 0 -> 5576 bytes .../cmp_barcodeDataMatrix10.pdf | Bin 0 -> 3920 bytes .../cmp_barcodeDataMatrix11.pdf | Bin 0 -> 3878 bytes .../cmp_barcodeDataMatrix12.pdf | Bin 0 -> 3247 bytes .../cmp_barcodeDataMatrix13.pdf | Bin 0 -> 3782 bytes 16 files changed, 872 insertions(+), 201 deletions(-) create mode 100644 itext/barcodeDataMatrix.pdf create mode 100644 itext/src/test/java/com/itextpdf/text/pdf/BarcodeDatamatrixTest/BarcodeDatamatrixTest.java create mode 100644 itext/src/test/resources/com/itextpdf/text/pdf/BarcodeDatamatrix/cmp_barcodeDataMatrix01.pdf create mode 100644 itext/src/test/resources/com/itextpdf/text/pdf/BarcodeDatamatrix/cmp_barcodeDataMatrix02.pdf create mode 100644 itext/src/test/resources/com/itextpdf/text/pdf/BarcodeDatamatrix/cmp_barcodeDataMatrix03.pdf create mode 100644 itext/src/test/resources/com/itextpdf/text/pdf/BarcodeDatamatrix/cmp_barcodeDataMatrix04.pdf create mode 100644 itext/src/test/resources/com/itextpdf/text/pdf/BarcodeDatamatrix/cmp_barcodeDataMatrix05.pdf create mode 100644 itext/src/test/resources/com/itextpdf/text/pdf/BarcodeDatamatrix/cmp_barcodeDataMatrix06.pdf create mode 100644 itext/src/test/resources/com/itextpdf/text/pdf/BarcodeDatamatrix/cmp_barcodeDataMatrix07.pdf create mode 100644 itext/src/test/resources/com/itextpdf/text/pdf/BarcodeDatamatrix/cmp_barcodeDataMatrix08.pdf create mode 100644 itext/src/test/resources/com/itextpdf/text/pdf/BarcodeDatamatrix/cmp_barcodeDataMatrix09.pdf create mode 100644 itext/src/test/resources/com/itextpdf/text/pdf/BarcodeDatamatrix/cmp_barcodeDataMatrix10.pdf create mode 100644 itext/src/test/resources/com/itextpdf/text/pdf/BarcodeDatamatrix/cmp_barcodeDataMatrix11.pdf create mode 100644 itext/src/test/resources/com/itextpdf/text/pdf/BarcodeDatamatrix/cmp_barcodeDataMatrix12.pdf create mode 100644 itext/src/test/resources/com/itextpdf/text/pdf/BarcodeDatamatrix/cmp_barcodeDataMatrix13.pdf diff --git a/itext/barcodeDataMatrix.pdf b/itext/barcodeDataMatrix.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4fadc31abc3bca401f1291fc08050fbe823cb887 GIT binary patch literal 1544 zcmah}drVtZ7$;a*xf;B%?vVxc45)xjx#yPNJ{Ti?tq*}x+v0FMvPuK7jDsx@HLl`6)66*3MNAemqb~mGJ&b{Y1izf*eCIpo zcg}ad^ZOmO&*9Y4wR%GR)6bW`C1?PF&~un*XrO|FF+{bu_8dkbi3$w#NOW&ksYLLycG8#(Ju7GgeZzi zfTo;$L_#8Ew|jy?C!27fkicOK?tHA+7nieW0@~#r2l}FMe2!mu0{4xw#U&B3eZ+&W zk7SlMY3hsnreEB#WBX9~UukeGXH|R|>mbkmeRQbv06Z~G?w-i}maiBsH<$eA=C`Ss z?GeRCAn7ElQ^agxU})(xI7IG_Ii4odpC~~ZWPi{q!kSbfn{%HkEPw9gNbOct%MELO z>0EmXW|lrqrwppaEooO%q~yM-mw}VCW&XTG6oJ&Iq?J&VUP#v{$c!aDdHM6PCIzcd zlE>%VZic45zu>#9RG&#o`ZCO2sp6z4w}{jj9W;rjjN0xGU51L^l}ot{qS+qx_JXO3C( z?;*Q?of&3{0+_g&U-n$lx{CAfQ@6A^p96mdEmFvG$alZL+(vtoo zRWY5~dT)HO)e26}Du|tu%W_n)(+wj9-E2a;P#uodQkd;&$e6(-0Y=B{py!z-*b818V*8DS-Kn_;U2N{nlM zc_;|!M_`@}pvY?nqrKCk<8Mv8`oc@miECr;kn`K-+vcyUW(v-{4`D#*S=9M*1#cGU zI_=MnCJc@P-aTsMSH* z2$oj>mnaOxfcH_*S#5Rsnzcue80Up(XH5-dmt`!;zC(VRYDYZ=K@&95dYYll8mOy+ zu&Rb?5x7kktlcRgqFw?5BO#}-V!*&KbqweQt1()>IW`bojTv=v0oTRMM!DeYVkTw- zmWCU#G&Gpju#(8~5hUV|HNZcKfKmR*1PS2!`zcSfR{*%Wvg-gH4Mwil2$B^*U4I|F6JrtX?j?cHP?$afubB 0) { int t = 129 + (position + 1) * 149 % 253 + 1; if (t > 254) @@ -227,66 +270,99 @@ private static boolean isDigit(int c) { return c >= '0' && c <= '9'; } - private static int asciiEncodation(byte[] text, int textOffset, int textLength, byte[] data, int dataOffset, int dataLength) { + // when symbolIndex is non-negative, textLength should equal 1. All other encodations behave the same way. + private static int asciiEncodation(byte[] text, int textOffset, int textLength, byte[] data, int dataOffset, int dataLength, int symbolIndex, int prevEnc, int origDataOffset) { int ptrIn, ptrOut, c; ptrIn = textOffset; ptrOut = dataOffset; textLength += textOffset; dataLength += dataOffset; while (ptrIn < textLength) { + c = text[ptrIn++] & 0xff; + if (isDigit(c) && symbolIndex > 0 && prevEnc == DM_ASCII && isDigit(text[ptrIn - 2] & 0xff) + && data[dataOffset - 1] > 48 && data[dataOffset - 1] < 59) { + data[ptrOut - 1] = (byte) (((text[ptrIn - 2] & 0xff) - '0') * 10 + c - '0' + 130); + return ptrOut - origDataOffset; + } if (ptrOut >= dataLength) return -1; - c = text[ptrIn++] & 0xff; - if (isDigit(c) && ptrIn < textLength && isDigit(text[ptrIn] & 0xff)) { + + if (isDigit(c) && symbolIndex < 0 && ptrIn < textLength && isDigit(text[ptrIn] & 0xff)) { data[ptrOut++] = (byte)((c - '0') * 10 + (text[ptrIn++] & 0xff) - '0' + 130); } else if (c > 127) { if (ptrOut + 1 >= dataLength) return -1; - data[ptrOut++] = (byte)235; + data[ptrOut++] = EXTENDED_ASCII; data[ptrOut++] = (byte)(c - 128 + 1); } else { data[ptrOut++] = (byte)(c + 1); } } - return ptrOut - dataOffset; + return ptrOut - origDataOffset; } - private static int b256Encodation(byte[] text, int textOffset, int textLength, byte[] data, int dataOffset, int dataLength) { - int k, j, prn, tv, c; + private static int b256Encodation(byte[] text, int textOffset, int textLength, byte[] data, int dataOffset, int dataLength,int symbolIndex, int prevEnc, int origDataOffset) { + int minRequiredDataIncrement; if (textLength == 0) return 0; - if (textLength < 250 && textLength + 2 > dataLength) - return -1; - if (textLength >= 250 && textLength + 3 > dataLength) - return -1; - data[dataOffset] = (byte)231; + int simulatedDataOffset = dataOffset; + if (prevEnc != DM_B256) { + if (textLength < 250 && textLength + 2 > dataLength) + return -1; + if (textLength >= 250 && textLength + 3 > dataLength) + return -1; + data[dataOffset] = LATCH_B256; + } else { + int latestModeEntry = symbolIndex - 1; + while (latestModeEntry > 0 && switchMode[DM_B256 - 1][latestModeEntry] == DM_B256) { + latestModeEntry--; + } + textLength = symbolIndex - latestModeEntry + 1; + if (textLength != 250 && 1 > dataLength) + return -1; + if (textLength == 250 && 2 > dataLength) + return -1; + simulatedDataOffset -= (textLength - 1) + (textLength < 250 ? 2 : 3); + } if (textLength < 250) { - data[dataOffset + 1] = (byte)textLength; - k = 2; + data[simulatedDataOffset + 1] = (byte) textLength; + minRequiredDataIncrement = prevEnc != DM_B256 ? 2 : 0; + } else if (textLength == 250 && prevEnc == DM_B256) { + data[simulatedDataOffset + 1] = (byte) (textLength / 250 + 249); + for (int i = dataOffset + 1; i > simulatedDataOffset + 2; i--) + data[i] = data[i - 1]; + data[simulatedDataOffset + 2] = (byte) (textLength % 250); + minRequiredDataIncrement = 1; + } else { + data[simulatedDataOffset + 1] = (byte) (textLength / 250 + 249); + data[simulatedDataOffset + 2] = (byte) (textLength % 250); + minRequiredDataIncrement = prevEnc != DM_B256 ? 3 : 0; } - else { - data[dataOffset + 1] = (byte)(textLength / 250 + 249); - data[dataOffset + 2] = (byte)(textLength % 250); - k = 3; + if (prevEnc == DM_B256) + textLength = 1; + System.arraycopy(text, textOffset, data, minRequiredDataIncrement + dataOffset, textLength); + for (int j = prevEnc != DM_B256 ? dataOffset + 1 : dataOffset; j < minRequiredDataIncrement + textLength + dataOffset; ++j) { + randomizationAlgorithm255(data, j); } - System.arraycopy(text, textOffset, data, k + dataOffset, textLength); - k += textLength + dataOffset; - for (j = dataOffset + 1; j < k; ++j) { - c = data[j] & 0xff; - prn = 149 * (j + 1) % 255 + 1; - tv = c + prn; - if (tv > 255) - tv -= 256; - data[j] = (byte)tv; + if (prevEnc == DM_B256) + randomizationAlgorithm255(data, simulatedDataOffset + 1); + return textLength + dataOffset + minRequiredDataIncrement - origDataOffset; + } - } - return k - dataOffset; + private static void randomizationAlgorithm255(byte[] data, int j) { + int c = data[j] & 0xff; + int prn = 149 * (j + 1) % 255 + 1; + int tv = c + prn; + if (tv > 255) + tv -= 256; + data[j] = (byte) tv; } - private static int X12Encodation(byte[] text, int textOffset, int textLength, byte[] data, int dataOffset, int dataLength) { + private static int X12Encodation(byte[] text, int textOffset, int textLength, byte[] data, int dataOffset, int dataLength, int symbolIndex, int prevEnc, int origDataOffset) { int ptrIn, ptrOut, count, k, n, ci; + boolean latch = true; byte c; if (textLength == 0) return 0; @@ -295,12 +371,11 @@ private static int X12Encodation(byte[] text, int textOffset, int textLength, by byte[] x = new byte[textLength]; count = 0; for (; ptrIn < textLength; ++ptrIn) { - int i = x12.indexOf((char)text[ptrIn + textOffset]); + int i = X12.indexOf((char) text[ptrIn + textOffset]); if (i >= 0) { - x[ptrIn] = (byte)i; + x[ptrIn] = (byte) i; ++count; - } - else { + } else { x[ptrIn] = 100; if (count >= 6) count -= count / 3 * 3; @@ -317,42 +392,78 @@ private static int X12Encodation(byte[] text, int textOffset, int textLength, by c = 0; for (; ptrIn < textLength; ++ptrIn) { c = x[ptrIn]; - if (ptrOut >= dataLength) + if (ptrOut > dataLength) break; if (c < 40) { - if (ptrIn == 0 || ptrIn > 0 && x[ptrIn - 1] > 40) - data[dataOffset + ptrOut++] = (byte)238; + if (ptrIn == 0 && latch || ptrIn > 0 && x[ptrIn - 1] > 40) + data[dataOffset + ptrOut++] = LATCH_X12; if (ptrOut + 2 > dataLength) break; n = 1600 * x[ptrIn] + 40 * x[ptrIn + 1] + x[ptrIn + 2] + 1; - data[dataOffset + ptrOut++] = (byte)(n / 256); - data[dataOffset + ptrOut++] = (byte)n; + data[dataOffset + ptrOut++] = (byte) (n / 256); + data[dataOffset + ptrOut++] = (byte) n; ptrIn += 2; - } - else { - if (ptrIn > 0 && x[ptrIn - 1] < 40) - data[dataOffset + ptrOut++] = (byte)254; - ci = text[ptrIn + textOffset] & 0xff; - if (ci > 127) { - data[dataOffset + ptrOut++] = (byte)235; - ci -= 128; + } else { + boolean enterASCII = true; + if (symbolIndex <= 0) { + if (ptrIn > 0 && x[ptrIn - 1] < 40) + data[dataOffset + ptrOut++] = UNLATCH; + } else if (symbolIndex > 4 && prevEnc == DM_X12 && X12.indexOf((char) text[textOffset]) >= 0 && X12.indexOf((char) text[textOffset - 1]) >= 0) { + int latestModeEntry = symbolIndex - 1; + while (latestModeEntry > 0 && switchMode[DM_X12 - 1][latestModeEntry] == DM_X12 + && (X12.indexOf((char) text[textOffset - (symbolIndex - latestModeEntry + 1)])) >= 0) { + latestModeEntry--; + } + int unlatch = -1; + if (symbolIndex - latestModeEntry >= 5) { + for (int i = 1; i <= symbolIndex - latestModeEntry; i++) { + if (data[dataOffset - i] == UNLATCH) { + unlatch = dataOffset - i; + break; + } + } + int amountOfEncodedWithASCII = unlatch >= 0 ? dataOffset - unlatch - 1 : symbolIndex - latestModeEntry; + if (amountOfEncodedWithASCII % 3 == 2) { + enterASCII = false; + textLength = amountOfEncodedWithASCII + 1; + textOffset -= amountOfEncodedWithASCII; + dataLength += unlatch < 0 ? amountOfEncodedWithASCII : amountOfEncodedWithASCII + 1; + dataOffset -= unlatch < 0 ? amountOfEncodedWithASCII : amountOfEncodedWithASCII + 1; + ptrIn = -1; + latch = unlatch != dataOffset; + x = new byte[amountOfEncodedWithASCII + 1]; + for (int i = 0; i <= amountOfEncodedWithASCII; i++) { + x[i] = (byte) X12.indexOf((char) text[textOffset + i]); + } + } else { + x = new byte[1]; + x[0] = 100; + } + } + } + if (enterASCII) { + int i = asciiEncodation(text, textOffset + ptrIn, 1, data, dataOffset + ptrOut, dataLength, -1, -1, origDataOffset); + if (i < 0) + return -1; + if (data[dataOffset + ptrOut] == EXTENDED_ASCII) + ptrOut++; + ptrOut++; } - if (ptrOut >= dataLength) - break; - data[dataOffset + ptrOut++] = (byte)(ci + 1); } } c = 100; if (textLength > 0) c = x[textLength - 1]; - if (ptrIn != textLength || c < 40 && ptrOut >= dataLength) + if (ptrIn != textLength) return -1; if (c < 40) - data[dataOffset + ptrOut++] = (byte)254; - return ptrOut; + data[dataOffset + ptrOut++] = UNLATCH; + if (ptrOut > dataLength) + return -1; + return ptrOut + dataOffset - origDataOffset; } - private static int EdifactEncodation(byte[] text, int textOffset, int textLength, byte[] data, int dataOffset, int dataLength) { + private static int EdifactEncodation(byte[] text, int textOffset, int textLength, byte[] data, int dataOffset, int dataLength,int symbolIndex, int prevEnc, int origDataOffset, boolean sizeFixed) { int ptrIn, ptrOut, edi, pedi, c; if (textLength == 0) return 0; @@ -361,13 +472,138 @@ private static int EdifactEncodation(byte[] text, int textOffset, int textLength edi = 0; pedi = 18; boolean ascii = true; + int latestModeEntryActual = -1, latestModeEntryC40orX12 = -1, prevMode = -1; + if (prevEnc == DM_EDIFACT && ((text[textOffset] & 0xff & 0xe0) == 0x40 || (text[textOffset] & 0xff & 0xe0) == 0x20) && (text[textOffset] & 0xff) != '_' + && ((text[textOffset - 1] & 0xff & 0xe0) == 0x40 || (text[textOffset - 1] & 0xff & 0xe0) == 0x20) && (text[textOffset - 1] & 0xff) != '_') { + latestModeEntryActual = symbolIndex - 1; + while (latestModeEntryActual > 0 && switchMode[DM_EDIFACT - 1][latestModeEntryActual] == DM_EDIFACT) { + c = text[textOffset - (symbolIndex - latestModeEntryActual + 1)] & 0xff; + if (((c & 0xe0) == 0x40 || (c & 0xe0) == 0x20) && c != '_') { + latestModeEntryActual--; + } else + break; + } + prevMode = switchMode[DM_EDIFACT - 1][latestModeEntryActual] == DM_C40 + || switchMode[DM_EDIFACT - 1][latestModeEntryActual] == DM_X12 ? switchMode[DM_EDIFACT - 1][latestModeEntryActual] : -1; + if (prevMode > 0) + latestModeEntryC40orX12 = latestModeEntryActual; + while (prevMode > 0 && latestModeEntryC40orX12 > 0 && switchMode[prevMode - 1][latestModeEntryC40orX12] == prevMode) { + c = text[textOffset - (symbolIndex - latestModeEntryC40orX12 + 1)] & 0xff; + if (((c & 0xe0) == 0x40 || (c & 0xe0) == 0x20) && c != '_') { + latestModeEntryC40orX12--; + } else { + latestModeEntryC40orX12 = -1; + break; + } + } + } + int dataSize = dataOffset + dataLength; + boolean asciiOneSymbol = false; + if (symbolIndex != -1) + asciiOneSymbol = true; + int dataTaken = 0, dataRequired = 0; + if (latestModeEntryC40orX12 >= 0 && symbolIndex - latestModeEntryC40orX12 + 1 > 9) { + textLength = symbolIndex - latestModeEntryC40orX12 + 1; + dataTaken = 0; + dataRequired = 0; + dataRequired += 1 + (textLength / 4 * 3); + if (!sizeFixed && (symbolIndex == text.length - 1 || symbolIndex < 0) && textLength % 4 < 3) { + dataSize = Integer.MAX_VALUE; + for (int i = 0; i < dmSizes.length; ++i) { + if (dmSizes[i].dataSize >= dataRequired + textLength % 4) { + dataSize = dmSizes[i].dataSize; + break; + } + } + } + if (dataSize - dataOffset - dataRequired <= 2 && textLength % 4 <= 2) + dataRequired += (textLength % 4); + else { + dataRequired += (textLength % 4) + 1; + if (textLength % 4 == 3) + dataRequired--; + } + for (int i = dataOffset - 1; i >= 0; i--) { + dataTaken++; + if (data[i] == (prevMode == DM_C40 ? LATCH_C40 : LATCH_X12)) { + break; + } + } + if (dataRequired <= dataTaken) { + asciiOneSymbol = false; + textOffset -= textLength - 1; + dataOffset -= dataTaken; + dataLength += dataTaken; + } + } else if (latestModeEntryActual >= 0 && symbolIndex - latestModeEntryActual + 1 > 9) { + textLength = symbolIndex - latestModeEntryActual + 1; + dataRequired += 1 + (textLength / 4 * 3); + if (dataSize - dataOffset - dataRequired <= 2 && textLength % 4 <= 2) + dataRequired += (textLength % 4); + else { + dataRequired += (textLength % 4) + 1; + if (textLength % 4 == 3) + dataRequired--; + } + int dataNewOffset = 0; + int latchEdi = -1; + for (int i = origDataOffset; i < dataOffset; i++) + if (data[i] == LATCH_EDIFACT && dataOffset - i <= dataRequired) { + latchEdi = i; + break; + } + if (latchEdi != -1) { + dataTaken += dataOffset - latchEdi; + if ((text[textOffset] & 0xff) > 127) + dataTaken += 2; + else { + if (isDigit(text[textOffset] & 0xff) && isDigit(text[textOffset - 1] & 0xff) && + data[dataOffset - 1] >= 49 && data[dataOffset - 1] <= 58) { + dataTaken--; + } + dataTaken++; + } + dataNewOffset = dataOffset - latchEdi; + } else { + for (int j = symbolIndex - latestModeEntryActual; j >= 0; j--) { + if ((text[textOffset - j] & 0xff) > 127) + dataTaken += 2; + else { + if (j > 0 && isDigit(text[textOffset - j] & 0xff) && isDigit(text[textOffset - j + 1] & 0xff)) { + if (j == 1) + dataNewOffset = dataTaken; + j--; + } + dataTaken++; + } + if (j == 1) + dataNewOffset = dataTaken; + } + } + if (dataRequired <= dataTaken) { + asciiOneSymbol = false; + textOffset -= textLength - 1; + dataOffset -= dataNewOffset; + dataLength += dataNewOffset; + } + } + if (asciiOneSymbol) { + c = text[textOffset] & 0xff; + if (isDigit(c) && textOffset + ptrIn > 0 && isDigit(text[textOffset - 1] & 0xff) + && prevEnc == DM_EDIFACT && data[dataOffset - 1] >= 49 && data[dataOffset - 1] <= 58) { + data[dataOffset + ptrOut - 1] = (byte) (((text[textOffset - 1] & 0xff) - '0') * 10 + c - '0' + 130); + return dataOffset - origDataOffset; + } else { + return asciiEncodation(text, textOffset + ptrIn, 1, data, dataOffset + ptrOut, dataLength, -1, -1, origDataOffset); + } + } for (; ptrIn < textLength; ++ptrIn) { c = text[ptrIn + textOffset] & 0xff; if (((c & 0xe0) == 0x40 || (c & 0xe0) == 0x20) && c != '_') { if (ascii) { if (ptrOut + 1 > dataLength) break; - data[dataOffset + ptrOut++] = (byte)240; + data[dataOffset + ptrOut++] = LATCH_EDIFACT; ascii = false; } c &= 0x3f; @@ -375,96 +611,181 @@ private static int EdifactEncodation(byte[] text, int textOffset, int textLength if (pedi == 0) { if (ptrOut + 3 > dataLength) break; - data[dataOffset + ptrOut++] = (byte)(edi >> 16); - data[dataOffset + ptrOut++] = (byte)(edi >> 8); - data[dataOffset + ptrOut++] = (byte)edi; + data[dataOffset + ptrOut++] = (byte) (edi >> 16); + data[dataOffset + ptrOut++] = (byte) (edi >> 8); + data[dataOffset + ptrOut++] = (byte) edi; edi = 0; pedi = 18; - } - else + } else pedi -= 6; } else { if (!ascii) { edi |= ('_' & 0x3f) << pedi; if (ptrOut + 3 - pedi / 8 > dataLength) break; - data[dataOffset + ptrOut++] = (byte)(edi >> 16); + data[dataOffset + ptrOut++] = (byte) (edi >> 16); if (pedi <= 12) - data[dataOffset + ptrOut++] = (byte)(edi >> 8); + data[dataOffset + ptrOut++] = (byte) (edi >> 8); if (pedi <= 6) - data[dataOffset + ptrOut++] = (byte)edi; + data[dataOffset + ptrOut++] = (byte) edi; ascii = true; pedi = 18; edi = 0; } - if (c > 127) { - if (ptrOut >= dataLength) - break; - data[dataOffset + ptrOut++] = (byte)235; - c -= 128; + if (isDigit(c) && textOffset + ptrIn > 0 && isDigit(text[textOffset + ptrIn - 1] & 0xff) && + prevEnc == DM_EDIFACT && data[dataOffset - 1] >= 49 && data[dataOffset - 1] <= 58) { + data[dataOffset + ptrOut - 1] = (byte) (((text[textOffset - 1] & 0xff) - '0') * 10 + c - '0' + 130); + ptrOut--; + } else { + int i = asciiEncodation(text, textOffset + ptrIn, 1, data, dataOffset + ptrOut, dataLength, -1, -1, origDataOffset); + if (i < 0) + return -1; + if (data[dataOffset + ptrOut] == EXTENDED_ASCII) + ptrOut++; + ptrOut++; } - if (ptrOut >= dataLength) - break; - data[dataOffset + ptrOut++] = (byte)(c + 1); } } if (ptrIn != textLength) return -1; - int dataSize = Integer.MAX_VALUE; - for (int i = 0; i < dmSizes.length; ++i) { - if (dmSizes[i].dataSize >= dataOffset + ptrOut + (3-pedi/6)) { - dataSize = dmSizes[i].dataSize; - break; + if (!sizeFixed && (symbolIndex == text.length - 1 || symbolIndex < 0)) { + dataSize = Integer.MAX_VALUE; + for (int i = 0; i < dmSizes.length; ++i) { + if (dmSizes[i].dataSize >= dataOffset + ptrOut + (3 - pedi / 6)) { + dataSize = dmSizes[i].dataSize; + break; + } } } - if (dataSize - dataOffset - ptrOut <= 2 && pedi >= 6) { - //have to write up to 2 bytes and up to 2 symbols + if (pedi != 18 && ptrOut + 2 - pedi / 8 > dataLength) + return -1; if (pedi <= 12) { byte val = (byte) ((edi >> 18) & 0x3F); if ((val & 0x20) == 0) val |= 0x40; - data[dataOffset + ptrOut++] = (byte)(val + 1); + data[dataOffset + ptrOut++] = (byte) (val + 1); } if (pedi <= 6) { byte val = (byte) ((edi >> 12) & 0x3F); if ((val & 0x20) == 0) val |= 0x40; - data[dataOffset + ptrOut++] = (byte)(val + 1); + data[dataOffset + ptrOut++] = (byte) (val + 1); } } else if (!ascii) { edi |= ('_' & 0x3f) << pedi; if (ptrOut + 3 - pedi / 8 > dataLength) return -1; - data[dataOffset + ptrOut++] = (byte)(edi >> 16); + data[dataOffset + ptrOut++] = (byte) (edi >> 16); if (pedi <= 12) - data[dataOffset + ptrOut++] = (byte)(edi >> 8); + data[dataOffset + ptrOut++] = (byte) (edi >> 8); if (pedi <= 6) - data[dataOffset + ptrOut++] = (byte)edi; + data[dataOffset + ptrOut++] = (byte) edi; } - return ptrOut; + return ptrOut + dataOffset - origDataOffset; } - private static int C40OrTextEncodation(byte[] text, int textOffset, int textLength, byte[] data, int dataOffset, int dataLength, boolean c40) { + + private static int C40OrTextEncodation(byte[] text, int textOffset, int textLength, byte[] data, int dataOffset, int dataLength, boolean c40, int symbolIndex, int prevEnc, int origDataOffset) { int ptrIn, ptrOut, encPtr, last0, last1, i, a, c; String basic, shift2, shift3; if (textLength == 0) return 0; ptrIn = 0; ptrOut = 0; - if (c40) - data[dataOffset + ptrOut++] = (byte)230; - else - data[dataOffset + ptrOut++] = (byte)239; shift2 = "!\"#$%&'()*+,-./:;<=>?@[\\]^_"; if (c40) { basic = " 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; shift3 = "`abcdefghijklmnopqrstuvwxyz{|}~\177"; - } - else { + } else { basic = " 0123456789abcdefghijklmnopqrstuvwxyz"; shift3 = "`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~\177"; } + boolean addLatch = true, usingASCII = false; + int mode = c40 ? DM_C40 : DM_TEXT; + if (prevEnc == mode) { + usingASCII = true; + int latestModeEntry = symbolIndex - 1; + while (latestModeEntry > 0 && switchMode[mode - 1][latestModeEntry] == mode) { + latestModeEntry--; + } + int unlatch = -1; + int dataAmountOfEncodedWithASCII = 0; + if (symbolIndex - latestModeEntry >= 5) { + for (i = symbolIndex - latestModeEntry; i > 0; i--) { + c = text[textOffset - i] & 0xff; + if (c > 127) { + dataAmountOfEncodedWithASCII += 2; + } else + dataAmountOfEncodedWithASCII++; + } + for (i = 1; i <= dataAmountOfEncodedWithASCII; i++) { + if (i > dataOffset) + break; + if (data[dataOffset - i] == UNLATCH) { + unlatch = dataOffset - i; + break; + } + } + int amountOfEncodedWithASCII = 0; + if (unlatch >= 0) + for (i = unlatch + 1; i < dataOffset; i++) { + if (data[i] == EXTENDED_ASCII) + i++; + if (data[i] >= -127 && data[i] <= -27) + amountOfEncodedWithASCII++; + amountOfEncodedWithASCII++; + } + else + amountOfEncodedWithASCII = symbolIndex - latestModeEntry; + int dataOffsetNew = 0; + for (i = amountOfEncodedWithASCII; i > 0; i--) { + int requiredCapacityForASCII = 0; + int requiredCapacityForC40orText = 0; + for (int j = i; j >= 0; j--) { + c = text[textOffset - j] & 0xff; + if (c > 127) { + c -= 128; + requiredCapacityForC40orText += 2; + } + requiredCapacityForC40orText += basic.indexOf((char) c) >= 0 ? 1 : 2; + if (c > 127) + requiredCapacityForASCII += 2; + else { + if (j > 0 && isDigit(c) && isDigit(text[textOffset - j + 1] & 0xff)) { + requiredCapacityForC40orText += basic.indexOf((char) text[textOffset - j + 1]) >= 0 ? 1 : 2; + j--; + dataOffsetNew = requiredCapacityForASCII + 1; + } + requiredCapacityForASCII++; + } + if (j == 1) + dataOffsetNew = requiredCapacityForASCII; + } + addLatch = unlatch < 0 ? true : (dataOffset - requiredCapacityForASCII != unlatch); + if (requiredCapacityForC40orText % 3 == 0 && + requiredCapacityForC40orText / 3 * 2 + (addLatch ? 2 : 0) < requiredCapacityForASCII) { + usingASCII = false; + textLength = i + 1; + textOffset -= i; + dataOffset -= addLatch ? dataOffsetNew : dataOffsetNew + 1; + dataLength += addLatch ? dataOffsetNew : dataOffsetNew + 1; + break; + } + if (isDigit(text[textOffset - i] & 0xff) && isDigit(text[textOffset - i + 1] & 0xff)) + i--; + } + } + } else if (symbolIndex != -1) + usingASCII = true; + if (usingASCII) + return asciiEncodation(text, textOffset, 1, data, dataOffset, dataLength, prevEnc == mode ? 1 : -1, DM_ASCII, origDataOffset); + if (addLatch) { + if (c40) + data[dataOffset + ptrOut++] = LATCH_C40; + else + data[dataOffset + ptrOut++] = LATCH_TEXT; + } int[] enc = new int[textLength * 4 + 10]; encPtr = 0; last0 = 0; @@ -480,19 +801,16 @@ private static int C40OrTextEncodation(byte[] text, int textOffset, int textLeng enc[encPtr++] = 1; enc[encPtr++] = 30; } - int idx = basic.indexOf((char)c); + int idx = basic.indexOf((char) c); if (idx >= 0) { enc[encPtr++] = idx + 3; - } - else if (c < 32) { + } else if (c < 32) { enc[encPtr++] = 0; enc[encPtr++] = c; - } - else if ((idx = shift2.indexOf((char)c)) >= 0) { + } else if ((idx = shift2.indexOf((char) c)) >= 0) { enc[encPtr++] = 1; enc[encPtr++] = idx; - } - else if ((idx = shift3.indexOf((char)c)) >= 0) { + } else if ((idx = shift3.indexOf((char) c)) >= 0) { enc[encPtr++] = 2; enc[encPtr++] = idx; } @@ -507,83 +825,126 @@ else if ((idx = shift3.indexOf((char)c)) >= 0) { i = 0; for (; i < encPtr; i += 3) { a = 1600 * enc[i] + 40 * enc[i + 1] + enc[i + 2] + 1; - data[dataOffset + ptrOut++] = (byte)(a / 256); - data[dataOffset + ptrOut++] = (byte)a; + data[dataOffset + ptrOut++] = (byte) (a / 256); + data[dataOffset + ptrOut++] = (byte) a; } - data[ptrOut++] = (byte)254; - i = asciiEncodation(text, ptrIn, textLength - ptrIn, data, ptrOut, dataLength - ptrOut); - if (i < 0) + if (dataLength - ptrOut > 2) + data[dataOffset + ptrOut++] = UNLATCH; + if (symbolIndex < 0 && textLength > ptrIn) { + i = asciiEncodation(text, textOffset + ptrIn, textLength - ptrIn, data, dataOffset + ptrOut, dataLength - ptrOut, -1, -1, origDataOffset); return i; - return ptrOut + i; + } + return ptrOut + dataOffset - origDataOffset; + } + + + private static int minValueInColumn(int[][] array, int column) { + int min = Integer.MAX_VALUE; + for (int i = 0; i < 6; i++) + if (array[i][column] < min && array[i][column] >= 0) + min = array[i][column]; + return min != Integer.MAX_VALUE ? min : -1; } - private static int getEncodation(byte[] text, int textOffset, int textSize, byte[] data, int dataOffset, int dataSize, int options, boolean firstMatch) { - int e, j, k; - int[] e1 = new int[6]; + private static int valuePositionInColumn(int[][] array, int column, int value) { + for (int i = 0; i < 6; i++) + if (array[i][column] == value) + return i; + return -1; + } + + private static void solveFAndSwitchMode(int[] forMin, int mode, int currIndex) { + if (forMin[mode] >= 0 && f[mode][currIndex - 1] >= 0) { + f[mode][currIndex] = forMin[mode]; + switchMode[mode][currIndex] = mode + 1; + } else { + f[mode][currIndex] = Integer.MAX_VALUE; + } + for (int i = 0; i < 6; i++) { + if (forMin[i] < f[mode][currIndex] && forMin[i] >= 0 && f[i][currIndex - 1] >= 0) { + f[mode][currIndex] = forMin[i]; + switchMode[mode][currIndex] = i + 1; + } + } + if (f[mode][currIndex] == Integer.MAX_VALUE) { + f[mode][currIndex] = -1; + } + } + + + private static int getEncodation(byte[] text, int textOffset, int textSize, byte[] data, int dataOffset, int dataSize, int options, boolean sizeFixed) { + int e; if (dataSize < 0) return -1; - e = -1; options &= 7; if (options == 0) { - e1[0] = asciiEncodation(text, textOffset, textSize, data, dataOffset, dataSize); - if (firstMatch && e1[0] >= 0) - return e1[0]; - e1[1] = C40OrTextEncodation(text, textOffset, textSize, data, dataOffset, dataSize, false); - if (firstMatch && e1[1] >= 0) - return e1[1]; - e1[2] = C40OrTextEncodation(text, textOffset, textSize, data, dataOffset, dataSize, true); - if (firstMatch && e1[2] >= 0) - return e1[2]; - e1[3] = b256Encodation(text, textOffset, textSize, data, dataOffset, dataSize); - if (firstMatch && e1[3] >= 0) - return e1[3]; - e1[4] = X12Encodation(text, textOffset, textSize, data, dataOffset, dataSize); - if (firstMatch && e1[4] >= 0) - return e1[4]; - e1[5] = EdifactEncodation(text, textOffset, textSize, data, dataOffset, dataSize); - if (firstMatch && e1[5] >= 0) - return e1[5]; - if (e1[0] < 0 && e1[1] < 0 && e1[2] < 0 && e1[3] < 0 && e1[4] < 0 && e1[5] < 0) { - return -1; + if (textSize == 0) + return 0; + byte[][] dataDynamic = new byte[6][data.length]; + for (int i = 0; i < 6; i++) { + System.arraycopy(data, 0, dataDynamic[i], 0, data.length); + switchMode[i][0] = i + 1; } - j = 0; - e = 99999; - for (k = 0; k < 6; ++k) { - if (e1[k] >= 0 && e1[k] < e) { - e = e1[k]; - j = k; + f[0][0] = asciiEncodation(text, textOffset, 1, dataDynamic[0], dataOffset, dataSize, 0, -1, dataOffset); + f[1][0] = C40OrTextEncodation(text, textOffset, 1, dataDynamic[1], dataOffset, dataSize, true, 0, -1, dataOffset); + f[2][0] = C40OrTextEncodation(text, textOffset, 1, dataDynamic[2], dataOffset, dataSize, false, 0, -1, dataOffset); + f[3][0] = b256Encodation(text, textOffset, 1, dataDynamic[3], dataOffset, dataSize, 0, -1, dataOffset); + f[4][0] = X12Encodation(text, textOffset, 1, dataDynamic[4], dataOffset, dataSize, 0, -1, dataOffset); + f[5][0] = EdifactEncodation(text, textOffset, 1, dataDynamic[5], dataOffset, dataSize, 0, -1, dataOffset, sizeFixed); + int[] dataNewOffset = new int[6]; + for (int i = 1; i < textSize; i++) { + int tempForMin[] = new int[6]; + for (int k = 0; k < 6; k++) { + dataNewOffset[k] = f[k][i - 1] >= 0 ? f[k][i - 1] : Integer.MAX_VALUE; + } + for (int currEnc = 0; currEnc < 6; currEnc++) { + byte[][] dataDynamicInner = new byte[6][data.length]; + for (int prevEnc = 0; prevEnc < 6; prevEnc++) { + System.arraycopy(dataDynamic[prevEnc], 0, dataDynamicInner[prevEnc], 0, data.length); + if (currEnc == 0) + tempForMin[prevEnc] = asciiEncodation(text, textOffset + i, 1, dataDynamicInner[prevEnc], dataNewOffset[prevEnc] + dataOffset, dataSize - dataNewOffset[prevEnc], i, prevEnc + 1, dataOffset); + if (currEnc == 1) + tempForMin[prevEnc] = C40OrTextEncodation(text, textOffset + i, 1, dataDynamicInner[prevEnc], dataNewOffset[prevEnc] + dataOffset, dataSize - dataNewOffset[prevEnc], true, i, prevEnc + 1, dataOffset); + if (currEnc == 2) + tempForMin[prevEnc] = C40OrTextEncodation(text, textOffset + i, 1, dataDynamicInner[prevEnc], dataNewOffset[prevEnc] + dataOffset, dataSize - dataNewOffset[prevEnc], false, i, prevEnc + 1, dataOffset); + if (currEnc == 3) + tempForMin[prevEnc] = b256Encodation(text, textOffset + i, 1, dataDynamicInner[prevEnc], dataNewOffset[prevEnc] + dataOffset, dataSize - dataNewOffset[prevEnc], i, prevEnc + 1, dataOffset); + if (currEnc == 4) + tempForMin[prevEnc] = X12Encodation(text, textOffset + i, 1, dataDynamicInner[prevEnc], dataNewOffset[prevEnc] + dataOffset, dataSize - dataNewOffset[prevEnc], i, prevEnc + 1, dataOffset); + if (currEnc == 5) + tempForMin[prevEnc] = EdifactEncodation(text, textOffset + i, 1, dataDynamicInner[prevEnc], dataNewOffset[prevEnc] + dataOffset, dataSize - dataNewOffset[prevEnc], i, prevEnc + 1, dataOffset, sizeFixed); + + } + solveFAndSwitchMode(tempForMin, currEnc, i); + if (switchMode[currEnc][i] != 0) + System.arraycopy(dataDynamicInner[switchMode[currEnc][i] - 1], 0, dataDynamic[currEnc], 0, data.length); } } - if (j == 0) - e = asciiEncodation(text, textOffset, textSize, data, dataOffset, dataSize); - else if (j == 1) - e = C40OrTextEncodation(text, textOffset, textSize, data, dataOffset, dataSize, false); - else if (j == 2) - e = C40OrTextEncodation(text, textOffset, textSize, data, dataOffset, dataSize, true); - else if (j == 3) - e = b256Encodation(text, textOffset, textSize, data, dataOffset, dataSize); - else if (j == 4) - e = X12Encodation(text, textOffset, textSize, data, dataOffset, dataSize); + e = minValueInColumn(f, textSize - 1); + if (e > dataSize || e < 0) + return -1; + int bestDataDynamicResultIndex = valuePositionInColumn(f, textSize - 1, e); + System.arraycopy(dataDynamic[bestDataDynamicResultIndex], 0, data, 0, data.length); return e; } switch (options) { - case DM_ASCII: - return asciiEncodation(text, textOffset, textSize, data, dataOffset, dataSize); - case DM_C40: - return C40OrTextEncodation(text, textOffset, textSize, data, dataOffset, dataSize, true); - case DM_TEXT: - return C40OrTextEncodation(text, textOffset, textSize, data, dataOffset, dataSize, false); - case DM_B256: - return b256Encodation(text, textOffset, textSize, data, dataOffset, dataSize); - case DM_X21: - return X12Encodation(text, textOffset, textSize, data, dataOffset, dataSize); - case DM_EDIFACT: - return EdifactEncodation(text, textOffset, textSize, data, dataOffset, dataSize); - case DM_RAW: - if (textSize > dataSize) - return -1; - System.arraycopy(text, textOffset, data, dataOffset, textSize); - return textSize; + case DM_ASCII: + return asciiEncodation(text, textOffset, textSize, data, dataOffset, dataSize, -1, -1, dataOffset); + case DM_C40: + return C40OrTextEncodation(text, textOffset, textSize, data, dataOffset, dataSize, true, -1, -1, dataOffset); + case DM_TEXT: + return C40OrTextEncodation(text, textOffset, textSize, data, dataOffset, dataSize, false, -1, -1, dataOffset); + case DM_B256: + return b256Encodation(text, textOffset, textSize, data, dataOffset, dataSize, -1, -1, dataOffset); + case DM_X12: + return X12Encodation(text, textOffset, textSize, data, dataOffset, dataSize, -1, -1, dataOffset); + case DM_EDIFACT: + return EdifactEncodation(text, textOffset, textSize, data, dataOffset, dataSize, -1, -1, dataOffset, sizeFixed); + case DM_RAW: + if (textSize > dataSize) + return -1; + System.arraycopy(text, textOffset, data, dataOffset, textSize); + return textSize; } return -1; } @@ -695,7 +1056,12 @@ else if (eci < 16383) { * @throws java.io.UnsupportedEncodingException on error */ public int generate(String text) throws UnsupportedEncodingException { - byte[] t = text.getBytes("iso-8859-1"); + byte[] t; + try { + t = text.getBytes(encoding); + }catch (UnsupportedEncodingException exc) { + throw new IllegalArgumentException("text has to be encoded in iso-8859-1"); + } return generate(t, 0, t.length); } @@ -712,6 +1078,7 @@ public int generate(String text) throws UnsupportedEncodingException { * DM_ERROR_EXTENSION - an error was while parsing an extension. */ public int generate(byte[] text, int textOffset, int textSize) { + int extCount, e, k, full; DmParams dm, last; byte[] data = new byte[2500]; @@ -721,6 +1088,8 @@ public int generate(byte[] text, int textOffset, int textSize) { return DM_ERROR_EXTENSION; } e = -1; + f = new int[6][textSize - extOut]; + switchMode = new int[6][textSize - extOut]; if (height == 0 || width == 0) { last = dmSizes[dmSizes.length - 1]; e = getEncodation(text, textOffset + extOut, textSize - extOut, data, extCount, last.dataSize - extCount, options, false); @@ -729,14 +1098,13 @@ public int generate(byte[] text, int textOffset, int textSize) { } e += extCount; for (k = 0; k < dmSizes.length; ++k) { - if (dmSizes[k].dataSize >= e && (!forceSquareSize || dmSizes[k].width == dmSizes[k].height)) + if (dmSizes[k].dataSize >= e) break; } dm = dmSizes[k]; height = dm.height; width = dm.width; - } - else { + } else { for (k = 0; k < dmSizes.length; ++k) { if (height == dmSizes[k].height && width == dmSizes[k].width) break; diff --git a/itext/src/test/java/com/itextpdf/text/pdf/BarcodeDatamatrixTest/BarcodeDatamatrixTest.java b/itext/src/test/java/com/itextpdf/text/pdf/BarcodeDatamatrixTest/BarcodeDatamatrixTest.java new file mode 100644 index 0000000000..d1ca4b3f58 --- /dev/null +++ b/itext/src/test/java/com/itextpdf/text/pdf/BarcodeDatamatrixTest/BarcodeDatamatrixTest.java @@ -0,0 +1,303 @@ +package com.itextpdf.text.pdf.BarcodeDatamatrixTest; + +import com.itextpdf.awt.geom.AffineTransform; +import com.itextpdf.testutils.CompareTool; +import com.itextpdf.testutils.ITextTest; +import com.itextpdf.text.BaseColor; +import com.itextpdf.text.Document; +import com.itextpdf.text.DocumentException; +import com.itextpdf.text.PageSize; +import com.itextpdf.text.Paragraph; +import com.itextpdf.text.pdf.BarcodeDatamatrix; +import com.itextpdf.text.pdf.PdfContentByte; +import com.itextpdf.text.pdf.PdfWriter; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; + + +public class BarcodeDatamatrixTest extends ITextTest { + public static final String sourceFolder = "./src/test/resources/com/itextpdf/text/pdf/BarcodeDatamatrix/"; + public static final String destinationFolder = "./target/com/itextpdf/test/BarcodeDatamatrix/"; + + @Before + public void setUp() { + new File(destinationFolder).mkdirs(); + } + + + protected void makePdf(String outPdf) throws Exception { + + } + + protected String getOutPdf() { + return null; + } + + @Test + public void barcode01Test() throws IOException, DocumentException, InterruptedException { + String filename = "barcodeDataMatrix01.pdf"; + String code = "AAAAAAAAAA;BBBBAAAA3;00028;BBBAA05;AAAA;AAAAAA;1234567;AQWXSZ;JEAN;;;;7894561;AQWXSZ;GEO;;;;1;1;1;1;0;0;1;0;1;0;0;0;1;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1"; + + Document document = new Document(PageSize.A4); + PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(destinationFolder + filename)); + document.open(); + document.add(new Paragraph("Datamatrix test 01")); + PdfContentByte cb = writer.getDirectContent(); + cb.concatCTM(AffineTransform.getTranslateInstance(PageSize.A4.getWidth()/2-100,PageSize.A4.getHeight()/2-100)); + BarcodeDatamatrix barcode = new BarcodeDatamatrix(); + barcode.generate(code); + barcode.placeBarcode(cb, BaseColor.GREEN,5,5); + document.close(); + + Assert.assertNull(new CompareTool().compareByContent(destinationFolder + filename, sourceFolder + "cmp_" + filename, destinationFolder, "diff_")); + } + + @Test + public void barcode02Test() throws IOException, DocumentException, InterruptedException { + String filename = "barcodeDataMatrix02.pdf"; + String code = "дима"; + String encoding = "UTF-8"; + + Document document = new Document(PageSize.A4); + PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(destinationFolder + filename)); + document.open(); + document.add(new Paragraph("Datamatrix test 02")); + PdfContentByte cb = writer.getDirectContent(); + cb.concatCTM(AffineTransform.getTranslateInstance(PageSize.A4.getWidth()/2-100,PageSize.A4.getHeight()/2-100)); + BarcodeDatamatrix barcode = new BarcodeDatamatrix(code, encoding); + barcode.placeBarcode(cb, BaseColor.GREEN,5,5); + document.close(); + + Assert.assertNull(new CompareTool().compareByContent(destinationFolder + filename, sourceFolder + "cmp_" + filename, destinationFolder, "diff_")); + } + + @Test + public void barcode03Test() throws DocumentException, IOException, InterruptedException { + String filename = "barcodeDataMatrix03.pdf"; + String code = "AbcdFFghijklmnopqrstuWXSQ"; + + Document document = new Document(PageSize.A4); + PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(destinationFolder + filename)); + document.open(); + document.add(new Paragraph("Datamatrix test 03")); + PdfContentByte cb = writer.getDirectContent(); + cb.concatCTM(AffineTransform.getTranslateInstance(PageSize.A4.getWidth()/2-100,PageSize.A4.getHeight()/2-100)); + BarcodeDatamatrix barcode = new BarcodeDatamatrix(); + barcode.setWidth(36); + barcode.setHeight(12); + barcode.generate(code); + barcode.placeBarcode(cb, BaseColor.BLACK,5,5); + document.close(); + + Assert.assertNull(new CompareTool().compareByContent(destinationFolder + filename, sourceFolder + "cmp_" + filename, destinationFolder, "diff_")); + } + + @Test + public void barcode04Test() throws DocumentException, IOException, InterruptedException{ + String filename = "barcodeDataMatrix04.pdf"; + String code = "01AbcdefgAbcdefg123451231231234"; + + Document document = new Document(PageSize.A4); + PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(destinationFolder + filename)); + document.open(); + document.add(new Paragraph("Datamatrix test 04")); + PdfContentByte cb = writer.getDirectContent(); + cb.concatCTM(AffineTransform.getTranslateInstance(PageSize.A4.getWidth()/2-100,PageSize.A4.getHeight()/2-100)); + BarcodeDatamatrix barcode = new BarcodeDatamatrix(); + barcode.setWidth(36); + barcode.setHeight(12); + barcode.generate(code); + barcode.placeBarcode(cb, BaseColor.BLACK,5,5); + document.close(); + + Assert.assertNull(new CompareTool().compareByContent(destinationFolder + filename, sourceFolder + "cmp_" + filename, destinationFolder, "diff_")); + + } + + @Test + public void barcode05Test()throws DocumentException, IOException, InterruptedException { + String filename = "barcodeDataMatrix05.pdf"; + String code = "aaabbbcccdddAAABBBAAABBaaabbbcccdddaaa"; + + Document document = new Document(PageSize.A4); + PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(destinationFolder + filename)); + document.open(); + document.add(new Paragraph("Datamatrix test 05")); + PdfContentByte cb = writer.getDirectContent(); + cb.concatCTM(AffineTransform.getTranslateInstance(PageSize.A4.getWidth()/2-100,PageSize.A4.getHeight()/2-100)); + BarcodeDatamatrix barcode = new BarcodeDatamatrix(); + barcode.setWidth(40); + barcode.setHeight(40); + barcode.generate(code); + barcode.placeBarcode(cb, BaseColor.BLACK,5,5); + document.close(); + + Assert.assertNull(new CompareTool().compareByContent(destinationFolder + filename, sourceFolder + "cmp_" + filename, destinationFolder, "diff_")); + + + } + + @Test + public void barcode06Test()throws DocumentException, IOException, InterruptedException { + String filename = "barcodeDataMatrix06.pdf"; + String code = ">>>\r>>>THIS VERY TEXT>>\r>"; + + Document document = new Document(PageSize.A4); + PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(destinationFolder + filename)); + document.open(); + document.add(new Paragraph("Datamatrix test 06")); + PdfContentByte cb = writer.getDirectContent(); + cb.concatCTM(AffineTransform.getTranslateInstance(PageSize.A4.getWidth()/2-100,PageSize.A4.getHeight()/2-100)); + BarcodeDatamatrix barcode = new BarcodeDatamatrix(); + barcode.setWidth(36); + barcode.setHeight(12); + barcode.generate(code); + barcode.placeBarcode(cb, BaseColor.BLACK,5,5); + document.close(); + + Assert.assertNull(new CompareTool().compareByContent(destinationFolder + filename, sourceFolder + "cmp_" + filename, destinationFolder, "diff_")); + } + + @Test + public void barcode07Test() throws IOException, DocumentException, InterruptedException { + String filename = "barcodeDataMatrix07.pdf"; + String code = "AAAAAAAAAA;BBBBAAAA3;00028;BBBAA05;AAAA;AAAAAA;1234567;AQWXSZ;JEAN;;;;7894561;AQWXSZ;GEO;;;;1;1;1;1;0;0;1;0;1;0;0;0;1;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1"; + + Document document = new Document(PageSize.A4); + PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(destinationFolder + filename)); + document.open(); + document.add(new Paragraph("Datamatrix test 07")); + PdfContentByte cb = writer.getDirectContent(); + cb.concatCTM(AffineTransform.getTranslateInstance(PageSize.A4.getWidth()/2-100,PageSize.A4.getHeight()/2-100)); + BarcodeDatamatrix barcode = new BarcodeDatamatrix(); + barcode.setOptions(BarcodeDatamatrix.DM_ASCII); + barcode.generate(code); + barcode.placeBarcode(cb, BaseColor.GREEN,5,5); + document.close(); + + Assert.assertNull(new CompareTool().compareByContent(destinationFolder + filename, sourceFolder + "cmp_" + filename, destinationFolder, "diff_")); + } + + @Test + public void barcode08Test() throws IOException, DocumentException, InterruptedException { + String filename = "barcodeDataMatrix08.pdf"; + String code = "AAAAAAAAAA;BBBBAAAA3;00028;BBBAA05;AAAA;AAAAAA;1234567;AQWXSZ;JEAN;;;;7894561;AQWXSZ;GEO;;;;1;1;1;1;0;0;1;0;1;0;0;0;1;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1"; + + Document document = new Document(PageSize.A4); + PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(destinationFolder + filename)); + document.open(); + document.add(new Paragraph("Datamatrix test 08")); + PdfContentByte cb = writer.getDirectContent(); + cb.concatCTM(AffineTransform.getTranslateInstance(PageSize.A4.getWidth()/2-100,PageSize.A4.getHeight()/2-100)); + BarcodeDatamatrix barcode = new BarcodeDatamatrix(); + barcode.setOptions(BarcodeDatamatrix.DM_C40); + barcode.generate(code); + barcode.placeBarcode(cb, BaseColor.GREEN,5,5); + document.close(); + + Assert.assertNull(new CompareTool().compareByContent(destinationFolder + filename, sourceFolder + "cmp_" + filename, destinationFolder, "diff_")); + } + + @Test + public void barcode09Test() throws IOException, DocumentException, InterruptedException { + String filename = "barcodeDataMatrix09.pdf"; + String code = "AAAAAAAAAA;BBBBAAAA3;00028;BBBAA05;AAAA;AAAAAA;1234567;AQWXSZ;JEAN;;;;7894561;AQWXSZ;GEO;;;;1;1;1;1;0;0;1;0;1;0;0;0;1;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1"; + + Document document = new Document(PageSize.A4); + PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(destinationFolder + filename)); + document.open(); + document.add(new Paragraph("Datamatrix test 09")); + PdfContentByte cb = writer.getDirectContent(); + cb.concatCTM(AffineTransform.getTranslateInstance(PageSize.A4.getWidth()/2-100,PageSize.A4.getHeight()/2-100)); + BarcodeDatamatrix barcode = new BarcodeDatamatrix(); + barcode.setOptions(BarcodeDatamatrix.DM_TEXT); + barcode.generate(code); + barcode.placeBarcode(cb, BaseColor.GREEN,5,5); + document.close(); + + Assert.assertNull(new CompareTool().compareByContent(destinationFolder + filename, sourceFolder + "cmp_" + filename, destinationFolder, "diff_")); + } + + @Test + public void barcode10Test() throws IOException, DocumentException, InterruptedException { + String filename = "barcodeDataMatrix10.pdf"; + String code = "AAAAAAAAAA;BBBBAAAA3;00028;BBBAA05;AAAA;AAAAAA;1234567;AQWXSZ;JEAN;;;;7894561;AQWXSZ;GEO;;;;1;1;1;1;0;0;1;0;1;0;0;0;1;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1"; + + Document document = new Document(PageSize.A4); + PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(destinationFolder + filename)); + document.open(); + document.add(new Paragraph("Datamatrix test 10")); + PdfContentByte cb = writer.getDirectContent(); + cb.concatCTM(AffineTransform.getTranslateInstance(PageSize.A4.getWidth()/2-100,PageSize.A4.getHeight()/2-100)); + BarcodeDatamatrix barcode = new BarcodeDatamatrix(); + barcode.setOptions(BarcodeDatamatrix.DM_B256); + barcode.generate(code); + barcode.placeBarcode(cb, BaseColor.GREEN,5,5); + document.close(); + + Assert.assertNull(new CompareTool().compareByContent(destinationFolder + filename, sourceFolder + "cmp_" + filename, destinationFolder, "diff_")); + } + + @Test + public void barcode11Test() throws IOException, DocumentException, InterruptedException { + String filename = "barcodeDataMatrix11.pdf"; + String code = "AAAAAAAAAA;BBBBAAAA3;00028;BBBAA05;AAAA;AAAAAA;1234567;AQWXSZ;JEAN;;;;7894561;AQWXSZ;GEO;;;;1;1;1;1;0;0;1;0;1;0;0;0;1;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1"; + + Document document = new Document(PageSize.A4); + PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(destinationFolder + filename)); + document.open(); + document.add(new Paragraph("Datamatrix test 11")); + PdfContentByte cb = writer.getDirectContent(); + cb.concatCTM(AffineTransform.getTranslateInstance(PageSize.A4.getWidth()/2-100,PageSize.A4.getHeight()/2-100)); + BarcodeDatamatrix barcode = new BarcodeDatamatrix(); + barcode.setOptions(BarcodeDatamatrix.DM_X12); + barcode.generate(code); + barcode.placeBarcode(cb, BaseColor.GREEN,5,5); + document.close(); + + Assert.assertNull(new CompareTool().compareByContent(destinationFolder + filename, sourceFolder + "cmp_" + filename, destinationFolder, "diff_")); + } + @Test + public void barcode12Test() throws IOException, DocumentException, InterruptedException { + String filename = "barcodeDataMatrix12.pdf"; + String code = "AAAAAAAAAA;BBBBAAAA3;00028;BBBAA05;AAAA;AAAAAA;1234567;AQWXSZ;JEAN;;;;7894561;AQWXSZ;GEO;;;;1;1;1;1;0;0;1;0;1;0;0;0;1;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1"; + + Document document = new Document(PageSize.A4); + PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(destinationFolder + filename)); + document.open(); + document.add(new Paragraph("Datamatrix test 12")); + PdfContentByte cb = writer.getDirectContent(); + cb.concatCTM(AffineTransform.getTranslateInstance(PageSize.A4.getWidth()/2-100,PageSize.A4.getHeight()/2-100)); + BarcodeDatamatrix barcode = new BarcodeDatamatrix(); + barcode.setOptions(BarcodeDatamatrix.DM_EDIFACT); + barcode.generate(code); + barcode.placeBarcode(cb, BaseColor.GREEN,5,5); + document.close(); + + Assert.assertNull(new CompareTool().compareByContent(destinationFolder + filename, sourceFolder + "cmp_" + filename, destinationFolder, "diff_")); + } + @Test + public void barcode13Test() throws IOException, DocumentException, InterruptedException { + String filename = "barcodeDataMatrix13.pdf"; + String code = "AAAAAAAAAA;BBBBAAAA3;00028;BBBAA05;AAAA;AAAAAA;1234567;AQWXSZ;JEAN;;;;7894561;AQWXSZ;GEO;;;;1;1;1;1;0;0;1;0;1;0;0;0;1;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1"; + + Document document = new Document(PageSize.A4); + PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(destinationFolder + filename)); + document.open(); + document.add(new Paragraph("Datamatrix test 13")); + PdfContentByte cb = writer.getDirectContent(); + cb.concatCTM(AffineTransform.getTranslateInstance(PageSize.A4.getWidth()/2-100,PageSize.A4.getHeight()/2-100)); + BarcodeDatamatrix barcode = new BarcodeDatamatrix(); + barcode.setOptions(BarcodeDatamatrix.DM_RAW); + barcode.generate(code); + barcode.placeBarcode(cb, BaseColor.GREEN,5,5); + document.close(); + + Assert.assertNull(new CompareTool().compareByContent(destinationFolder + filename, sourceFolder + "cmp_" + filename, destinationFolder, "diff_")); + } +} diff --git a/itext/src/test/resources/com/itextpdf/text/pdf/BarcodeDatamatrix/cmp_barcodeDataMatrix01.pdf b/itext/src/test/resources/com/itextpdf/text/pdf/BarcodeDatamatrix/cmp_barcodeDataMatrix01.pdf new file mode 100644 index 0000000000000000000000000000000000000000..21e96f9f9b4563e70e0813f30e322d2b8f25fc2d GIT binary patch literal 3247 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 literal 0 HcmV?d00001 diff --git a/itext/src/test/resources/com/itextpdf/text/pdf/BarcodeDatamatrix/cmp_barcodeDataMatrix03.pdf b/itext/src/test/resources/com/itextpdf/text/pdf/BarcodeDatamatrix/cmp_barcodeDataMatrix03.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8e5ad2c9a954e0a4aa9b587ac1017d0cd489894d GIT binary patch literal 1459 zcmY!laB8KCYaqwWU`ar z-TZautRu&_+w9xE`q{^-8aw{=3y({koA1sezh?c><@sVdt)G8Ze1H0F$KE?~-|zoF z^!Vj_WtaN;e>0~RUaht5f8XBf`uRYHy!VHchsRHc3LO4>J!Xo~wb%bjBoqbbOyFz{ z;OxD?>8vj*#IL626Eow6!NTLhoVDenAsYWK;h zN7l~Rq^07QbYgd8g!DnqnE{pi0$+x(CAzZA3;*4!b zXPc_{{X})V=91h6YgDGXzU@+zyUvlGS>V<@*Z1y(6+0MC8%Y=m# zp%Kq@x!%1#5!PNZza?KcmAcj*t~>tkz^`B14|`5dob+;{KKD#9$!Wa2r+%6Lo;F4K z2fY9|?S<@-e;9`RL3?9&b&*NduuZ5VC)3f0DGp!&S+6v*8xQt%lnSw;S#- z+$mbQB}C%hjC&IIXZ-*9gMaduDg9ijc`49z24sQKr3oT^hEx`$>IWpIr|SErrer2M z5P6WzAp1bdq4@!9AIKp6;L@ZLkmVo|Lw%>j;#9D(M`})4YDs2tqP}Y$ zFpp&BrR#@h<~imSXTtb)b}(~6)*zb;@<%byNu@w180vdxrW8kmyc!gX&|-?F#W}Gg zF(*GA90bMa?lwax4k*e`DNRl-(#Q-+tteTiV5(=TXK17w?B^H|?BO4xu+qrDz(Ci? zz|dR)tU|%PD8IBo!7of9M#IrPz(=<%wWv5VKQBg8Q{New=SzTW7hpl4;bH~SWME-n zVQ6Y>WMr&uV5DwfpsuO!o1cPL0m4reMX70A1`6g}Kqo+ff|;qQv8h6u0!+-@(oz8| zr;rC1GcW{(1_&UDSy-53h?!v#voyBAP-kfYj1ZW4B}IvuIjKdUGB7x^DpkQ;KPW%H zL;)23LHeF~Y55AE&;>GG6ryd+lPrx=43aET%q^3Rlg!hM6HSv+EDTI7jSN%F6B8}% j2&(|au_`#|bR_OGiw=eled?|L{; zn?Vkib-SC=Ql1#OI-b>5J#&+{q#ivt^K+yzBElHC(x@PeQK3zje7Mi(v-<2l&R6a` ze0;1iq`Fp31~xheLghJ2hu=*#_niJFep9uazW>b5tPuQ_wzmc{8&Zed z^1hQ{1pn-oE1T*(_Th^yBUMf&P@ZlJ&E8HwnsJII8qsXEn;L0-&#|kfqtS&?wwvom zkVX6VnUwk#d7DQJaKqdY`lT{qxJ*5zE122at~5Qk;)O#u?8M8j4-!UKPD|J-*RGCl z!}akw5O-~?Yi_D-r*!hJsjfBF=qx-&qW#MTM+S!AALRfO9rTfN=uGkB(z*3DxBGC`yG2*n*&`HhtE)7bnno7dSasE zz6au|!fSHb*#078S@+~iMI(x$v!kUwlT}5@edn_`nC@~YhrGAO*A%`Tmfsyo)=t=J z*kyZ8PcHkUe)QKhod^1tcd5P>uIt`kn{e>n-aU@aVZJAPqrci;<*)Sb^H=!Gr{6p| z@>$k(|Dbnr^v9md2gaWp{%*1V$ct?<$WXJxC7z^VB<6=Qv&;(-3+aML2Bc`x$d=}! z;;l-j0$KvkN34)%i#Z46#Q`?6j39k5fQb~VK@?=Oh(Si+fi&n=(Gw?XAnvbwDY6t# zqR%ctFrMTHu@&0|DY%4Sh>_%B5Ke)f5-89P5=mmj#h@7%@+8e9GCVz}8w_)Pr7(B; zmFnQdl#0a^FeHtp_*|(}YyP~6YJtgSQXoC7E7$^lVczO_vV~)*Vh7}ubS5knT7fE7 z6^r39wylX4TgtXf@CJ^eXbg^G8W3cFWR5NNg00&@o-#4nk{(k6Ii6;jyy$3Tv$*Jj zcs7aKuQbI=MyM9mVyZYCS8qh|C=`u~Mlx9HKMC_Sm2%K2LxDynrZ6i&ty0CQfD_DN z8m$%t?*Q{RhGJqjB)J3AYQ&-!VCsLtbhzdpJe@`yf;n4(BWVxhq#vJ+eg*;!Vr5wY zNd31WTNoz`r0$AG6UfyQ8Xf5*)EXzHiL=|aYBj3Wi5f{lJE;*>!~Zj+H&z5&AG6?X WWV}FfLa<2~7N?Ub6iM66vOfW52@==< literal 0 HcmV?d00001 diff --git a/itext/src/test/resources/com/itextpdf/text/pdf/BarcodeDatamatrix/cmp_barcodeDataMatrix05.pdf b/itext/src/test/resources/com/itextpdf/text/pdf/BarcodeDatamatrix/cmp_barcodeDataMatrix05.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8e6a842b9937e955f29cce56dab32dc66d0343e1 GIT binary patch literal 2732 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 literal 0 HcmV?d00001 diff --git a/itext/src/test/resources/com/itextpdf/text/pdf/BarcodeDatamatrix/cmp_barcodeDataMatrix07.pdf b/itext/src/test/resources/com/itextpdf/text/pdf/BarcodeDatamatrix/cmp_barcodeDataMatrix07.pdf new file mode 100644 index 0000000000000000000000000000000000000000..42806bb1cf9f8ccaac5344acf21b372d1bc9b606 GIT binary patch literal 3672 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 ME+`{oWNj??UoV_@;Q#;t literal 0 HcmV?d00001 diff --git a/itext/src/test/resources/com/itextpdf/text/pdf/BarcodeDatamatrix/cmp_barcodeDataMatrix10.pdf b/itext/src/test/resources/com/itextpdf/text/pdf/BarcodeDatamatrix/cmp_barcodeDataMatrix10.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4940fc0ed7a96ab38c5e86fcccb1555167a0f064 GIT binary patch literal 3920 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 literal 0 HcmV?d00001 diff --git a/itext/src/test/resources/com/itextpdf/text/pdf/BarcodeDatamatrix/cmp_barcodeDataMatrix11.pdf b/itext/src/test/resources/com/itextpdf/text/pdf/BarcodeDatamatrix/cmp_barcodeDataMatrix11.pdf new file mode 100644 index 0000000000000000000000000000000000000000..917f3d483bb1e51f13b7b7fb43ee5bdc7c66c829 GIT binary patch literal 3878 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 literal 0 HcmV?d00001 diff --git a/itext/src/test/resources/com/itextpdf/text/pdf/BarcodeDatamatrix/cmp_barcodeDataMatrix12.pdf b/itext/src/test/resources/com/itextpdf/text/pdf/BarcodeDatamatrix/cmp_barcodeDataMatrix12.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5113a3910f9fe40925b6e192aee8eef557ea964d GIT binary patch literal 3247 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 literal 0 HcmV?d00001 diff --git a/itext/src/test/resources/com/itextpdf/text/pdf/BarcodeDatamatrix/cmp_barcodeDataMatrix13.pdf b/itext/src/test/resources/com/itextpdf/text/pdf/BarcodeDatamatrix/cmp_barcodeDataMatrix13.pdf new file mode 100644 index 0000000000000000000000000000000000000000..74a8c4e59d4f87a6668c2887dd6dd06857b77e3e GIT binary patch literal 3782 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 Date: Fri, 11 Aug 2017 08:52:58 +0200 Subject: [PATCH 37/46] remove unused variable --- .../src/main/java/com/itextpdf/text/pdf/BarcodeDatamatrix.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/itext/src/main/java/com/itextpdf/text/pdf/BarcodeDatamatrix.java b/itext/src/main/java/com/itextpdf/text/pdf/BarcodeDatamatrix.java index dd2d459b18..fc1be9ed04 100644 --- a/itext/src/main/java/com/itextpdf/text/pdf/BarcodeDatamatrix.java +++ b/itext/src/main/java/com/itextpdf/text/pdf/BarcodeDatamatrix.java @@ -361,7 +361,7 @@ private static void randomizationAlgorithm255(byte[] data, int j) { } private static int X12Encodation(byte[] text, int textOffset, int textLength, byte[] data, int dataOffset, int dataLength, int symbolIndex, int prevEnc, int origDataOffset) { - int ptrIn, ptrOut, count, k, n, ci; + int ptrIn, ptrOut, count, k, n; boolean latch = true; byte c; if (textLength == 0) From 78c6b2af1cce728ed64681f8aff0865cc20b1d14 Mon Sep 17 00:00:00 2001 From: Samuel Huylebroeck Date: Fri, 11 Aug 2017 08:59:29 +0200 Subject: [PATCH 38/46] Use unicode points for Cyrillic contents Jenkins was failing the test containing Cyrillic characters --- .../text/pdf/BarcodeDatamatrixTest/BarcodeDatamatrixTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/itext/src/test/java/com/itextpdf/text/pdf/BarcodeDatamatrixTest/BarcodeDatamatrixTest.java b/itext/src/test/java/com/itextpdf/text/pdf/BarcodeDatamatrixTest/BarcodeDatamatrixTest.java index d1ca4b3f58..0aecb35d1b 100644 --- a/itext/src/test/java/com/itextpdf/text/pdf/BarcodeDatamatrixTest/BarcodeDatamatrixTest.java +++ b/itext/src/test/java/com/itextpdf/text/pdf/BarcodeDatamatrixTest/BarcodeDatamatrixTest.java @@ -60,7 +60,7 @@ public void barcode01Test() throws IOException, DocumentException, InterruptedEx @Test public void barcode02Test() throws IOException, DocumentException, InterruptedException { String filename = "barcodeDataMatrix02.pdf"; - String code = "дима"; + String code = "\u0434\u0438\u043C\u0430";// дима String encoding = "UTF-8"; Document document = new Document(PageSize.A4); From e79227a046f5969d6427001353b97e2759171a2c Mon Sep 17 00:00:00 2001 From: jenkins Date: Fri, 11 Aug 2017 08:59:50 +0200 Subject: [PATCH 39/46] Add missing copyright headers --- .../BarcodeDatamatrixTest.java | 44 ++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/itext/src/test/java/com/itextpdf/text/pdf/BarcodeDatamatrixTest/BarcodeDatamatrixTest.java b/itext/src/test/java/com/itextpdf/text/pdf/BarcodeDatamatrixTest/BarcodeDatamatrixTest.java index 0aecb35d1b..cd4b16939d 100644 --- a/itext/src/test/java/com/itextpdf/text/pdf/BarcodeDatamatrixTest/BarcodeDatamatrixTest.java +++ b/itext/src/test/java/com/itextpdf/text/pdf/BarcodeDatamatrixTest/BarcodeDatamatrixTest.java @@ -1,3 +1,45 @@ +/* + This file is part of the iText (R) project. + Copyright (c) 1998-2017 iText Group NV + Authors: iText Software. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License version 3 + as published by the Free Software Foundation with the addition of the + following permission added to Section 15 as permitted in Section 7(a): + FOR ANY PART OF THE COVERED WORK IN WHICH THE COPYRIGHT IS OWNED BY + ITEXT GROUP. ITEXT GROUP DISCLAIMS THE WARRANTY OF NON INFRINGEMENT + OF THIRD PARTY RIGHTS + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Affero General Public License for more details. + You should have received a copy of the GNU Affero General Public License + along with this program; if not, see http://www.gnu.org/licenses or write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA, 02110-1301 USA, or download the license from the following URL: + http://itextpdf.com/terms-of-use/ + + The interactive user interfaces in modified source and object code versions + of this program must display Appropriate Legal Notices, as required under + Section 5 of the GNU Affero General Public License. + + In accordance with Section 7(b) of the GNU Affero General Public License, + a covered work must retain the producer line in every PDF that is created + or manipulated using iText. + + You can be released from the requirements of the license by purchasing + a commercial license. Buying such a license is mandatory as soon as you + develop commercial activities involving the iText software without + disclosing the source code of your own applications. + These activities include: offering paid services to customers as an ASP, + serving PDFs on the fly in a web application, shipping iText with a closed + source product. + + For more information, please contact iText Software Corp. at this + address: sales@itextpdf.com + */ package com.itextpdf.text.pdf.BarcodeDatamatrixTest; import com.itextpdf.awt.geom.AffineTransform; @@ -60,7 +102,7 @@ public void barcode01Test() throws IOException, DocumentException, InterruptedEx @Test public void barcode02Test() throws IOException, DocumentException, InterruptedException { String filename = "barcodeDataMatrix02.pdf"; - String code = "\u0434\u0438\u043C\u0430";// дима + String code = "\u0434\u0438\u043C\u0430";// ???? String encoding = "UTF-8"; Document document = new Document(PageSize.A4); From b4a29efe0297b33ba1683d38f9155c5b570c633a Mon Sep 17 00:00:00 2001 From: Ilya Idamkin Date: Thu, 10 Aug 2017 20:03:58 +0300 Subject: [PATCH 40/46] Explicitly set built-in fonts on freetext annotations flattening This logic is closer to how Acrobat displays freetext annotations, and also fixes NPE while processing such annotations with PdfContentStreamProcessor after flattening. DEV-1896 --- .../java/com/itextpdf/text/pdf/BaseFont.java | 15 +++ .../com/itextpdf/text/pdf/PdfStamperImp.java | 39 ++++++- .../com/itextpdf/text/l10n/error/en.lng | 1 + .../com/itextpdf/text/l10n/error/nl.lng | 1 + .../text/pdf/FreeTextFlatteningTest.java | 104 +++++++++++++++--- .../pdf/FreeTextFlatteningTest/flattened.pdf | Bin 24861 -> 24972 bytes .../freetext-courier.pdf | Bin 0 -> 16229 bytes 7 files changed, 146 insertions(+), 14 deletions(-) create mode 100644 itext/src/test/resources/com/itextpdf/text/pdf/FreeTextFlatteningTest/freetext-courier.pdf diff --git a/itext/src/main/java/com/itextpdf/text/pdf/BaseFont.java b/itext/src/main/java/com/itextpdf/text/pdf/BaseFont.java index a65f263f08..a37659d49a 100644 --- a/itext/src/main/java/com/itextpdf/text/pdf/BaseFont.java +++ b/itext/src/main/java/com/itextpdf/text/pdf/BaseFont.java @@ -1496,6 +1496,21 @@ public static ArrayList getDocumentFonts(PdfReader reader, int page) { return fonts; } + static PdfDictionary createBuiltInFontDictionary(String name) { + return createBuiltInFontDictionary(BuiltinFonts14.get(name)); + } + + private static PdfDictionary createBuiltInFontDictionary(PdfName name) { + if (name == null) { + return null; + } + PdfDictionary dictionary = new PdfDictionary(); + dictionary.put(PdfName.TYPE, PdfName.FONT); + dictionary.put(PdfName.BASEFONT, name); + dictionary.put(PdfName.SUBTYPE, PdfName.TYPE1); + return dictionary; + } + /** * Gets the smallest box enclosing the character contours. It will return * null if the font has not the information or the character has no diff --git a/itext/src/main/java/com/itextpdf/text/pdf/PdfStamperImp.java b/itext/src/main/java/com/itextpdf/text/pdf/PdfStamperImp.java index d9d6776ed0..1260785859 100644 --- a/itext/src/main/java/com/itextpdf/text/pdf/PdfStamperImp.java +++ b/itext/src/main/java/com/itextpdf/text/pdf/PdfStamperImp.java @@ -52,6 +52,8 @@ import com.itextpdf.text.Version; import com.itextpdf.text.error_messages.MessageLocalization; import com.itextpdf.text.exceptions.BadPasswordException; +import com.itextpdf.text.io.RandomAccessSource; +import com.itextpdf.text.io.RandomAccessSourceFactory; import com.itextpdf.text.log.Counter; import com.itextpdf.text.log.CounterFactory; import com.itextpdf.text.log.Logger; @@ -80,6 +82,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.RandomAccess; class PdfStamperImp extends PdfWriter { HashMap readers2intrefs = new HashMap(); @@ -125,6 +128,9 @@ protected Counter getCounter() { * then original layers are never read - they are simply copied to the new document with whole original catalog. */ private boolean originalLayersAreRead = false; + //Hash map of standard fonts used in flattening of annotations to prevent fonts duplication + private HashMap builtInAnnotationFonts = new HashMap(); + private double[] DEFAULT_MATRIX = {1, 0, 0, 1, 0, 0}; /** @@ -1290,9 +1296,40 @@ private void flattenAnnotations(boolean flattenFreeTextAnnotations) { final PdfString freeTextContent = annDic.getAsString(PdfName.CONTENTS); final String defaultAppearanceString = defaultAppearancePdfString.toString(); - app = new PdfAppearance(this); + //It is not stated in spec, but acrobat seems to support standard font names in DA + //So we need to check if the font is built-in and specify it explicitly. + PdfIndirectReference fontReference = null; + PdfName pdfFontName = null; + try { + RandomAccessSource source = new RandomAccessSourceFactory().createSource(defaultAppearancePdfString.getBytes()); + PdfContentParser ps = new PdfContentParser(new PRTokeniser(new RandomAccessFileOrArray(source))); + ArrayList operands = new ArrayList(); + while (ps.parse(operands).size() > 0) { + PdfLiteral operator = (PdfLiteral)operands.get(operands.size()-1); + if (operator.toString().equals("Tf")) { + pdfFontName = (PdfName) operands.get(0); + String fontName = pdfFontName.toString().substring(1); + fontReference = builtInAnnotationFonts.get(fontName); + if (fontReference == null) { + PdfDictionary dic = BaseFont.createBuiltInFontDictionary(fontName); + if (dic != null) { + fontReference = addToBody(dic).getIndirectReference(); + builtInAnnotationFonts.put(fontName, fontReference); + } + } + } + } + } catch (Exception any) { + logger.warn(MessageLocalization.getComposedMessage("error.resolving.freetext.font")); + break; + } + app = new PdfAppearance(this); + // it is unclear from spec were referenced from DA font should be (since annotations doesn't have DR), so in case it not built-in // quickly and naively flattening the freetext annotation + if (fontReference != null) { + app.getPageResources().addFont(pdfFontName, fontReference); + } app.saveState(); app.beginText(); app.setLiteral(defaultAppearanceString); diff --git a/itext/src/main/resources/com/itextpdf/text/l10n/error/en.lng b/itext/src/main/resources/com/itextpdf/text/l10n/error/en.lng index 6d42f42862..032cef298e 100644 --- a/itext/src/main/resources/com/itextpdf/text/l10n/error/en.lng +++ b/itext/src/main/resources/com/itextpdf/text/l10n/error/en.lng @@ -168,6 +168,7 @@ error.in.base64.code.reading.stream=Error in Base64 code reading stream. error.parsing.cmap.beginbfchar.expected.cosstring.or.cosname.and.not.1=Error parsing CMap beginbfchar, expected {COSString or COSName} and not {1} error.reading.objstm=Error reading ObjStm error.reading.string=Error reading string +error.resolving.freetext.font=Cannot resolve annotation's font. It won't be flattened error.with.jp.marker=Error with JP Marker every.annotation.shall.have.at.least.one.appearance.dictionary=Every annotation shall have at least one appearance dictionary exactly.one.colour.space.specification.shall.have.the.value.0x01.in.the.approx.field=Exactly one colour space specification shall have the value 0x01 in the APPROX field. diff --git a/itext/src/main/resources/com/itextpdf/text/l10n/error/nl.lng b/itext/src/main/resources/com/itextpdf/text/l10n/error/nl.lng index 6d58c2e11d..2e92042c40 100644 --- a/itext/src/main/resources/com/itextpdf/text/l10n/error/nl.lng +++ b/itext/src/main/resources/com/itextpdf/text/l10n/error/nl.lng @@ -168,6 +168,7 @@ error.in.base64.code.reading.stream=Fout in de Base64 code reading stream. error.parsing.cmap.beginbfchar.expected.cosstring.or.cosname.and.not.1=Fout bij het parsen van CMap beginbfchar, {COSString or COSName} verwacht in plaats van {1} error.reading.objstm=Fout tijdens het lezen van ObjStm error.reading.string=Fout bij het lezen van een string +error.resolving.freetext.font=Kan het lettertype van annotatie niet oplossen. Het wordt niet afgedrukt error.with.jp.marker=Foute JP Marker every.annotation.shall.have.at.least.one.appearance.dictionary=Elke annotation moet ten minste 1 appearance dictionary hebben exactly.one.colour.space.specification.shall.have.the.value.0x01.in.the.approx.field=Exact 1 colour space specificatie moet de waarde 0x01 in het APPROX veld hebben. diff --git a/itext/src/test/java/com/itextpdf/text/pdf/FreeTextFlatteningTest.java b/itext/src/test/java/com/itextpdf/text/pdf/FreeTextFlatteningTest.java index 5a0ad405e6..01eecd4b67 100644 --- a/itext/src/test/java/com/itextpdf/text/pdf/FreeTextFlatteningTest.java +++ b/itext/src/test/java/com/itextpdf/text/pdf/FreeTextFlatteningTest.java @@ -45,8 +45,6 @@ This file is part of the iText (R) project. import com.itextpdf.testutils.CompareTool; import com.itextpdf.text.DocumentException; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; @@ -54,37 +52,73 @@ This file is part of the iText (R) project. import java.io.InputStream; import java.io.OutputStream; +import com.itextpdf.text.pdf.parser.ContentByteUtils; +import com.itextpdf.text.pdf.parser.ImageRenderInfo; +import com.itextpdf.text.pdf.parser.PdfContentStreamProcessor; +import com.itextpdf.text.pdf.parser.RenderListener; +import com.itextpdf.text.pdf.parser.TextRenderInfo; import org.junit.Assert; +import org.junit.BeforeClass; import org.junit.Test; public class FreeTextFlatteningTest { - private final String FOLDER = "./src/test/resources/com/itextpdf/text/pdf/FreeTextFlatteningTest/"; + private final static String FOLDER = "./src/test/resources/com/itextpdf/text/pdf/FreeTextFlatteningTest/"; + private final static String TARGET = "./target/com/itextpdf/test/pdf/FreeTextFlattening/"; + @BeforeClass + public static void setUp() { + new File(TARGET).mkdirs(); + } @Test public void flattenCorrectlyTest() throws IOException, DocumentException, InterruptedException { - String target = "./target/com/itextpdf/test/pdf/FreeTextFlattening/"; - new File(target).mkdirs(); - String outputFile = target + "freetext-flattened.pdf"; + String outputFile = TARGET + "freetext-flattened.pdf"; - flattenFreeText(new FileInputStream(FOLDER + "freetext.pdf"), new FileOutputStream(outputFile)); - checkFlattenedPdf(new FileInputStream(outputFile), 0); + flattenFreeText(FOLDER + "freetext.pdf", outputFile); + checkAnnotationSize(outputFile, 0); - String errorMessage = new CompareTool().compare(outputFile, FOLDER + "flattened.pdf", target, "diff"); + String errorMessage = new CompareTool().compareByContent(outputFile, FOLDER + "flattened.pdf", TARGET, "diff"); if ( errorMessage != null ) { Assert.fail(errorMessage); } } + @Test + public void checkPageContentTest() throws IOException, DocumentException, InterruptedException { + checkPageContent(FOLDER + "flattened.pdf"); + } + @Test public void flattenWithoutDA() throws IOException, DocumentException { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - flattenFreeText(new FileInputStream(FOLDER + "freetext-no-da.pdf"), baos); - checkFlattenedPdf(new ByteArrayInputStream(baos.toByteArray()), 1); + String outputFile = TARGET + "freetext-flattened-no-da.pdf"; + + flattenFreeText(FOLDER + "freetext-no-da.pdf", outputFile); + checkAnnotationSize(outputFile, 1); + } + + @Test + public void flattenAndCheckCourier() throws IOException, DocumentException, InterruptedException { + String inputFile = FOLDER + "freetext-courier.pdf"; + String outputFile = TARGET + "freetext-courier-flattened.pdf"; + + flattenFreeText(inputFile, outputFile); + checkPageContent(outputFile); + } + + private void checkAnnotationSize(String path, int expectedAnnotationsSize) throws IOException, DocumentException { + FileInputStream fin = null; + try { + fin = new FileInputStream(path); + checkAnnotationSize(fin, expectedAnnotationsSize); + } finally { + if (fin != null) { + fin.close(); + } + } } - private void checkFlattenedPdf(InputStream inputStream, int expectedAnnotationsSize) throws IOException, DocumentException { + private void checkAnnotationSize(InputStream inputStream, int expectedAnnotationsSize) throws IOException, DocumentException { PdfReader reader = new PdfReader(inputStream); PdfDictionary pageDictionary = reader.getPageN(1); if ( pageDictionary.contains(PdfName.ANNOTS )) { @@ -93,6 +127,23 @@ private void checkFlattenedPdf(InputStream inputStream, int expectedAnnotationsS } } + private void flattenFreeText(String inputPath, String outputPath) throws IOException, DocumentException { + FileInputStream fin = null; + FileOutputStream fout = null; + try { + fin = new FileInputStream(inputPath); + fout = new FileOutputStream(outputPath); + flattenFreeText(fin, fout); + } finally { + if (fin != null) { + fin.close(); + } + if (fout != null) { + fout.close(); + } + } + } + private void flattenFreeText(final InputStream inputStream, OutputStream outputStream) throws IOException, DocumentException { PdfReader reader = new PdfReader(inputStream); PdfStamper stamper = new PdfStamper(reader, outputStream); @@ -103,4 +154,31 @@ private void flattenFreeText(final InputStream inputStream, OutputStream outputS stamper.close(); } + + private void checkPageContent(String path) throws IOException, DocumentException { + PdfReader pdfReader = new PdfReader(path); + try { + PdfDictionary pageDic = pdfReader.getPageN(1); + + RenderListener dummy = new RenderListener() { + public void beginTextBlock() { + } + + public void renderText(TextRenderInfo renderInfo) { + } + + public void endTextBlock() { + } + + public void renderImage(ImageRenderInfo renderInfo) { + } + }; + PdfContentStreamProcessor processor = new PdfContentStreamProcessor(dummy); + + PdfDictionary resourcesDic = pageDic.getAsDict(PdfName.RESOURCES); + processor.processContent(ContentByteUtils.getContentBytesForPage(pdfReader, 1), resourcesDic); + } finally { + pdfReader.close(); + } + } } \ No newline at end of file diff --git a/itext/src/test/resources/com/itextpdf/text/pdf/FreeTextFlatteningTest/flattened.pdf b/itext/src/test/resources/com/itextpdf/text/pdf/FreeTextFlatteningTest/flattened.pdf index 18ee6496de73cb94df2deec93829a458fb163d71..18db54b3be2b193e52f47a0125d4d2146aa18ad9 100644 GIT binary patch delta 967 zcmaJ*gcWh@gc5Q?asY7GjDd^d_gb2qE{E_TGWrp z4Sy6Sn_J<7$6?&-`egG_Cw?*rNmDJ%^Ng?`M4cUj?-j^dqH9-H$VoM3nBs=#?Oi*B z-zX0`^mbk{%B0D;TcH9zpxdyTDM3DS6%I3bSkK&FwpEX&R7C6kFzm(5f*UJzJi0$ mqCT^w&$p#CgO1Ar%k?GiI^0o!55L-%4B@!O($Z>u&G-YY81ha4 delta 865 zcmZ`%&ui2`7-h1pLMq~RyS<1yAdAw9nP16FWLaF-uG9)!*B+|H)@+l4rA?r_f+u?x zJhXfV^-#r|2cd_BdhjCpKX~wqR4|EB~^9}<6)y=M{$_+)@=!w zMm{3~zecX!I$rRQZ#brI$(e1nZUp@(#FVC*{}g>#8GWm>{vNHCQ`3jVln!erc5K9k z2WOU%4qhGa=-|=#GuYr`6KyP@~WDqcJ5-Dk@8@_GKJLe zd*$`{NkcHM>h%o6hv)2EIUQpLRq&C$`>&!HZt`!_dKNcV$To8cCg#C0w$lY6F45D= zV@jvbVV@E diff --git a/itext/src/test/resources/com/itextpdf/text/pdf/FreeTextFlatteningTest/freetext-courier.pdf b/itext/src/test/resources/com/itextpdf/text/pdf/FreeTextFlatteningTest/freetext-courier.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b6e6ffd97565dd2bee30c5f195a9aa947507d49b GIT binary patch literal 16229 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 Date: Fri, 11 Aug 2017 12:16:23 +0300 Subject: [PATCH 41/46] Support short font names in DA for freetext annotations Acrobat resolves such names in DA as well. DEV-1896 --- .../com/itextpdf/text/pdf/PdfStamperImp.java | 29 +++++++++++++++--- .../text/pdf/FreeTextFlatteningTest.java | 14 +++++++++ .../cmp_freetext-times-short-flattened.pdf | Bin 0 -> 16844 bytes .../freetext-times-short.pdf | Bin 0 -> 16196 bytes 4 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 itext/src/test/resources/com/itextpdf/text/pdf/FreeTextFlatteningTest/cmp_freetext-times-short-flattened.pdf create mode 100644 itext/src/test/resources/com/itextpdf/text/pdf/FreeTextFlatteningTest/freetext-times-short.pdf diff --git a/itext/src/main/java/com/itextpdf/text/pdf/PdfStamperImp.java b/itext/src/main/java/com/itextpdf/text/pdf/PdfStamperImp.java index 1260785859..c4ecf0a9c6 100644 --- a/itext/src/main/java/com/itextpdf/text/pdf/PdfStamperImp.java +++ b/itext/src/main/java/com/itextpdf/text/pdf/PdfStamperImp.java @@ -82,7 +82,6 @@ import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.RandomAccess; class PdfStamperImp extends PdfWriter { HashMap readers2intrefs = new HashMap(); @@ -130,6 +129,24 @@ protected Counter getCounter() { //Hash map of standard fonts used in flattening of annotations to prevent fonts duplication private HashMap builtInAnnotationFonts = new HashMap(); + private static HashMap fromShortToFullAnnotationFontNames = new HashMap(); + + static { + fromShortToFullAnnotationFontNames.put("CoBO", BaseFont.COURIER_BOLDOBLIQUE); + fromShortToFullAnnotationFontNames.put("CoBo", BaseFont.COURIER_BOLD); + fromShortToFullAnnotationFontNames.put("CoOb", BaseFont.COURIER_OBLIQUE); + fromShortToFullAnnotationFontNames.put("Cour", BaseFont.COURIER); + fromShortToFullAnnotationFontNames.put("HeBO", BaseFont.HELVETICA_BOLDOBLIQUE); + fromShortToFullAnnotationFontNames.put("HeBo", BaseFont.HELVETICA_BOLD); + fromShortToFullAnnotationFontNames.put("HeOb", BaseFont.HELVETICA_OBLIQUE); + fromShortToFullAnnotationFontNames.put("Helv", BaseFont.HELVETICA); + fromShortToFullAnnotationFontNames.put("Symb", BaseFont.SYMBOL); + fromShortToFullAnnotationFontNames.put("TiBI", BaseFont.TIMES_BOLDITALIC); + fromShortToFullAnnotationFontNames.put("TiBo", BaseFont.TIMES_BOLD); + fromShortToFullAnnotationFontNames.put("TiIt", BaseFont.TIMES_ITALIC); + fromShortToFullAnnotationFontNames.put("TiRo", BaseFont.TIMES_ROMAN); + fromShortToFullAnnotationFontNames.put("ZaDb", BaseFont.ZAPFDINGBATS); + } private double[] DEFAULT_MATRIX = {1, 0, 0, 1, 0, 0}; @@ -1309,12 +1326,16 @@ private void flattenAnnotations(boolean flattenFreeTextAnnotations) { if (operator.toString().equals("Tf")) { pdfFontName = (PdfName) operands.get(0); String fontName = pdfFontName.toString().substring(1); - fontReference = builtInAnnotationFonts.get(fontName); + String fullName = fromShortToFullAnnotationFontNames.get(fontName); + if (fullName == null) { + fullName = fontName; + } + fontReference = builtInAnnotationFonts.get(fullName); if (fontReference == null) { - PdfDictionary dic = BaseFont.createBuiltInFontDictionary(fontName); + PdfDictionary dic = BaseFont.createBuiltInFontDictionary(fullName); if (dic != null) { fontReference = addToBody(dic).getIndirectReference(); - builtInAnnotationFonts.put(fontName, fontReference); + builtInAnnotationFonts.put(fullName, fontReference); } } } diff --git a/itext/src/test/java/com/itextpdf/text/pdf/FreeTextFlatteningTest.java b/itext/src/test/java/com/itextpdf/text/pdf/FreeTextFlatteningTest.java index 01eecd4b67..9596687bd5 100644 --- a/itext/src/test/java/com/itextpdf/text/pdf/FreeTextFlatteningTest.java +++ b/itext/src/test/java/com/itextpdf/text/pdf/FreeTextFlatteningTest.java @@ -106,6 +106,20 @@ public void flattenAndCheckCourier() throws IOException, DocumentException, Inte checkPageContent(outputFile); } + @Test + public void flattenAndCheckShortFontName() throws IOException, DocumentException, InterruptedException { + String inputFile = FOLDER + "freetext-times-short.pdf"; + String outputFile = TARGET + "freetext-times-short-flattened.pdf"; + + flattenFreeText(inputFile, outputFile); + checkPageContent(outputFile); + + String errorMessage = new CompareTool().compareByContent(outputFile, FOLDER + "cmp_freetext-times-short-flattened.pdf", TARGET, "diff_short"); + if ( errorMessage != null ) { + Assert.fail(errorMessage); + } + } + private void checkAnnotationSize(String path, int expectedAnnotationsSize) throws IOException, DocumentException { FileInputStream fin = null; try { diff --git a/itext/src/test/resources/com/itextpdf/text/pdf/FreeTextFlatteningTest/cmp_freetext-times-short-flattened.pdf b/itext/src/test/resources/com/itextpdf/text/pdf/FreeTextFlatteningTest/cmp_freetext-times-short-flattened.pdf new file mode 100644 index 0000000000000000000000000000000000000000..de5a4c423d66f1ac2cf4d37c9f4d427867293000 GIT binary patch literal 16844 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 literal 0 HcmV?d00001 diff --git a/itext/src/test/resources/com/itextpdf/text/pdf/FreeTextFlatteningTest/freetext-times-short.pdf b/itext/src/test/resources/com/itextpdf/text/pdf/FreeTextFlatteningTest/freetext-times-short.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3c03454c1f162faa3f4cd652481b7296590ce07d GIT binary patch literal 16196 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 literal 0 HcmV?d00001 From 04f38fcea127bccb71770c86984c3ed2ac8d9686 Mon Sep 17 00:00:00 2001 From: Vladimir Osipchuk Date: Tue, 15 Aug 2017 16:02:24 +0300 Subject: [PATCH 42/46] Port cb0b508: Copy all global subroutines to GSubr INDEX. DEV-1885 --- .../com/itextpdf/text/pdf/CFFFontSubset.java | 50 ++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/itext/src/main/java/com/itextpdf/text/pdf/CFFFontSubset.java b/itext/src/main/java/com/itextpdf/text/pdf/CFFFontSubset.java index b7dde24a96..605216efe1 100644 --- a/itext/src/main/java/com/itextpdf/text/pdf/CFFFontSubset.java +++ b/itext/src/main/java/com/itextpdf/text/pdf/CFFFontSubset.java @@ -484,7 +484,7 @@ else if (fonts[Font].privateSubrs>=0) // Builds the New Local Subrs index NewSubrsIndexNonCID = BuildNewIndex(fonts[Font].SubrsOffsets,hSubrsUsedNonCID,RETURN_OP); //Builds the New Global Subrs index - NewGSubrsIndex = BuildNewIndex(gsubrOffsets,hGSubrsUsed,RETURN_OP); + NewGSubrsIndex = BuildNewIndexAndCopyAllGSubrs(gsubrOffsets, RETURN_OP); } /** @@ -980,6 +980,54 @@ protected byte[] BuildNewIndex(int[] Offsets,HashMap Used,byte O return AssembleIndex(NewOffsets,NewObjects); } + /** + * Function builds the new offset array, object array and assembles the index. + * used for creating the glyph and subrs subsetted index + * + * @param Offsets the offset array of the original index + * @param OperatorForUnusedEntries the operator inserted into the data stream for unused entries + * @return the new index subset version + * @throws java.io.IOException + */ + protected byte[] BuildNewIndexAndCopyAllGSubrs(int[] Offsets, byte OperatorForUnusedEntries) throws java.io.IOException { + int unusedCount = 0; + int Offset = 0; + int[] NewOffsets = new int[Offsets.length]; + // Build the Offsets Array for the Subset + for (int i = 0; i < Offsets.length - 1; ++i) { + NewOffsets[i] = Offset; + Offset += Offsets[i + 1] - Offsets[i]; + } + // Else the same offset is kept in i+1. + NewOffsets[Offsets.length - 1] = Offset; + unusedCount++; + + // Offset var determines the size of the object array + byte[] NewObjects = new byte[Offset + unusedCount]; + // Build the new Object array + int unusedOffset = 0; + for (int i = 0; i < Offsets.length - 1; ++i) { + int start = NewOffsets[i]; + int end = NewOffsets[i + 1]; + NewOffsets[i] = start + unusedOffset; + // If start != End then the Object is used + // So, we will copy the object data from the font file + if (start != end) { + // All offsets are Global Offsets relative to the beginning of the font file. + // Jump the file pointer to the start address to read from. + buf.seek(Offsets[i]); + // Read from the buffer and write into the array at start. + buf.readFully(NewObjects, start + unusedOffset, end - start); + } else { + NewObjects[start + unusedOffset] = OperatorForUnusedEntries; + unusedOffset++; + } + } + NewOffsets[Offsets.length - 1] += unusedOffset; + // Use AssembleIndex to build the index from the offset & object arrays + return AssembleIndex(NewOffsets, NewObjects); + } + /** * Function creates the new index, inserting the count,offsetsize,offset array * and object array. From 9bef56e0737296fd8eaa43640ab397610fb64ce2 Mon Sep 17 00:00:00 2001 From: Vladimir Osipchuk Date: Tue, 15 Aug 2017 16:03:26 +0300 Subject: [PATCH 43/46] Port ebc4912: Prevent overflow while offsets writing. DEV-1885 --- .../src/main/java/com/itextpdf/text/pdf/CFFFontSubset.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/itext/src/main/java/com/itextpdf/text/pdf/CFFFontSubset.java b/itext/src/main/java/com/itextpdf/text/pdf/CFFFontSubset.java index 605216efe1..ca109bfa6a 100644 --- a/itext/src/main/java/com/itextpdf/text/pdf/CFFFontSubset.java +++ b/itext/src/main/java/com/itextpdf/text/pdf/CFFFontSubset.java @@ -1043,9 +1043,9 @@ protected byte[] AssembleIndex(int[] NewOffsets,byte[] NewObjects) int Size = NewOffsets[NewOffsets.length-1]; // Calc the Offsize byte Offsize; - if (Size <= 0xff) Offsize = 1; - else if (Size <= 0xffff) Offsize = 2; - else if (Size <= 0xffffff) Offsize = 3; + if (Size < 0xff) Offsize = 1; + else if (Size < 0xffff) Offsize = 2; + else if (Size < 0xffffff) Offsize = 3; else Offsize = 4; // The byte array for the new index. The size is calc by // Count=2, Offsize=1, OffsetArray = Offsize*(Count+1), The object array From 8e5d799fb24fd8f0e8658c6b2eb5b1e0af7163d1 Mon Sep 17 00:00:00 2001 From: Vladimir Osipchuk Date: Wed, 16 Aug 2017 14:05:38 +0300 Subject: [PATCH 44/46] Fix cmps. DEV-1885 --- .../text/pdf/cidset/cmp_cidFontCheckTest3.pdf | Bin 151765 -> 161517 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/pdfa/src/test/resources/com/itextpdf/text/pdf/cidset/cmp_cidFontCheckTest3.pdf b/pdfa/src/test/resources/com/itextpdf/text/pdf/cidset/cmp_cidFontCheckTest3.pdf index 5a6ed82127ce49e03495a9aea2ebf1ee7eb38acf..12a1e8aa6f57eadfa59adbfccd7089d08f217316 100644 GIT binary patch delta 123643 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
    y=~g>^cgf}c$sdwL6h6moOFjUcSBQs+%@ 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

    9dB?i_^x+X&_p9Ch#>8yWp8vjTNT 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 z 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 Date: Thu, 17 Aug 2017 15:15:22 +0200 Subject: [PATCH 45/46] [RELEASE] 5.5.12-SNAPSHOT -> 5.5.12 --- itext/src/main/java/com/itextpdf/text/Version.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/itext/src/main/java/com/itextpdf/text/Version.java b/itext/src/main/java/com/itextpdf/text/Version.java index 76e8fecd76..5d14310115 100644 --- a/itext/src/main/java/com/itextpdf/text/Version.java +++ b/itext/src/main/java/com/itextpdf/text/Version.java @@ -70,7 +70,7 @@ public final class Version { * This String contains the version number of this iText release. * For debugging purposes, we request you NOT to change this constant. */ - private String release = "5.5.12-SNAPSHOT"; + private String release = "5.5.12"; /** * This String contains the iText version as shown in the producer line. * iText is a product developed by iText Group NV. From 6e136be387efefdfee546c61981fb26b3a177fd8 Mon Sep 17 00:00:00 2001 From: Amedee Van Gasse Date: Thu, 17 Aug 2017 15:15:33 +0200 Subject: [PATCH 46/46] [RELEASE] updating poms for branch'release/5.5.12' with non-snapshot versions --- itext/pom.xml | 2 +- pdfa/pom.xml | 2 +- pom.xml | 2 +- xmlworker/pom.xml | 2 +- xtra/pom.xml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/itext/pom.xml b/itext/pom.xml index 03249ecb53..f3b6c82bc2 100644 --- a/itext/pom.xml +++ b/itext/pom.xml @@ -10,7 +10,7 @@ itextpdf - 5.5.12-SNAPSHOT + 5.5.12 iText Core A Free Java-PDF library diff --git a/pdfa/pom.xml b/pdfa/pom.xml index 422a56f6b6..ff94b47c02 100644 --- a/pdfa/pom.xml +++ b/pdfa/pom.xml @@ -10,7 +10,7 @@ itext-pdfa - 5.5.12-SNAPSHOT + 5.5.12 iText PDF/A iText ISO-19005 Module diff --git a/pom.xml b/pom.xml index 4ea6221811..50a62d271e 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ root - 5.5.12-SNAPSHOT + 5.5.12 pom iText diff --git a/xmlworker/pom.xml b/xmlworker/pom.xml index 3ddb2fccef..17f860e374 100644 --- a/xmlworker/pom.xml +++ b/xmlworker/pom.xml @@ -11,7 +11,7 @@ com.itextpdf.tool xmlworker - 5.5.12-SNAPSHOT + 5.5.12 iText XML Worker Parses XML to PDF, with CSS support, using iText diff --git a/xtra/pom.xml b/xtra/pom.xml index 5efe9018da..f6970d680c 100644 --- a/xtra/pom.xml +++ b/xtra/pom.xml @@ -10,7 +10,7 @@ itext-xtra - 5.5.12-SNAPSHOT + 5.5.12 iText Xtra iText Xtra, part of iText a Free Java-PDF library