[ 
https://issues.apache.org/jira/browse/PDFBOX-5590?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17717721#comment-17717721
 ] 

Tilman Hausherr commented on PDFBOX-5590:
-----------------------------------------

If this code works for you then use it for yourself (I had my own fork for 
years before joining the project team, and my own modification never made it 
into the code, because another user had a better solution). We can't use it 
because it isn't a general solution. It would have a terrible performance for 
ordinary inline images (usually tiny ones). Not all users have access to temp 
space. So there would be much more to do.
We have a scratch buffer file concept, however at this time it isn't available 
for PDInlineImage.
We would have to change many classes.
But you did find an interesting problem: should the temporary 
ByteArrayOutputStream objects in PDInlineImage, PDStream and COSInputStream use 
space from the scratch buffer instead of from memory?
It would make sense for terrible files like yours.

Re "Subsequent operations are sub-sampled" no they're not, despite that the 
subsampling parameter is passed to the filter. If you look at the 
RunLengthDecodeFilter class, you'll notice that the "options" parameter doesn't 
exist in the methods. Because of that, this is the part that is called for RLE:
{code}
public DecodeResult decode(InputStream encoded, OutputStream decoded, 
COSDictionary parameters,
                                                   int index, DecodeOptions 
options) throws IOException
{
        return decode(encoded, decoded, parameters, index);
}
{code}
Your file is rather recent, it was created on 14.4.2023 by CATIA V6. You should 
file a bug report with them, and point them to the PDF specification: "Because 
the inline format gives the reader less flexibility in managing the image data, 
it shall be used only for small images (4 KB or less)."
It's also a terrible idea to store a huge vector graphic as a raster image.


> Java heap space
> ---------------
>
>                 Key: PDFBOX-5590
>                 URL: https://issues.apache.org/jira/browse/PDFBOX-5590
>             Project: PDFBox
>          Issue Type: Bug
>          Components: Rendering
>    Affects Versions: 2.0.28
>            Reporter: liu
>            Priority: Major
>         Attachments: 1-1.jpg, 1.jpg, 2.jpg, MyPDInlineImage.java, 
> screenshot-1.png, screenshot-2.png, screenshot-3.png, screenshot-4.png, 
> screenshot-5.png, screenshot-6.png, test.pdf
>
>
> jvm:
> -Xmx1000M
> -Xms1000M
> -XX:-PrintGCDetails
> -XX:+HeapDumpOnOutOfMemoryError
> -XX:HeapDumpPath=C:\Users\LYCIT\Desktop
> demo:
> public static void main(String[] args) throws IOException {
>               File file = new File("C:\\Users\\LYCIT\\Desktop\\test.pdf");
>               final PDDocument load = PDDocument.load(file, 
> MemoryUsageSetting.setupTempFileOnly(-1)
>                               .setTempDir(new File("D:\\fcs\\test")));
>               PDFRenderer renderer = new PDFRenderer(load);
>               renderer.setSubsamplingAllowed(true);
>               float scale = 1.2f;
>               try {
>                       BufferedImage bufferedImage = renderer.renderImage(0, 
> scale, ImageType.RGB);
>               } catch (Exception e) {
>                       System.out.println(e);
>               }
>       }



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@pdfbox.apache.org
For additional commands, e-mail: dev-h...@pdfbox.apache.org

Reply via email to