You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@pdfbox.apache.org by Daniel Wilson <wi...@gmail.com> on 2009/12/15 23:05:33 UTC

Re: TestPDFToImage isn't platform independent? (was Re: svn commit: r888550 - in /pdfbox/trunk/src/main/java/org/apache/pdfbox/util/operator: SetNonStrokingSeparation.java SetStrokingSeparation.java)

>>Finally I think TestPDFToImage isn't really useful in different
environments, we are comparing apples and oranges.

This is likely true.  In fact, we've seen some tests fail when byte-level
changes occur due to code changes ... but there is no difference that the
human eye can detect.

When I created that test I considered using a Perceptual Difference tool to
compare the files, rather than a byte-for-byte comparison.  One such tool is
at http://pdiff.sourceforge.net/ .

For a while the byte-for-byte comparison worked well enough.  Perhaps we
should go to PDiff or something similar.  That's more complicated but likely
more accurate for our purposes -- making sure that an improvement to one
rendering doesn't mess up others.

Daniel Wilson

On Tue, Dec 15, 2009 at 1:40 PM, Andreas Lehmkuehler <an...@lehmi.de>wrote:

> Hi,
>
> Adam@swmc.com wrote:
>
>> What do you mean about the bytes not being the same on different
>> platforms?  Doesn't all code in PDFBox interact with the JVM, and then the
>> JVM would have the platform specific code?  The reason I ask is two fold:
>> 1.) This seems to defeat the entire concept of Java code being platform
>> independent.
>>
> The Java code is platform independent, but the implementation of the jdk
> isn't. Some parts of a jdk are written in java, but others are written in
> other languages (mostly C, I guess) and are using system dependent
> libraries, e.g. Java2D, IO etc. Furthermore not only sun publishes jdks for
> different platforms, there is/was also apple, oracle, ibm and ....
> Regarding our example, every jdk will create an image which (hopefully)
> looks the same on each platform, but at a byte-level I doubt every image is
> the same. Finally I think TestPDFToImage isn't really useful in different
> environments, we are comparing apples and oranges.
>
>  2.) Because I'm compiling PDFBox in Windows and deploying to Linux and I
>> haven't seen any issues and want to make sure it stays that way.  If this
>> means I should compile on Linux, then I will.
>>
> As I said above, regarding the java code everything is fine.
>
>  Thanks,
>> Adam
>>
>>
>>
>> From:
>> Andreas Lehmkuehler <an...@lehmi.de>
>> To:
>> dev@pdfbox.apache.org
>> Date:
>> 12/14/2009 10:56
>> Subject:
>> Re: svn commit: r888550 - in
>> /pdfbox/trunk/src/main/java/org/apache/pdfbox/util/operator:
>> SetNonStrokingSeparation.java SetStrokingSeparation.java
>>
>>
>>
>> Hi,
>>
>>
>> Jukka Zitting wrote:
>>
>>> Hi,
>>>
>>> On Tue, Dec 8, 2009 at 8:53 PM,  <le...@apache.org> wrote:
>>>
>>>> ---
>>>>
>>> pdfbox/trunk/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingSeparation.java
>> (original)
>>
>>> +++
>>>>
>>> pdfbox/trunk/src/main/java/org/apache/pdfbox/util/operator/SetNonStrokingSeparation.java
>> Tue Dec  8 19:53:17 2009
>>
>>> @@ -56,17 +56,10 @@
>>>>    {
>>>>        PDColorState colorInstance =
>>>>
>>> context.getGraphicsState().getNonStrokingColor();
>>
>>>        PDColorSpace colorSpace = colorInstance.getColorSpace();
>>>> -        List<COSBase> argList = arguments;
>>>>
>>>> -        if (colorSpace instanceof PDSeparation)
>>>> -        {
>>>> -            PDSeparation sep = (PDSeparation) colorSpace;
>>>> -            colorSpace = sep.getAlternateColorSpace();
>>>> -            argList = sep.getColorValues().toList();
>>>> -        }
>>>> -
>>>>        if (colorSpace != null)
>>>>        {
>>>> +            List<COSBase> argList = arguments;
>>>>            OperatorProcessor newOperator = null;
>>>>            if (colorSpace instanceof PDDeviceGray)
>>>>            {
>>>> @@ -91,6 +84,9 @@
>>>>            else if (colorSpace instanceof PDSeparation)
>>>>            {
>>>>                newOperator = new SetNonStrokingSeparation();
>>>> +                PDSeparation sep = (PDSeparation) colorSpace;
>>>> +                colorSpace = sep.getAlternateColorSpace();
>>>> +                argList = sep.getColorValues().toList();
>>>>            }
>>>>
>>>>            if (newOperator != null)
>>>>
>>> I'm not exactly sure what goes wrong here, but I started getting a
>>> StackOverflowException from the TestPDFToImage test case after this
>>> change. I reverted this part of the code in revision 889752.
>>>
>> I wanted to simplify the code, but my changes are calling a new
>> SetNonStrokingSeparation-operator within a
>> SetNonStrokingSeparation-operator, which leads to a stack overflow because
>> of the recursion.
>> I've fixed the same issue in SetStrokingSeparation (890429) and another
>> issue in SetStrokingColor (890428).
>>
>>  PS. TestPDFToImage still doesn't pass for me by default, and I only
>>> noted this change of failure because I was looking at why the test
>>> fails for me in the first place.
>>>
>> I had the same experience here on my linux box. Perhaps, it's a plattform
>> dependent issue. The images are created by platform dependent code within
>> the jdk and therefore probably not every created byte is the same on
>> different
>> platforms.
>>
>>  BR,
>>>
>>> Jukka Zitting
>>>
>>
>> BR
>> Andreas Lehmkühler
>>
>
> BR
> Andreas Lehmkühler
>