Package com.itextpdf.testutils
Class CompareTool
- java.lang.Object
-
- com.itextpdf.testutils.CompareTool
-
public class CompareTool extends java.lang.ObjectHelper class for tests: uses ghostscript to compare PDFs at a pixel level.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) classCompareTool.CmpMarkedContentRenderFilter(package private) classCompareTool.CmpPngFileFilter(package private) classCompareTool.CmpTaggedPdfReaderToolprotected classCompareTool.CompareResult(package private) classCompareTool.ImageNameComparatorprivate classCompareTool.ObjectPath(package private) classCompareTool.PngFileFilterprivate static classCompareTool.SafeEmptyEntityResolver
-
Field Summary
Fields Modifier and Type Field Description private booleanabsoluteErrorprivate static java.lang.StringcannotOpenTargetDirectoryprivate java.lang.StringcmpImage(package private) java.util.List<PdfDictionary>cmpPages(package private) java.util.List<RefKey>cmpPagesRefprivate java.lang.StringcmpPdfprivate java.lang.StringcmpPdfNameprivate intcompareByContentErrorsLimitprivate java.lang.StringcompareExecprivate java.lang.StringcompareParamsprivate static java.lang.StringdifferentPagesprivate doublefloatComparisonErrorprivate booleangenerateCompareByContentXmlReportprivate java.lang.StringgsExecprivate static java.lang.StringgsFailedprivate java.lang.StringgsParamsprivate static java.lang.StringignoredAreasPrefixprivate java.lang.StringoutImage(package private) java.util.List<PdfDictionary>outPages(package private) java.util.List<RefKey>outPagesRefprivate java.lang.StringoutPdfprivate java.lang.StringoutPdfNameprivate static java.util.regex.PatternpageListRegexpprivate static java.lang.StringpageNumberPatternprivate static java.lang.StringrenderedImageExtensionprivate static java.lang.StringtempFilePrefixprivate static java.lang.StringundefinedGsPathprivate static java.lang.StringunexpectedNumberOfPagesprivate java.lang.StringxmlReportName
-
Constructor Summary
Constructors Constructor Description CompareTool()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private voidaddPagesFromDict(PdfObject dictRef, java.util.List<PdfDictionary> pages, java.util.List<RefKey> pagesRef)java.lang.Stringcompare(java.lang.String outPdf, java.lang.String cmpPdf, java.lang.String outPath, java.lang.String differenceImagePrefix)java.lang.Stringcompare(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.Stringcompare(java.lang.String outPath, java.lang.String differenceImagePrefix, java.util.Map<java.lang.Integer,java.util.List<Rectangle>> ignoredAreas)private java.lang.Stringcompare(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)booleancompareArrays(PdfArray outArray, PdfArray cmpArray)private booleancompareArraysExtended(PdfArray outArray, PdfArray cmpArray, CompareTool.ObjectPath currentPath, CompareTool.CompareResult compareResult)booleancompareBooleans(PdfBoolean outBoolean, PdfBoolean cmpBoolean)private booleancompareBooleansExtended(PdfBoolean outBoolean, PdfBoolean cmpBoolean, CompareTool.ObjectPath currentPath, CompareTool.CompareResult compareResult)java.lang.StringcompareByContent(java.lang.String outPdf, java.lang.String cmpPdf, java.lang.String outPath, java.lang.String differenceImagePrefix)java.lang.StringcompareByContent(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.StringcompareByContent(java.lang.String outPath, java.lang.String differenceImagePrefix, java.util.Map<java.lang.Integer,java.util.List<Rectangle>> ignoredAreas)booleancompareContentStreamsByParsing(PdfObject outObj, PdfObject cmpObj)booleancompareContentStreamsByParsing(PdfObject outObj, PdfObject cmpObj, PdfDictionary outResources, PdfDictionary cmpResources)private booleancompareContentStreamsByParsingExtended(PdfObject outObj, PdfObject cmpObj, PdfDictionary outResources, PdfDictionary cmpResources, CompareTool.ObjectPath currentPath, CompareTool.CompareResult compareResult)booleancompareDictionaries(PdfDictionary outDict, PdfDictionary cmpDict)private booleancompareDictionariesExtended(PdfDictionary outDict, PdfDictionary cmpDict, CompareTool.ObjectPath currentPath, CompareTool.CompareResult compareResult)java.lang.StringcompareDocumentInfo(java.lang.String outPdf, java.lang.String cmpPdf)private booleancompareInlineImagesExtended(PdfContentParser outPs, PdfContentParser cmpPs, PdfDictionary outDict, PdfDictionary cmpDict, CompareTool.ObjectPath currentPath, CompareTool.CompareResult compareResult)java.lang.StringcompareLinks(java.lang.String outPdf, java.lang.String cmpPdf)booleancompareLiterals(PdfLiteral outLiteral, PdfLiteral cmpLiteral)private booleancompareLiteralsExtended(PdfLiteral outLiteral, PdfLiteral cmpLiteral, CompareTool.ObjectPath currentPath, CompareTool.CompareResult compareResult)booleancompareNames(PdfName outName, PdfName cmpName)private booleancompareNamesExtended(PdfName outName, PdfName cmpName, CompareTool.ObjectPath currentPath, CompareTool.CompareResult compareResult)booleancompareNumbers(PdfNumber outNumber, PdfNumber cmpNumber)private booleancompareNumbersExtended(PdfNumber outNumber, PdfNumber cmpNumber, CompareTool.ObjectPath currentPath, CompareTool.CompareResult compareResult)private booleancompareObjects(PdfObject outObj, PdfObject cmpObj, CompareTool.ObjectPath currentPath, CompareTool.CompareResult compareResult)booleancompareStreams(PRStream outStream, PRStream cmpStream)private booleancompareStreams(java.io.InputStream is1, java.io.InputStream is2)private booleancompareStreamsExtended(PRStream outStream, PRStream cmpStream, CompareTool.ObjectPath currentPath, CompareTool.CompareResult compareResult)booleancompareStrings(PdfString outString, PdfString cmpString)private booleancompareStringsExtended(PdfString outString, PdfString cmpString, CompareTool.ObjectPath currentPath, CompareTool.CompareResult compareResult)java.lang.StringcompareTagStructures(java.lang.String outPdf, java.lang.String cmpPdf)booleancompareXmls(byte[] xml1, byte[] xml2)booleancompareXmls(java.lang.String xml1, java.lang.String xml2)java.lang.StringcompareXmp(byte[] xmp1, byte[] xmp2)java.lang.StringcompareXmp(byte[] xmp1, byte[] xmp2, boolean ignoreDateAndProducerProperties)java.lang.StringcompareXmp(java.lang.String outPdf, java.lang.String cmpPdf)java.lang.StringcompareXmp(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.StringgetXmlReportName()private voidinit(java.lang.String outPdf, java.lang.String cmpPdf)private booleanlinksAreSame(PdfAnnotation.PdfImportedLink cmpLink, PdfAnnotation.PdfImportedLink outLink)private voidloadPagesFromReader(PdfReader reader, java.util.List<PdfDictionary> pages, java.util.List<RefKey> pagesRef)private intrunGhostscriptAndGetExitCode(java.lang.String replacementPdf, java.lang.String replacementImagesDirectory)CompareToolsetCompareByContentErrorsLimit(int compareByContentMaxErrorCount)Sets the maximum errors count which will be returned as the result of the comparison.CompareToolsetFloatAbsoluteError(float error)Sets the absolute error parameter which will be used in floating point numbers comparison.CompareToolsetFloatRelativeError(float error)Sets the relative error parameter which will be used in floating point numbers comparison.voidsetGenerateCompareByContentXmlReport(boolean generateCompareByContentXmlReport)voidsetXmlReportName(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.IOExceptionjava.lang.InterruptedExceptionDocumentException
-
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.IOExceptionjava.lang.InterruptedExceptionDocumentException
-
runGhostscriptAndGetExitCode
private int runGhostscriptAndGetExitCode(java.lang.String replacementPdf, java.lang.String replacementImagesDirectory) throws java.io.IOException, java.lang.InterruptedException- Throws:
java.io.IOExceptionjava.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.IOExceptionjava.lang.InterruptedExceptionDocumentException
-
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.IOExceptionjava.lang.InterruptedExceptionDocumentException
-
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:
DocumentExceptionjava.lang.InterruptedExceptionjava.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:
DocumentExceptionjava.lang.InterruptedExceptionjava.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:
DocumentExceptionjava.lang.InterruptedExceptionjava.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.ParserConfigurationExceptionorg.xml.sax.SAXExceptionjava.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.IOExceptionjavax.xml.parsers.ParserConfigurationExceptionorg.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.ParserConfigurationExceptionorg.xml.sax.SAXExceptionjava.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
-
-