Class CompareTool


  • public class CompareTool
    extends java.lang.Object
    Helper class for tests: uses ghostscript to compare PDFs at a pixel level.
    • 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
      • cannotOpenTargetDirectory

        private static final java.lang.String cannotOpenTargetDirectory
        See Also:
        Constant Field Values
      • unexpectedNumberOfPages

        private static final java.lang.String unexpectedNumberOfPages
        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
      • outPagesRef

        java.util.List<RefKey> outPagesRef
      • 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
    • Constructor Detail

      • CompareTool

        public CompareTool()
    • 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)
      • compareDictionaries

        public boolean compareDictionaries​(PdfDictionary outDict,
                                           PdfDictionary cmpDict)
                                    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
      • compareStreams

        public boolean compareStreams​(PRStream outStream,
                                      PRStream cmpStream)
                               throws java.io.IOException
        Throws:
        java.io.IOException
      • compareArrays

        public boolean compareArrays​(PdfArray outArray,
                                     PdfArray cmpArray)
                              throws java.io.IOException
        Throws:
        java.io.IOException
      • compareNames

        public boolean compareNames​(PdfName outName,
                                    PdfName cmpName)
      • compareNumbers

        public boolean compareNumbers​(PdfNumber outNumber,
                                      PdfNumber cmpNumber)
      • compareStrings

        public boolean compareStrings​(PdfString outString,
                                      PdfString cmpString)
      • compareLiterals

        public boolean compareLiterals​(PdfLiteral outLiteral,
                                       PdfLiteral cmpLiteral)
      • compareBooleans

        public boolean compareBooleans​(PdfBoolean outBoolean,
                                       PdfBoolean cmpBoolean)
      • 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
      • 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