pdfbox-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Lachezar Dobrev <l.dob...@gmail.com>
Subject Re: Replacing images in PDFs.
Date Wed, 02 Sep 2015 08:28:01 GMT

2015-09-01 19:31 GMT+03:00 Tilman Hausherr <THausherr@t-online.de>:

> Am 01.09.2015 um 11:26 schrieb Lachezar Dobrev:
>>    Hello all.
>>    I'm tasked with providing a service to generate PDFs from template PDFs
>> by replacing text place holders and image place holders with data from a
>> database.
>> ​  For replacing text we decided to use Form Field​s to keep minimal
>> effect
>> on the page layout, and to avoid problems with texts being split into
>> parts
>> by the editor.
>>    Replacing images is also achievable using
>> COSStream.replaceWithStream(COSStream).
>>    Q1: The replaceWithStream method is being deprecated. What can I use to
>> do the same thing in PDFBox 2? I tried stream-copying, but I get a
>> "WARNING: DCTFilter#encode is not implemented yet, skipping this stream."
>> and the image disappears from the output file.
> If you want to copy a JPEG, you should use createRawInputStream().
> The JPEG should be of the same size and same colorspace than the original
> image.
> Alternatively - just put nothing in the templare, and simply put an image
> of whatever size you want with traditional methods (see image handling in
> PDPageContentStream)

​  The image in the template PDF is needed to tell what to put where with
what size.
  Some time after I asked the question I found out I can create a COSStream
using LosslessFactory.createFromImage(doc, img).getCOSStream()​
​. Afterwards I called createOutputStream(COSBase filter) with the filter
of the new stream, and copied from one to the other. The replacing image is
already the same size, but the colour profile may differ (Templates
commonly contain a blank black-and-white all-white image as a place holder).

   Q2: Is there any way to identify which image is what? Form fields have
>> Mapping Name that I can use to detect which field needs to contain what,
>> but I can not find a way to get some user-controllable identifier for an
>> image. Any thoughts?
> Images do have a name in the resources. So it should work if you do the
> template yourself.

​  I could not find how to obtain that. I don't see a getName() in
PDImageXObject. Can you point me to where I should look for that?​


​  Thank you for the patience.​

​  Lachezar​

  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message