[
https://issues.apache.org/jira/browse/PDFBOX-1445?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13527497#comment-13527497
]
Andreas Lehmkühler commented on PDFBOX-1445:
--------------------------------------------
Revision 1410890 introduced a regression. PDJpeg#write2OutputStream no longer
writes the image due to a null reference.
I fixed that in revision 1419000.
> /ImageMask true does not work. Patch included.
> ----------------------------------------------
>
> Key: PDFBOX-1445
> URL: https://issues.apache.org/jira/browse/PDFBOX-1445
> Project: PDFBox
> Issue Type: Bug
> Reporter: Dave Smith
> Assignee: Andreas Lehmkühler
> Fix For: 1.8.0
>
> Attachments: PDCcitt.java.patch, PDJpeg.java.patch,
> PDPixelMap.java.patch, PDXObjectImage.java.patch
>
>
> I have the following pdf...
> 10 0 obj
> <<
> /Type /Page
> /MediaBox [ 0 0 612.0 792.0 ]
> /Parent 3 0 R
> /Resources << /XObject << /Obj4 4 0 R /Obj5 5 0 R /Obj6 6 0 R /Obj7 7 0 R >>
> /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >>
> /Contents [ 8 0 R 9 0 R ]
> >>
> endobj
> Which then draws 4 images. The first one is a "base" and then rest are image
> masks
> 9 0 obj
> << /Filter /FlateDecode /Length 121 >>
> stream
> q
> 612.00 0 0 792.00 0.00 0.00 cm
> /Obj4 Do
> Q
> q
> 0.129 g
> 524.16 0 0 556.80 48.00 127.68 cm
> /Obj5 Do
> Q
> q
> 0.302 g
> 220.80 0 0 398.40 48.00 286.08 cm
> /Obj6 Do
> Q
> q
> 0.204 g
> 524.16 0 0 469.44 48.00 185.28 cm
> /Obj7 Do
> Q
> endstream
> endobj
> 4 0 obj
> << /Type /XObject /Subtype /Image /Width 1275 /Height 1650 /BitsPerComponent
> 8
> /ColorSpace /DeviceGray /Filter [ /FlateDecode /DCTDecode ] /Length 50485 >>
> stream
> endstream
> endobj
> 5 0 obj
> << /Type /XObject /Subtype /Image /Width 2184 /Height 2320 /BitsPerComponent
> 1
> /ImageMask true /Filter /CCITTFaxDecode /DecodeParms << /K -1 /Columns 2184
> >>
> /Length 15580 >>
> stream
> etc ...
> The current code simply treats the imagemask as an image. Since this is just
> a 1 bit image it has no Alpha channel it overwrites the existing image and we
> simply get the last image drawn.
> In
> org.apache.pdfbox.util.operator.pagedrawer.Invoke.java
> method
> public void process(PDFOperator operator, List<COSBase> arguments) throws
> IOException
> after
> if (awtImage == null)
> {
> LOG.warn("getRGBImage returned NULL");
> return;//TODO PKOCH
> }
> If you add the following code it fixes the problem. I can not provide the
> sample doc due to privacy reasons.
> /**
> * Spec 8.9.6.2
> * If ImageMask is true then the image is one bit. Black
> means draw the current colour and white means use the colour on the current
> image (ie Mask).
> * Convert the map to an image with an Alpha channel so we
> can lay it on top
> */
> if(image.getImageMask())
> {
> Color currentColour =
> drawer.getGraphicsState().getStrokingColor().getJavaColor();
> final int onColour = 0xff000000 |
> currentColour.getRGB();
> BufferedImage bia = new
> BufferedImage(awtImage.getWidth(),awtImage.getHeight(),BufferedImage.TYPE_INT_ARGB);
> for(int y=0;y<awtImage.getHeight();y++)
> {
> for(int x=0;x<awtImage.getWidth();x++)
> {
> bia.setRGB(x, y, (awtImage.getRGB(x, y)
> & 0x00ffffff) == 0xffffff ? 0x00ffffff : onColour);
> }
> }
> awtImage = bia;
> }
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira