Package com.itextpdf.testutils
Class CompareTool
- java.lang.Object
-
- com.itextpdf.testutils.CompareTool
-
public class CompareTool extends java.lang.Object
Helper class for tests: uses ghostscript to compare PDFs at a pixel level.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) class
CompareTool.CmpMarkedContentRenderFilter
(package private) class
CompareTool.CmpPngFileFilter
(package private) class
CompareTool.CmpTaggedPdfReaderTool
protected class
CompareTool.CompareResult
(package private) class
CompareTool.ImageNameComparator
private class
CompareTool.ObjectPath
(package private) class
CompareTool.PngFileFilter
private static class
CompareTool.SafeEmptyEntityResolver
-
Field Summary
Fields Modifier and Type Field Description private boolean
absoluteError
private static java.lang.String
cannotOpenTargetDirectory
private java.lang.String
cmpImage
(package private) java.util.List<PdfDictionary>
cmpPages
(package private) java.util.List<RefKey>
cmpPagesRef
private java.lang.String
cmpPdf
private java.lang.String
cmpPdfName
private int
compareByContentErrorsLimit
private java.lang.String
compareExec
private java.lang.String
compareParams
private static java.lang.String
differentPages
private double
floatComparisonError
private boolean
generateCompareByContentXmlReport
private java.lang.String
gsExec
private static java.lang.String
gsFailed
private java.lang.String
gsParams
private static java.lang.String
ignoredAreasPrefix
private java.lang.String
outImage
(package private) java.util.List<PdfDictionary>
outPages
(package private) java.util.List<RefKey>
outPagesRef
private java.lang.String
outPdf
private java.lang.String
outPdfName
private static java.util.regex.Pattern
pageListRegexp
private static java.lang.String
pageNumberPattern
private static java.lang.String
renderedImageExtension
private static java.lang.String
tempFilePrefix
private static java.lang.String
undefinedGsPath
private static java.lang.String
unexpectedNumberOfPages
private java.lang.String
xmlReportName
-
Constructor Summary
Constructors Constructor Description CompareTool()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private void
addPagesFromDict(PdfObject dictRef, java.util.List<PdfDictionary> pages, java.util.List<RefKey> pagesRef)
java.lang.String
compare(java.lang.String outPdf, java.lang.String cmpPdf, java.lang.String outPath, java.lang.String differenceImagePrefix)
java.lang.String
compare(java.lang.String outPdf, java.lang.String cmpPdf, java.lang.String outPath, java.lang.String differenceImagePrefix, java.util.Map<java.lang.Integer,java.util.List<Rectangle>> ignoredAreas)
private java.lang.String
compare(java.lang.String outPath, java.lang.String differenceImagePrefix, java.util.Map<java.lang.Integer,java.util.List<Rectangle>> ignoredAreas)
private java.lang.String
compare(java.lang.String outPath, java.lang.String differenceImagePrefix, java.util.Map<java.lang.Integer,java.util.List<Rectangle>> ignoredAreas, java.util.List<java.lang.Integer> equalPages)
boolean
compareArrays(PdfArray outArray, PdfArray cmpArray)
private boolean
compareArraysExtended(PdfArray outArray, PdfArray cmpArray, CompareTool.ObjectPath currentPath, CompareTool.CompareResult compareResult)
boolean
compareBooleans(PdfBoolean outBoolean, PdfBoolean cmpBoolean)
private boolean
compareBooleansExtended(PdfBoolean outBoolean, PdfBoolean cmpBoolean, CompareTool.ObjectPath currentPath, CompareTool.CompareResult compareResult)
java.lang.String
compareByContent(java.lang.String outPdf, java.lang.String cmpPdf, java.lang.String outPath, java.lang.String differenceImagePrefix)
java.lang.String
compareByContent(java.lang.String outPdf, java.lang.String cmpPdf, java.lang.String outPath, java.lang.String differenceImagePrefix, java.util.Map<java.lang.Integer,java.util.List<Rectangle>> ignoredAreas)
protected java.lang.String
compareByContent(java.lang.String outPath, java.lang.String differenceImagePrefix, java.util.Map<java.lang.Integer,java.util.List<Rectangle>> ignoredAreas)
boolean
compareContentStreamsByParsing(PdfObject outObj, PdfObject cmpObj)
boolean
compareContentStreamsByParsing(PdfObject outObj, PdfObject cmpObj, PdfDictionary outResources, PdfDictionary cmpResources)
private boolean
compareContentStreamsByParsingExtended(PdfObject outObj, PdfObject cmpObj, PdfDictionary outResources, PdfDictionary cmpResources, CompareTool.ObjectPath currentPath, CompareTool.CompareResult compareResult)
boolean
compareDictionaries(PdfDictionary outDict, PdfDictionary cmpDict)
private boolean
compareDictionariesExtended(PdfDictionary outDict, PdfDictionary cmpDict, CompareTool.ObjectPath currentPath, CompareTool.CompareResult compareResult)
java.lang.String
compareDocumentInfo(java.lang.String outPdf, java.lang.String cmpPdf)
private boolean
compareInlineImagesExtended(PdfContentParser outPs, PdfContentParser cmpPs, PdfDictionary outDict, PdfDictionary cmpDict, CompareTool.ObjectPath currentPath, CompareTool.CompareResult compareResult)
java.lang.String
compareLinks(java.lang.String outPdf, java.lang.String cmpPdf)
boolean
compareLiterals(PdfLiteral outLiteral, PdfLiteral cmpLiteral)
private boolean
compareLiteralsExtended(PdfLiteral outLiteral, PdfLiteral cmpLiteral, CompareTool.ObjectPath currentPath, CompareTool.CompareResult compareResult)
boolean
compareNames(PdfName outName, PdfName cmpName)
private boolean
compareNamesExtended(PdfName outName, PdfName cmpName, CompareTool.ObjectPath currentPath, CompareTool.CompareResult compareResult)
boolean
compareNumbers(PdfNumber outNumber, PdfNumber cmpNumber)
private boolean
compareNumbersExtended(PdfNumber outNumber, PdfNumber cmpNumber, CompareTool.ObjectPath currentPath, CompareTool.CompareResult compareResult)
private boolean
compareObjects(PdfObject outObj, PdfObject cmpObj, CompareTool.ObjectPath currentPath, CompareTool.CompareResult compareResult)
boolean
compareStreams(PRStream outStream, PRStream cmpStream)
private boolean
compareStreams(java.io.InputStream is1, java.io.InputStream is2)
private boolean
compareStreamsExtended(PRStream outStream, PRStream cmpStream, CompareTool.ObjectPath currentPath, CompareTool.CompareResult compareResult)
boolean
compareStrings(PdfString outString, PdfString cmpString)
private boolean
compareStringsExtended(PdfString outString, PdfString cmpString, CompareTool.ObjectPath currentPath, CompareTool.CompareResult compareResult)
java.lang.String
compareTagStructures(java.lang.String outPdf, java.lang.String cmpPdf)
boolean
compareXmls(byte[] xml1, byte[] xml2)
boolean
compareXmls(java.lang.String xml1, java.lang.String xml2)
java.lang.String
compareXmp(byte[] xmp1, byte[] xmp2)
java.lang.String
compareXmp(byte[] xmp1, byte[] xmp2, boolean ignoreDateAndProducerProperties)
java.lang.String
compareXmp(java.lang.String outPdf, java.lang.String cmpPdf)
java.lang.String
compareXmp(java.lang.String outPdf, java.lang.String cmpPdf, boolean ignoreDateAndProducerProperties)
private java.lang.String[]
convertInfo(java.util.HashMap<java.lang.String,java.lang.String> info)
java.lang.String
getXmlReportName()
private void
init(java.lang.String outPdf, java.lang.String cmpPdf)
private boolean
linksAreSame(PdfAnnotation.PdfImportedLink cmpLink, PdfAnnotation.PdfImportedLink outLink)
private void
loadPagesFromReader(PdfReader reader, java.util.List<PdfDictionary> pages, java.util.List<RefKey> pagesRef)
private int
runGhostscriptAndGetExitCode(java.lang.String replacementPdf, java.lang.String replacementImagesDirectory)
CompareTool
setCompareByContentErrorsLimit(int compareByContentMaxErrorCount)
Sets the maximum errors count which will be returned as the result of the comparison.CompareTool
setFloatAbsoluteError(float error)
Sets the absolute error parameter which will be used in floating point numbers comparison.CompareTool
setFloatRelativeError(float error)
Sets the relative error parameter which will be used in floating point numbers comparison.void
setGenerateCompareByContentXmlReport(boolean generateCompareByContentXmlReport)
void
setXmlReportName(java.lang.String xmlReportName)
-
-
-
Field Detail
-
gsExec
private java.lang.String gsExec
-
compareExec
private java.lang.String compareExec
-
renderedImageExtension
private static final java.lang.String renderedImageExtension
- See Also:
- Constant Field Values
-
pageNumberPattern
private static final java.lang.String pageNumberPattern
- See Also:
- Constant Field Values
-
pageListRegexp
private static final java.util.regex.Pattern pageListRegexp
-
tempFilePrefix
private static final java.lang.String tempFilePrefix
- See Also:
- Constant Field Values
-
gsParams
private final java.lang.String gsParams
- See Also:
- Constant Field Values
-
compareParams
private final java.lang.String compareParams
- See Also:
- Constant Field Values
-
cannotOpenTargetDirectory
private static final java.lang.String cannotOpenTargetDirectory
- See Also:
- Constant Field Values
-
gsFailed
private static final java.lang.String gsFailed
- See Also:
- Constant Field Values
-
unexpectedNumberOfPages
private static final java.lang.String unexpectedNumberOfPages
- See Also:
- Constant Field Values
-
differentPages
private static final java.lang.String differentPages
- See Also:
- Constant Field Values
-
undefinedGsPath
private static final java.lang.String undefinedGsPath
- See Also:
- Constant Field Values
-
ignoredAreasPrefix
private static final java.lang.String ignoredAreasPrefix
- See Also:
- Constant Field Values
-
cmpPdf
private java.lang.String cmpPdf
-
cmpPdfName
private java.lang.String cmpPdfName
-
cmpImage
private java.lang.String cmpImage
-
outPdf
private java.lang.String outPdf
-
outPdfName
private java.lang.String outPdfName
-
outImage
private java.lang.String outImage
-
outPages
java.util.List<PdfDictionary> outPages
-
outPagesRef
java.util.List<RefKey> outPagesRef
-
cmpPages
java.util.List<PdfDictionary> cmpPages
-
cmpPagesRef
java.util.List<RefKey> cmpPagesRef
-
compareByContentErrorsLimit
private int compareByContentErrorsLimit
-
generateCompareByContentXmlReport
private boolean generateCompareByContentXmlReport
-
xmlReportName
private java.lang.String xmlReportName
-
floatComparisonError
private double floatComparisonError
-
absoluteError
private boolean absoluteError
-
-
Method Detail
-
compare
private java.lang.String compare(java.lang.String outPath, java.lang.String differenceImagePrefix, java.util.Map<java.lang.Integer,java.util.List<Rectangle>> ignoredAreas) throws java.io.IOException, java.lang.InterruptedException, DocumentException
- Throws:
java.io.IOException
java.lang.InterruptedException
DocumentException
-
compare
private java.lang.String compare(java.lang.String outPath, java.lang.String differenceImagePrefix, java.util.Map<java.lang.Integer,java.util.List<Rectangle>> ignoredAreas, java.util.List<java.lang.Integer> equalPages) throws java.io.IOException, java.lang.InterruptedException, DocumentException
- Throws:
java.io.IOException
java.lang.InterruptedException
DocumentException
-
runGhostscriptAndGetExitCode
private int runGhostscriptAndGetExitCode(java.lang.String replacementPdf, java.lang.String replacementImagesDirectory) throws java.io.IOException, java.lang.InterruptedException
- Throws:
java.io.IOException
java.lang.InterruptedException
-
compare
public java.lang.String compare(java.lang.String outPdf, java.lang.String cmpPdf, java.lang.String outPath, java.lang.String differenceImagePrefix, java.util.Map<java.lang.Integer,java.util.List<Rectangle>> ignoredAreas) throws java.io.IOException, java.lang.InterruptedException, DocumentException
- Throws:
java.io.IOException
java.lang.InterruptedException
DocumentException
-
compare
public java.lang.String compare(java.lang.String outPdf, java.lang.String cmpPdf, java.lang.String outPath, java.lang.String differenceImagePrefix) throws java.io.IOException, java.lang.InterruptedException, DocumentException
- Throws:
java.io.IOException
java.lang.InterruptedException
DocumentException
-
setCompareByContentErrorsLimit
public CompareTool setCompareByContentErrorsLimit(int compareByContentMaxErrorCount)
Sets the maximum errors count which will be returned as the result of the comparison.- Parameters:
compareByContentMaxErrorCount
- the errors count.- Returns:
- Returns this.
-
setGenerateCompareByContentXmlReport
public void setGenerateCompareByContentXmlReport(boolean generateCompareByContentXmlReport)
-
setFloatAbsoluteError
public CompareTool setFloatAbsoluteError(float error)
Sets the absolute error parameter which will be used in floating point numbers comparison.- Parameters:
error
- the epsilon new value.- Returns:
- Returns this.
-
setFloatRelativeError
public CompareTool setFloatRelativeError(float error)
Sets the relative error parameter which will be used in floating point numbers comparison.- Parameters:
error
- the epsilon new value.- Returns:
- Returns this.
-
getXmlReportName
public java.lang.String getXmlReportName()
-
setXmlReportName
public void setXmlReportName(java.lang.String xmlReportName)
-
compareByContent
protected java.lang.String compareByContent(java.lang.String outPath, java.lang.String differenceImagePrefix, java.util.Map<java.lang.Integer,java.util.List<Rectangle>> ignoredAreas) throws DocumentException, java.lang.InterruptedException, java.io.IOException
- Throws:
DocumentException
java.lang.InterruptedException
java.io.IOException
-
compareByContent
public java.lang.String compareByContent(java.lang.String outPdf, java.lang.String cmpPdf, java.lang.String outPath, java.lang.String differenceImagePrefix, java.util.Map<java.lang.Integer,java.util.List<Rectangle>> ignoredAreas) throws DocumentException, java.lang.InterruptedException, java.io.IOException
- Throws:
DocumentException
java.lang.InterruptedException
java.io.IOException
-
compareByContent
public java.lang.String compareByContent(java.lang.String outPdf, java.lang.String cmpPdf, java.lang.String outPath, java.lang.String differenceImagePrefix) throws DocumentException, java.lang.InterruptedException, java.io.IOException
- Throws:
DocumentException
java.lang.InterruptedException
java.io.IOException
-
loadPagesFromReader
private void loadPagesFromReader(PdfReader reader, java.util.List<PdfDictionary> pages, java.util.List<RefKey> pagesRef)
-
addPagesFromDict
private void addPagesFromDict(PdfObject dictRef, java.util.List<PdfDictionary> pages, java.util.List<RefKey> pagesRef)
-
compareObjects
private boolean compareObjects(PdfObject outObj, PdfObject cmpObj, CompareTool.ObjectPath currentPath, CompareTool.CompareResult compareResult) throws java.io.IOException
- Throws:
java.io.IOException
-
compareDictionaries
public boolean compareDictionaries(PdfDictionary outDict, PdfDictionary cmpDict) throws java.io.IOException
- Throws:
java.io.IOException
-
compareDictionariesExtended
private boolean compareDictionariesExtended(PdfDictionary outDict, PdfDictionary cmpDict, CompareTool.ObjectPath currentPath, CompareTool.CompareResult compareResult) throws java.io.IOException
- Throws:
java.io.IOException
-
compareContentStreamsByParsing
public boolean compareContentStreamsByParsing(PdfObject outObj, PdfObject cmpObj) throws java.io.IOException
- Throws:
java.io.IOException
-
compareContentStreamsByParsing
public boolean compareContentStreamsByParsing(PdfObject outObj, PdfObject cmpObj, PdfDictionary outResources, PdfDictionary cmpResources) throws java.io.IOException
- Throws:
java.io.IOException
-
compareContentStreamsByParsingExtended
private boolean compareContentStreamsByParsingExtended(PdfObject outObj, PdfObject cmpObj, PdfDictionary outResources, PdfDictionary cmpResources, CompareTool.ObjectPath currentPath, CompareTool.CompareResult compareResult) throws java.io.IOException
- Throws:
java.io.IOException
-
compareInlineImagesExtended
private boolean compareInlineImagesExtended(PdfContentParser outPs, PdfContentParser cmpPs, PdfDictionary outDict, PdfDictionary cmpDict, CompareTool.ObjectPath currentPath, CompareTool.CompareResult compareResult) throws java.io.IOException
- Throws:
java.io.IOException
-
compareStreams
public boolean compareStreams(PRStream outStream, PRStream cmpStream) throws java.io.IOException
- Throws:
java.io.IOException
-
compareStreamsExtended
private boolean compareStreamsExtended(PRStream outStream, PRStream cmpStream, CompareTool.ObjectPath currentPath, CompareTool.CompareResult compareResult) throws java.io.IOException
- Throws:
java.io.IOException
-
compareArrays
public boolean compareArrays(PdfArray outArray, PdfArray cmpArray) throws java.io.IOException
- Throws:
java.io.IOException
-
compareArraysExtended
private boolean compareArraysExtended(PdfArray outArray, PdfArray cmpArray, CompareTool.ObjectPath currentPath, CompareTool.CompareResult compareResult) throws java.io.IOException
- Throws:
java.io.IOException
-
compareNamesExtended
private boolean compareNamesExtended(PdfName outName, PdfName cmpName, CompareTool.ObjectPath currentPath, CompareTool.CompareResult compareResult)
-
compareNumbersExtended
private boolean compareNumbersExtended(PdfNumber outNumber, PdfNumber cmpNumber, CompareTool.ObjectPath currentPath, CompareTool.CompareResult compareResult)
-
compareStringsExtended
private boolean compareStringsExtended(PdfString outString, PdfString cmpString, CompareTool.ObjectPath currentPath, CompareTool.CompareResult compareResult)
-
compareLiterals
public boolean compareLiterals(PdfLiteral outLiteral, PdfLiteral cmpLiteral)
-
compareLiteralsExtended
private boolean compareLiteralsExtended(PdfLiteral outLiteral, PdfLiteral cmpLiteral, CompareTool.ObjectPath currentPath, CompareTool.CompareResult compareResult)
-
compareBooleans
public boolean compareBooleans(PdfBoolean outBoolean, PdfBoolean cmpBoolean)
-
compareBooleansExtended
private boolean compareBooleansExtended(PdfBoolean outBoolean, PdfBoolean cmpBoolean, CompareTool.ObjectPath currentPath, CompareTool.CompareResult compareResult)
-
compareXmp
public java.lang.String compareXmp(byte[] xmp1, byte[] xmp2)
-
compareXmp
public java.lang.String compareXmp(byte[] xmp1, byte[] xmp2, boolean ignoreDateAndProducerProperties)
-
compareXmp
public java.lang.String compareXmp(java.lang.String outPdf, java.lang.String cmpPdf)
-
compareXmp
public java.lang.String compareXmp(java.lang.String outPdf, java.lang.String cmpPdf, boolean ignoreDateAndProducerProperties)
-
compareXmls
public boolean compareXmls(byte[] xml1, byte[] xml2) throws javax.xml.parsers.ParserConfigurationException, org.xml.sax.SAXException, java.io.IOException
- Throws:
javax.xml.parsers.ParserConfigurationException
org.xml.sax.SAXException
java.io.IOException
-
compareDocumentInfo
public java.lang.String compareDocumentInfo(java.lang.String outPdf, java.lang.String cmpPdf) throws java.io.IOException
- Throws:
java.io.IOException
-
linksAreSame
private boolean linksAreSame(PdfAnnotation.PdfImportedLink cmpLink, PdfAnnotation.PdfImportedLink outLink)
-
compareLinks
public java.lang.String compareLinks(java.lang.String outPdf, java.lang.String cmpPdf) throws java.io.IOException
- Throws:
java.io.IOException
-
compareTagStructures
public java.lang.String compareTagStructures(java.lang.String outPdf, java.lang.String cmpPdf) throws java.io.IOException, javax.xml.parsers.ParserConfigurationException, org.xml.sax.SAXException
- Throws:
java.io.IOException
javax.xml.parsers.ParserConfigurationException
org.xml.sax.SAXException
-
convertInfo
private java.lang.String[] convertInfo(java.util.HashMap<java.lang.String,java.lang.String> info)
-
compareXmls
public boolean compareXmls(java.lang.String xml1, java.lang.String xml2) throws javax.xml.parsers.ParserConfigurationException, org.xml.sax.SAXException, java.io.IOException
- Throws:
javax.xml.parsers.ParserConfigurationException
org.xml.sax.SAXException
java.io.IOException
-
init
private void init(java.lang.String outPdf, java.lang.String cmpPdf)
-
compareStreams
private boolean compareStreams(java.io.InputStream is1, java.io.InputStream is2) throws java.io.IOException
- Throws:
java.io.IOException
-
-