You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2015/10/02 07:35:44 UTC
svn commit: r1706346 - in
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics:
color/PDColorSpace.java image/PDInlineImage.java
Author: tilman
Date: Fri Oct 2 05:35:44 2015
New Revision: 1706346
URL: http://svn.apache.org/viewvc?rev=1706346&view=rev
Log:
PDFBOX-3003: fix handling of inline images, as suggested by Evgeniy Muravitskiy; move out handling of abbreviated color space names
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorSpace.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDInlineImage.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorSpace.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorSpace.java?rev=1706346&r1=1706345&r2=1706346&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorSpace.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorSpace.java Fri Oct 2 05:35:44 2015
@@ -99,15 +99,15 @@ public abstract class PDColorSpace imple
}
// built-in color spaces
- if (name == COSName.DEVICECMYK || name == COSName.CMYK)
+ if (name == COSName.DEVICECMYK)
{
return PDDeviceCMYK.INSTANCE;
}
- else if (name == COSName.DEVICERGB || name == COSName.RGB)
+ else if (name == COSName.DEVICERGB)
{
return PDDeviceRGB.INSTANCE;
}
- else if (name == COSName.DEVICEGRAY || name == COSName.G)
+ else if (name == COSName.DEVICEGRAY)
{
return PDDeviceGray.INSTANCE;
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDInlineImage.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDInlineImage.java?rev=1706346&r1=1706345&r2=1706346&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDInlineImage.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDInlineImage.java Fri Oct 2 05:35:44 2015
@@ -132,8 +132,7 @@ public final class PDInlineImage impleme
if (cs != null)
{
- // TODO: handling of abbreviated color space names belongs here, not in the factory
- return PDColorSpace.create(cs, resources);
+ return create(cs);
}
else if (isStencil())
{
@@ -146,6 +145,61 @@ public final class PDInlineImage impleme
throw new IOException("could not determine color space");
}
}
+
+ private PDColorSpace create(COSBase cs) throws IOException
+ {
+ if (cs instanceof COSName)
+ {
+ if (COSName.RGB.equals(cs))
+ {
+ return PDColorSpace.create(COSName.DEVICERGB, resources);
+ }
+ else if (COSName.CMYK.equals(cs))
+ {
+ return PDColorSpace.create(COSName.DEVICECMYK, resources);
+ }
+ else if (COSName.G.equals(cs))
+ {
+ return PDColorSpace.create(COSName.DEVICEGRAY, resources);
+ }
+ else
+ {
+ return PDColorSpace.create(cs, resources);
+ }
+ }
+ else if (cs instanceof COSArray && ((COSArray) cs).size() > 1)
+ {
+ COSBase csType = ((COSArray) cs).get(0);
+ if (COSName.I.equals(csType) || COSName.INDEXED.equals(csType))
+ {
+ COSArray array = new COSArray();
+ array.addAll((COSArray) cs);
+ array.set(0, COSName.INDEXED);
+ COSBase cs1 = ((COSArray) cs).get(1);
+ if (COSName.RGB.equals(cs1))
+ {
+ array.set(1, COSName.DEVICERGB);
+ }
+ else if (COSName.CMYK.equals(cs1))
+ {
+ array.set(1, COSName.DEVICECMYK);
+ }
+ else if (COSName.G.equals(cs1))
+ {
+ array.set(1, COSName.DEVICEGRAY);
+ }
+ return PDColorSpace.create(array, resources);
+ }
+ else
+ {
+ throw new IOException("Illegal type of color space in inline image: " + csType);
+ }
+ }
+ else
+ {
+ throw new IOException("Illegal type of object for color space: " + cs);
+ }
+ }
@Override
public void setColorSpace(PDColorSpace colorSpace)