diff --git a/itext/src/main/java/com/itextpdf/testutils/CompareTool.java b/itext/src/main/java/com/itextpdf/testutils/CompareTool.java index f01565ef44..6e66419be6 100644 --- a/itext/src/main/java/com/itextpdf/testutils/CompareTool.java +++ b/itext/src/main/java/com/itextpdf/testutils/CompareTool.java @@ -48,7 +48,25 @@ import com.itextpdf.text.Meta; import com.itextpdf.text.Rectangle; import com.itextpdf.text.io.RandomAccessSourceFactory; -import com.itextpdf.text.pdf.*; +import com.itextpdf.text.pdf.PRIndirectReference; +import com.itextpdf.text.pdf.PRStream; +import com.itextpdf.text.pdf.PRTokeniser; +import com.itextpdf.text.pdf.PdfAnnotation; +import com.itextpdf.text.pdf.PdfArray; +import com.itextpdf.text.pdf.PdfBoolean; +import com.itextpdf.text.pdf.PdfContentByte; +import com.itextpdf.text.pdf.PdfContentParser; +import com.itextpdf.text.pdf.PdfDictionary; +import com.itextpdf.text.pdf.PdfIndirectReference; +import com.itextpdf.text.pdf.PdfLiteral; +import com.itextpdf.text.pdf.PdfName; +import com.itextpdf.text.pdf.PdfNumber; +import com.itextpdf.text.pdf.PdfObject; +import com.itextpdf.text.pdf.PdfReader; +import com.itextpdf.text.pdf.PdfStamper; +import com.itextpdf.text.pdf.PdfString; +import com.itextpdf.text.pdf.RandomAccessFileOrArray; +import com.itextpdf.text.pdf.RefKey; import com.itextpdf.text.pdf.parser.ContentByteUtils; import com.itextpdf.text.pdf.parser.ImageRenderInfo; import com.itextpdf.text.pdf.parser.InlineImageInfo; @@ -89,9 +107,8 @@ import java.util.Map; import java.util.Set; import java.util.Stack; -import java.util.StringTokenizer; import java.util.TreeSet; - +import java.util.regex.Pattern; import javax.xml.XMLConstants; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; @@ -102,7 +119,6 @@ import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; - import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; @@ -392,9 +408,17 @@ public void writeReportToXml(OutputStream stream) throws ParserConfigurationExce private String gsExec; private String compareExec; - private final String gsParams = " -dNOPAUSE -dBATCH -sDEVICE=png16m -r150 -sOutputFile= "; + private static final String renderedImageExtension = "png"; + private static final String pageNumberPattern = "%03d"; + private static final Pattern pageListRegexp = Pattern.compile("^(\\d+,)*\\d+$"); + private static final String tempFilePrefix = "itext_gs_io_temp"; + + + private final String gsParams = " -dNOPAUSE -dBATCH -dSAFER -sDEVICE=" + + renderedImageExtension + "16m -r150 -sOutputFile= "; private final String compareParams = " \"\" \"\" \"\""; + static private final String cannotOpenTargetDirectory = "Cannot open target directory for ."; static private final String gsFailed = "GhostScript failed for ."; static private final String unexpectedNumberOfPages = "Unexpected number of pages for ."; @@ -462,7 +486,6 @@ private String compare(String outPath, String differenceImagePrefix, Map", outPath + cmpImage).replace("", cmpPdf); - Process p = runProcess(gsExec , gsParams); - BufferedReader bri = new BufferedReader(new InputStreamReader(p.getInputStream())); - BufferedReader bre = new BufferedReader(new InputStreamReader(p.getErrorStream())); + replacementImagesDirectory = CompareToolUtil.createTempDirectory(tempFilePrefix); + cmpPdfTempCopy = CompareToolUtil.createTempCopy(cmpPdf, tempFilePrefix, null); + outPdfTempCopy = CompareToolUtil.createTempCopy(outPdf, tempFilePrefix, null); + int exitValue = runGhostscriptAndGetExitCode(cmpPdfTempCopy, CompareToolUtil.buildPath(replacementImagesDirectory, + new String[]{"cmp_" + tempFilePrefix + pageNumberPattern + "." + renderedImageExtension})); String line; - while ((line = bri.readLine()) != null) { - System.out.println(line); - } - bri.close(); - while ((line = bre.readLine()) != null) { - System.out.println(line); - } - bre.close(); - if (p.waitFor() == 0) { - gsParams = this.gsParams.replace("", outPath + outImage).replace("", outPdf); - p = runProcess(gsExec , gsParams); - bri = new BufferedReader(new InputStreamReader(p.getInputStream())); - bre = new BufferedReader(new InputStreamReader(p.getErrorStream())); - while ((line = bri.readLine()) != null) { - System.out.println(line); - } - bri.close(); - while ((line = bre.readLine()) != null) { - System.out.println(line); - } - bre.close(); - int exitValue = p.waitFor(); - + if (exitValue == 0) { + exitValue = runGhostscriptAndGetExitCode(outPdfTempCopy, CompareToolUtil.buildPath(replacementImagesDirectory, + new String[]{tempFilePrefix + pageNumberPattern + "." + renderedImageExtension})); if (exitValue == 0) { - imageFiles = targetDir.listFiles(new PngFileFilter()); - cmpImageFiles = targetDir.listFiles(new CmpPngFileFilter()); + File tempTargetDir = new File(replacementImagesDirectory); + imageFiles = tempTargetDir.listFiles(new PngFileFilter()); + cmpImageFiles = tempTargetDir.listFiles(new CmpPngFileFilter()); boolean bUnexpectedNumberOfPages = false; if (imageFiles.length != cmpImageFiles.length) { bUnexpectedNumberOfPages = true; @@ -543,6 +551,10 @@ private String compare(String outPath, String differenceImagePrefix, Map", imageFiles[i].getAbsolutePath()).replace("", cmpImageFiles[i].getAbsolutePath()).replace("", outPath + differenceImagePrefix + Integer.toString(i + 1) + ".png"); - p = runProcess(compareExec , compareParams); - bre = new BufferedReader(new InputStreamReader(p.getErrorStream())); + if (compareExec != null) { + String compareParams = this.compareParams.replace("", imageFiles[i].getAbsolutePath()).replace("", + cmpImageFiles[i].getAbsolutePath()).replace("", + CompareToolUtil.buildPath(replacementImagesDirectory, new String[]{ "diff" + + (i + 1) + "." + renderedImageExtension})); + + Process p = CompareToolUtil.runProcess(compareExec , compareParams); + BufferedReader bre = new BufferedReader(new InputStreamReader(p.getErrorStream())); while ((line = bre.readLine()) != null) { System.out.println(line); } bre.close(); int cmpExitValue = p.waitFor(); + if (cmpExitValue == 0) { if (differentPagesFail == null) { differentPagesFail = differentPages.replace("", outPdf).replace("", Integer.toString(i + 1)); @@ -581,8 +598,17 @@ private String compare(String outPath, String differenceImagePrefix, Map", outPdf); } - return null; } - private Process runProcess(String execPath, String params) throws IOException, InterruptedException { - StringTokenizer st = new StringTokenizer(params); - String[] cmdArray = new String[st.countTokens() + 1]; - cmdArray[0] = execPath; - for (int i = 1; st.hasMoreTokens(); ++i) - cmdArray[i] = st.nextToken(); - - Process p = Runtime.getRuntime().exec(cmdArray); - - return p; + private int runGhostscriptAndGetExitCode(String replacementPdf, String replacementImagesDirectory) + throws IOException, InterruptedException { + String gsParams = this.gsParams.replace("", replacementImagesDirectory). + replace("", replacementPdf); + Process p = CompareToolUtil.runProcess(gsExec , gsParams); + BufferedReader bri = new BufferedReader(new InputStreamReader(p.getInputStream())); + BufferedReader bre = new BufferedReader(new InputStreamReader(p.getErrorStream())); + String line; + while ((line = bri.readLine()) != null) { + System.out.println(line); + } + bri.close(); + while ((line = bre.readLine()) != null) { + System.out.println(line); + } + bre.close(); + int exitValue = p.waitFor(); + return exitValue; } public String compare(String outPdf, String cmpPdf, String outPath, String differenceImagePrefix, Map> ignoredAreas) throws IOException, InterruptedException, DocumentException { @@ -1367,9 +1400,12 @@ private void init(String outPdf, String cmpPdf) { this.cmpPdf = cmpPdf; outPdfName = new File(outPdf).getName(); cmpPdfName = new File(cmpPdf).getName(); - outImage = outPdfName + "-%03d.png"; - if (cmpPdfName.startsWith("cmp_")) cmpImage = cmpPdfName + "-%03d.png"; - else cmpImage = "cmp_" + cmpPdfName + "-%03d.png"; + outImage = outPdfName + pageNumberPattern + "." + renderedImageExtension; + if (cmpPdfName.startsWith("cmp_")) { + cmpImage = cmpPdfName + pageNumberPattern + "." + renderedImageExtension ; + } else { + cmpImage = "cmp_" + cmpPdfName + pageNumberPattern + "." + renderedImageExtension; + } } private boolean compareStreams(InputStream is1, InputStream is2) throws IOException { @@ -1396,7 +1432,7 @@ public boolean accept(File pathname) { String ap = pathname.getAbsolutePath(); boolean b1 = ap.endsWith(".png"); boolean b2 = ap.contains("cmp_"); - return b1 && !b2 && ap.contains(outPdfName); + return b1 && !b2; } } @@ -1405,7 +1441,7 @@ public boolean accept(File pathname) { String ap = pathname.getAbsolutePath(); boolean b1 = ap.endsWith(".png"); boolean b2 = ap.contains("cmp_"); - return b1 && b2 && ap.contains(cmpPdfName); + return b1 && b2; } } @@ -1500,6 +1536,4 @@ public InputSource resolveEntity(String publicId, String systemId) throws SAXExc return new InputSource(new StringReader("")); } } - - } diff --git a/itext/src/main/java/com/itextpdf/testutils/CompareToolUtil.java b/itext/src/main/java/com/itextpdf/testutils/CompareToolUtil.java new file mode 100644 index 0000000000..89a1c84daa --- /dev/null +++ b/itext/src/main/java/com/itextpdf/testutils/CompareToolUtil.java @@ -0,0 +1,155 @@ +package com.itextpdf.testutils; + +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 java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class CompareToolUtil { + static private final String SPLIT_REGEX = "((\".+?\"|[^'\\s]|'.+?')+)\\s*"; + + /** + * Creates a temporary copy of a file. + * + * @param file the path to the file to be copied + * @param tempFilePrefix the prefix of the copied file's name + * @param tempFilePostfix the postfix of the copied file's name + * + * @return the path to the copied file + */ + public static String createTempCopy(String file, String tempFilePrefix, String tempFilePostfix) + throws IOException { + String replacementFilePath = null; + try { + replacementFilePath = File.createTempFile(tempFilePrefix, tempFilePostfix).getAbsolutePath(); + copy(file, replacementFilePath); + } catch (IOException e) { + if (null != replacementFilePath) { + removeFiles(new String[] {replacementFilePath}); + } + throw e; + } + return replacementFilePath; + } + + /** + * Creates a copy of a file. + * + * @param inputFile the path to the file to be copied + * @param outputFile the path, to which the passed file should be copied + */ + public static void copy(String inputFile, String outputFile) + throws IOException { + + InputStream is = null; + OutputStream os = null; + try { + is = new FileInputStream(inputFile); + os = new FileOutputStream(outputFile); + byte[] buffer = new byte[1024]; + int length; + while ((length = is.read(buffer)) > 0) { + os.write(buffer, 0, length); + } + } finally { + is.close(); + os.close(); + } + } + + /** + * Creates a temporary directory. + * + * @param tempFilePrefix the prefix of the temporary directory's name + * @return the path to the temporary directory + */ + public static String createTempDirectory(String tempFilePrefix) + throws IOException { + final File temp; + + temp = File.createTempFile("temp", Long.toString(System.nanoTime())); + + if(!(temp.delete())) { + throw new IOException("Could not delete temp file: " + temp.getAbsolutePath()); + } + + if(!(temp.mkdir())) { + throw new IOException("Could not create temp directory: " + temp.getAbsolutePath()); + } + + return temp.toString(); + } + + /** + * Removes all of the passed files. + * + * @param paths paths to files, which should be removed + * + * @return true if all the files have been successfully removed, false otherwise + */ + public static boolean removeFiles(String[] paths) { + boolean allFilesAreRemoved = true; + for (String path : paths) { + try { + if (null != path) { + new File(path).delete(); + } + } catch (Exception e) { + allFilesAreRemoved = false; + } + } + return allFilesAreRemoved; + } + + public static Process runProcess(String execPath, String params) throws IOException, InterruptedException { + List cmdList = prepareProcessArguments(execPath, params); + String[] cmdArray = cmdList.toArray(new String[0]); + + Process p = Runtime.getRuntime().exec(cmdArray); + + return p; + } + + public static List prepareProcessArguments(String exec, String params) { + List cmdList; + if (new File(exec).exists()) { + cmdList = new ArrayList(Collections.singletonList(exec)); + } else { + cmdList = new ArrayList(splitIntoProcessArguments(exec)); + } + cmdList.addAll(splitIntoProcessArguments(params)); + return cmdList; + } + + public static List splitIntoProcessArguments(String line) { + List list = new ArrayList(); + Matcher m = Pattern.compile(SPLIT_REGEX).matcher(line); + while (m.find()) { + list.add(m.group(1).replace("'", "").replace("\"", "").trim()); + } + return list; + } + + public static String buildPath(String path, String[] fragments) { + if (path == null) { + path = ""; + } + + if (fragments == null || fragments.length == 0) { + return ""; + } + + for (int i = 0; i < fragments.length; i++) { + path = new File(path, fragments[i]).toString(); + } + + return path; + } +} diff --git a/itext/src/test/java/com/itextpdf/testutils/CompareToolTest.java b/itext/src/test/java/com/itextpdf/testutils/CompareToolTest.java index c1b757aeba..10bffe721c 100644 --- a/itext/src/test/java/com/itextpdf/testutils/CompareToolTest.java +++ b/itext/src/test/java/com/itextpdf/testutils/CompareToolTest.java @@ -50,10 +50,9 @@ This file is part of the iText (R) project. import org.junit.Before; import org.junit.Test; +import org.junit.Assert; import org.xml.sax.SAXException; -import junit.framework.Assert; - public class CompareToolTest { private static final String OUT_PATH = "./target/com/itextpdf/testutils/CompareToolTest/"; @@ -116,4 +115,69 @@ public void compareToolErrorReportTest03() throws DocumentException, Interrupted Assert.assertTrue("CompareTool report differs from the reference one", compareTool.compareXmls(RESOURCE_PATH + "cmp_report03.xml", OUT_PATH + "report03.xml")); } + @Test + public void compareTwoDifferentPdfs() + throws DocumentException, IOException, InterruptedException, ParserConfigurationException, SAXException { + CompareTool compareTool = new CompareTool(); + compareTool.setCompareByContentErrorsLimit(10); + compareTool.setGenerateCompareByContentXmlReport(true); + compareTool.setXmlReportName("TestPdf"); + String outPdf = RESOURCE_PATH + "TestPdf.pdf"; + String cmpPdf = RESOURCE_PATH + "cmp_TestPdf.pdf"; + String result = compareTool.compareByContent(outPdf, cmpPdf, OUT_PATH, "difference"); + System.out.println(result); + Assert.assertNotNull("CompareTool must return differences found between the files", result); + // Comparing the report to the reference one. + Assert.assertTrue("CompareTool report differs from the reference one", compareTool.compareXmls(RESOURCE_PATH + "cmp_TestPdf.xml", OUT_PATH + "TestPdf.xml")); + } + + @Test + public void compareTwoEqualPdfs() + throws IOException, InterruptedException, DocumentException, ParserConfigurationException, SAXException { + CompareTool compareTool = new CompareTool(); + compareTool.setCompareByContentErrorsLimit(10); + compareTool.setGenerateCompareByContentXmlReport(true); + compareTool.setXmlReportName("EqualPdfsTest"); + String outPdf = RESOURCE_PATH + "EqualPdfsTest.pdf"; + String cmpPdf = RESOURCE_PATH + "cmp_EqualPdfsTest.pdf"; + String result = compareTool.compareByContent(outPdf, cmpPdf, OUT_PATH, "difference"); + System.out.println(result); + Assert.assertNull(result); + // Comparing the report to the reference one. + Assert.assertTrue(compareTool.compareXmls(RESOURCE_PATH + "cmp_EqualPdfsTest.xml", OUT_PATH + "EqualPdfsTest.xml")); + } + + @Test + public void comparePdfsWithOneDifferentPageTest() + throws DocumentException, IOException, InterruptedException, ParserConfigurationException, SAXException { + CompareTool compareTool = new CompareTool(); + compareTool.setCompareByContentErrorsLimit(10); + compareTool.setGenerateCompareByContentXmlReport(true); + compareTool.setXmlReportName("comparePdfsWithOneDifferentPage"); + String outPdf = RESOURCE_PATH + "comparePdfsWithOneDifferentPage.pdf"; + String cmpPdf = RESOURCE_PATH + "cmp_comparePdfsWithOneDifferentPage.pdf"; + String result = compareTool.compareByContent(outPdf, cmpPdf, OUT_PATH, "difference"); + System.out.println(result); + Assert.assertNotNull("CompareTool must return differences found between the files", result); + // Comparing the report to the reference one. + Assert.assertTrue("CompareTool report differs from the reference one", compareTool.compareXmls(RESOURCE_PATH + "cmp_comparePdfsWithOneDifferentPage.xml", + OUT_PATH + "comparePdfsWithOneDifferentPage.xml")); + } + + @Test + public void comparePdfsWithDifferentPagesExceptOneTest() + throws DocumentException, IOException, InterruptedException, ParserConfigurationException, SAXException { + CompareTool compareTool = new CompareTool(); + compareTool.setCompareByContentErrorsLimit(10); + compareTool.setGenerateCompareByContentXmlReport(true); + compareTool.setXmlReportName("comparePdfsWithDifferentPagesExceptOne"); + String outPdf = RESOURCE_PATH + "comparePdfsWithDifferentPagesExceptOne.pdf"; + String cmpPdf = RESOURCE_PATH + "cmp_comparePdfsWithDifferentPagesExceptOne.pdf"; + String result = compareTool.compareByContent(outPdf, cmpPdf, OUT_PATH, "difference"); + System.out.println(result); + Assert.assertNotNull("CompareTool must return differences found between the files", result); + // Comparing the report to the reference one. + Assert.assertTrue("CompareTool report differs from the reference one", compareTool.compareXmls(RESOURCE_PATH + "cmp_comparePdfsWithDifferentPagesExceptOne.xml", + OUT_PATH + "comparePdfsWithDifferentPagesExceptOne.xml")); + } } diff --git a/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/EqualPdfsTest.pdf b/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/EqualPdfsTest.pdf new file mode 100644 index 0000000000..0b61157a16 Binary files /dev/null and b/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/EqualPdfsTest.pdf differ diff --git a/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/TestPdf.pdf b/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/TestPdf.pdf new file mode 100644 index 0000000000..044a1d6608 Binary files /dev/null and b/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/TestPdf.pdf differ diff --git a/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/cmp_EqualPdfsTest.pdf b/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/cmp_EqualPdfsTest.pdf new file mode 100644 index 0000000000..0b61157a16 Binary files /dev/null and b/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/cmp_EqualPdfsTest.pdf differ diff --git a/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/cmp_EqualPdfsTest.xml b/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/cmp_EqualPdfsTest.xml new file mode 100644 index 0000000000..b790002607 --- /dev/null +++ b/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/cmp_EqualPdfsTest.xml @@ -0,0 +1,4 @@ + + + + diff --git a/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/cmp_TestPdf.pdf b/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/cmp_TestPdf.pdf new file mode 100644 index 0000000000..e5aeda0819 Binary files /dev/null and b/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/cmp_TestPdf.pdf differ diff --git a/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/cmp_TestPdf.xml b/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/cmp_TestPdf.xml new file mode 100644 index 0000000000..c27372ede9 --- /dev/null +++ b/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/cmp_TestPdf.xml @@ -0,0 +1,24 @@ + + + + +PRStream. Lengths are different. Expected: 157. Found: 174 + + + + + +PdfNumber. Expected: 114. Found: 116 + + +/LastChar + + + +PdfArrays. Lengths are different. Expected: 83. Found: 85. + + + + + + diff --git a/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/cmp_comparePdfsWithDifferentPagesExceptOne.pdf b/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/cmp_comparePdfsWithDifferentPagesExceptOne.pdf new file mode 100644 index 0000000000..1e280b04b4 Binary files /dev/null and b/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/cmp_comparePdfsWithDifferentPagesExceptOne.pdf differ diff --git a/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/cmp_comparePdfsWithDifferentPagesExceptOne.xml b/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/cmp_comparePdfsWithDifferentPagesExceptOne.xml new file mode 100644 index 0000000000..8985913187 --- /dev/null +++ b/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/cmp_comparePdfsWithDifferentPagesExceptOne.xml @@ -0,0 +1,47 @@ + + + + +PRStream. Lengths are different. Expected: 168. Found: 150 + + + + + +Expected object was not found. + + +/Resources +/ExtGState + + + +PRStream. Lengths are different. Expected: 121. Found: 107 + + + + + +Expected object was not found. + + +/Resources +/ExtGState + + + +PRStream. The bytes differ at index 90. Expected: 2 (g \n0 G \n[(2)] TJ \nET). Found: 4 (g \n0 G \n[(4)] TJ \nET) + + +90 + + + +PRStream. The bytes differ at index 90. Expected: 1 (g \n0 G \n[(1)] TJ \nET). Found: 5 (g \n0 G \n[(5)] TJ \nET) + + +90 + + + + diff --git a/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/cmp_comparePdfsWithOneDifferentPage.pdf b/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/cmp_comparePdfsWithOneDifferentPage.pdf new file mode 100644 index 0000000000..291bf3629d Binary files /dev/null and b/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/cmp_comparePdfsWithOneDifferentPage.pdf differ diff --git a/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/cmp_comparePdfsWithOneDifferentPage.xml b/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/cmp_comparePdfsWithOneDifferentPage.xml new file mode 100644 index 0000000000..07ba068c21 --- /dev/null +++ b/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/cmp_comparePdfsWithOneDifferentPage.xml @@ -0,0 +1,39 @@ + + + + +PdfNumber. Expected: 0. Found: 500 + + +19 + + + +PRStream. Lengths are different. Expected: 125. Found: 107 + + + + + +PRStream. The bytes differ at index 71. Expected: 4 (5.104 318.41 Tm \n0 g). Found: 5 (5.104 318.53 Tm \n0 g) + + +71 + + + +PRStream. The bytes differ at index 72. Expected: 1 (.104 318.41 Tm \n0 g ). Found: 3 (.104 318.53 Tm \n0 g ) + + +72 + + + +PRStream. The bytes differ at index 90. Expected: (g \n0 G \n[( )] TJ \nET). Found: 3 (g \n0 G \n[(3)] TJ \nET) + + +90 + + + + diff --git a/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/comparePdfsWithDifferentPagesExceptOne.pdf b/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/comparePdfsWithDifferentPagesExceptOne.pdf new file mode 100644 index 0000000000..def9a6d5f8 Binary files /dev/null and b/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/comparePdfsWithDifferentPagesExceptOne.pdf differ diff --git a/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/comparePdfsWithOneDifferentPage.pdf b/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/comparePdfsWithOneDifferentPage.pdf new file mode 100644 index 0000000000..010cf74cdf Binary files /dev/null and b/itext/src/test/resources/com/itextpdf/testutils/CompareToolTest/comparePdfsWithOneDifferentPage.pdf differ