[jira] [Comment Edited] (PDFBOX-5462) OutOfMemoryError when watermaking in 3.0.0-RC1
[ https://issues.apache.org/jira/browse/PDFBOX-5462?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17555971#comment-17555971 ] Marian Ion edited comment on PDFBOX-5462 at 6/18/22 8:10 PM: - Hello [~lehmi], I've added the code; a 4k pages PDF file may be obtained running the enclosed script with the *10* parameter, i.e. {code:java} ./create_big_pdf.sh 10 {code} Then # you may compile the project {code:java} mvn -U clean package{code} then # you may try to watermark the previously generated */tmp/big.pdf* file by running {code:java} java -jar target/my-pdf-test.jar /tmp/big.pdf /tmp/result.pdf{code} You may add various options if necessary ({*}-Xmx...{*}). was (Author: JIRAUSER291146): Hello [~lehmi], I've added the code; a 4k pages PDF file may be obtained running the enclosed script with the *10* parameter, i.e. {code:java} ./create_big_pdf.sh 10 {code} Then # you may compile the project {code:java} mvn -U clean package{code} then # you may try to watermark the generated */tmp/big.pdf* file by running {code:java} java -jar target/my-pdf-test.jar /tmp/big.pdf /tmp/result.pdf{code} You may add various options if necessary (*-Xmx...*). > OutOfMemoryError when watermaking in 3.0.0-RC1 > -- > > Key: PDFBOX-5462 > URL: https://issues.apache.org/jira/browse/PDFBOX-5462 > Project: PDFBox > Issue Type: Bug >Affects Versions: 3.0.0 PDFBox >Reporter: Marian Ion >Priority: Major > Attachments: TestPdfBox.tgz > > > I am using the Maven *3.0.0-RC1* version and I encounter the following error > when watermarking a 5120 pages file: > {quote} java.lang.OutOfMemoryError: Java heap space: failed reallocation of > scalar replaced objects > {quote} > > However, the *2.0.26* version code works without problem! > The code is basically this : > {code:java} > private static final PDFont PDF_FONT = PDType1Font.HELVETICA; > memoryUsageSetting = MemoryUsageSetting.setupMixed(2 * ONE_GIGA, 40 * > ONE_GIGA); > //try (PDDocument pdfDocument = PDDocument.load(is, memoryUsageSetting)) { > // 2.0.26 > try (PDDocument pdfDocument = Loader.loadPDF(inputStream, > memoryUsageSetting)) { // 3.0.0-RC1 > int nbPages = addWatermark(watermarkText, pdfDocument); > pdfDocument.save(os); > } > ... > private int addWatermark(String watermarkText, PDDocument document) throws > IOException { > int numberOfPages = document.getNumberOfPages(); > System.out.printf("Start adding watermark on a %d pages PDF > document%n", numberOfPages); > long start = System.nanoTime(); > int pageIndex = 0; > for(PDPage page : document.getPages()) { > ++pageIndex; > try (PDPageContentStream cs = new PDPageContentStream(document, > page, PDPageContentStream.AppendMode.APPEND, true, true)) { > float width = page.getMediaBox().getWidth(); > float height = page.getMediaBox().getHeight(); > int rotation = page.getRotation(); > switch(rotation) { > case 90: > width = page.getMediaBox().getHeight(); > height = page.getMediaBox().getWidth(); > > cs.transform(Matrix.getRotateInstance(Math.toRadians(90), height, 0)); > break; > case 180: > > cs.transform(Matrix.getRotateInstance(Math.toRadians(180), width, height)); > break; > case 270: > width = page.getMediaBox().getHeight(); > height = page.getMediaBox().getWidth(); > > cs.transform(Matrix.getRotateInstance(Math.toRadians(270), 0, width)); > break; > default: > break; > } > double stringWidth = > (double)PDF_FONT.getStringWidth(watermarkText) / 1000 * FONT_HEIGHT; > double diagonalLength = Math.sqrt((double)width * width + > (double)height * height); > double angle = Math.atan2(height, width); > cs.transform(Matrix.getRotateInstance(angle, 0, 0)); > cs.setFont(PDF_FONT, (float)FONT_HEIGHT); > //cs.setRenderingMode(RenderingMode.STROKE); // for "hollow" > effect > PDExtendedGraphicsState gs = new PDExtendedGraphicsState(); > gs.setNonStrokingAlphaConstant(0.2f); > gs.setStrokingAlphaConstant(0.2f); > gs.setBlendMode(BlendMode.MULTIPLY); >
[jira] [Commented] (PDFBOX-5462) OutOfMemoryError when watermaking in 3.0.0-RC1
[ https://issues.apache.org/jira/browse/PDFBOX-5462?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17555971#comment-17555971 ] Marian Ion commented on PDFBOX-5462: Hello [~lehmi], I've added the code; a 4k pages PDF file may be obtained running the enclosed script with the *10* parameter, i.e. {code:java} ./create_big_pdf.sh 10 {code} Then # you may compile the project {code:java} mvn -U clean package{code} then # you may try to watermark the generated */tmp/big.pdf* file by running {code:java} java -jar target/my-pdf-test.jar /tmp/big.pdf /tmp/result.pdf{code} You may add various options if necessary (*-Xmx...*). > OutOfMemoryError when watermaking in 3.0.0-RC1 > -- > > Key: PDFBOX-5462 > URL: https://issues.apache.org/jira/browse/PDFBOX-5462 > Project: PDFBox > Issue Type: Bug >Affects Versions: 3.0.0 PDFBox >Reporter: Marian Ion >Priority: Major > Attachments: TestPdfBox.tgz > > > I am using the Maven *3.0.0-RC1* version and I encounter the following error > when watermarking a 5120 pages file: > {quote} java.lang.OutOfMemoryError: Java heap space: failed reallocation of > scalar replaced objects > {quote} > > However, the *2.0.26* version code works without problem! > The code is basically this : > {code:java} > private static final PDFont PDF_FONT = PDType1Font.HELVETICA; > memoryUsageSetting = MemoryUsageSetting.setupMixed(2 * ONE_GIGA, 40 * > ONE_GIGA); > //try (PDDocument pdfDocument = PDDocument.load(is, memoryUsageSetting)) { > // 2.0.26 > try (PDDocument pdfDocument = Loader.loadPDF(inputStream, > memoryUsageSetting)) { // 3.0.0-RC1 > int nbPages = addWatermark(watermarkText, pdfDocument); > pdfDocument.save(os); > } > ... > private int addWatermark(String watermarkText, PDDocument document) throws > IOException { > int numberOfPages = document.getNumberOfPages(); > System.out.printf("Start adding watermark on a %d pages PDF > document%n", numberOfPages); > long start = System.nanoTime(); > int pageIndex = 0; > for(PDPage page : document.getPages()) { > ++pageIndex; > try (PDPageContentStream cs = new PDPageContentStream(document, > page, PDPageContentStream.AppendMode.APPEND, true, true)) { > float width = page.getMediaBox().getWidth(); > float height = page.getMediaBox().getHeight(); > int rotation = page.getRotation(); > switch(rotation) { > case 90: > width = page.getMediaBox().getHeight(); > height = page.getMediaBox().getWidth(); > > cs.transform(Matrix.getRotateInstance(Math.toRadians(90), height, 0)); > break; > case 180: > > cs.transform(Matrix.getRotateInstance(Math.toRadians(180), width, height)); > break; > case 270: > width = page.getMediaBox().getHeight(); > height = page.getMediaBox().getWidth(); > > cs.transform(Matrix.getRotateInstance(Math.toRadians(270), 0, width)); > break; > default: > break; > } > double stringWidth = > (double)PDF_FONT.getStringWidth(watermarkText) / 1000 * FONT_HEIGHT; > double diagonalLength = Math.sqrt((double)width * width + > (double)height * height); > double angle = Math.atan2(height, width); > cs.transform(Matrix.getRotateInstance(angle, 0, 0)); > cs.setFont(PDF_FONT, (float)FONT_HEIGHT); > //cs.setRenderingMode(RenderingMode.STROKE); // for "hollow" > effect > PDExtendedGraphicsState gs = new PDExtendedGraphicsState(); > gs.setNonStrokingAlphaConstant(0.2f); > gs.setStrokingAlphaConstant(0.2f); > gs.setBlendMode(BlendMode.MULTIPLY); > cs.setGraphicsStateParameters(gs); > // some API weirdness here. When int, range is 0..255. > // when float, this would be 0..1f > cs.setNonStrokingColor(0f, 0, 0); > cs.setStrokingColor(0f, 0, 0); // black > float x = (float)((diagonalLength - stringWidth) / 2); // > "horizontal" position in rotated world > float y = (float)(-FONT_HEIGHT / 4); // 4 is a trial-and-error > thing, this lowers the text a bit > cs.beginText(); >
[jira] [Comment Edited] (PDFBOX-5462) OutOfMemoryError when watermaking in 3.0.0-RC1
[ https://issues.apache.org/jira/browse/PDFBOX-5462?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17555942#comment-17555942 ] Marian Ion edited comment on PDFBOX-5462 at 6/18/22 8:00 PM: - With a smaller PDF (512 pages only) it crashes when saving the result, the heap dump displays {code} main at java.lang.OutOfMemoryError.()V (OutOfMemoryError.java:48) at java.nio.HeapByteBuffer.duplicate()Ljava/nio/ByteBuffer; (HeapByteBuffer.java:131) at org.apache.pdfbox.io.RandomAccessReadBuffer.(Lorg/apache/pdfbox/io/RandomAccessReadBuffer;)V (RandomAccessReadBuffer.java:135) at org.apache.pdfbox.io.RandomAccessReadBuffer.createView(JJ)Lorg/apache/pdfbox/io/RandomAccessReadView; (RandomAccessReadBuffer.java:363) at org.apache.pdfbox.pdfparser.COSParser.createRandomAccessReadView(JJ)Lorg/apache/pdfbox/io/RandomAccessReadView; (COSParser.java:585) at org.apache.pdfbox.cos.COSDocument.createCOSStream(Lorg/apache/pdfbox/cos/COSDictionary;JJ)Lorg/apache/pdfbox/cos/COSStream; (COSDocument.java:185) at org.apache.pdfbox.pdfparser.COSParser.parseCOSStream(Lorg/apache/pdfbox/cos/COSDictionary;)Lorg/apache/pdfbox/cos/COSStream; (COSParser.java:914) at org.apache.pdfbox.pdfparser.COSParser.parseFileObject(Ljava/lang/Long;Lorg/apache/pdfbox/cos/COSObjectKey;)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:693) at org.apache.pdfbox.pdfparser.COSParser.parseObjectDynamically(Lorg/apache/pdfbox/cos/COSObjectKey;Z)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:615) at org.apache.pdfbox.pdfparser.COSParser.dereferenceCOSObject(Lorg/apache/pdfbox/cos/COSObject;)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:573) at org.apache.pdfbox.cos.COSObject.getObject()Lorg/apache/pdfbox/cos/COSBase; (COSObject.java:121) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addElements(Ljava/util/Iterator;)V (COSWriterCompressionPool.java:197) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addStructure(Lorg/apache/pdfbox/cos/COSBase;)V (COSWriterCompressionPool.java:174) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addElements(Ljava/util/Iterator;)V (COSWriterCompressionPool.java:199) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addStructure(Lorg/apache/pdfbox/cos/COSBase;)V (COSWriterCompressionPool.java:174) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addElements(Ljava/util/Iterator;)V (COSWriterCompressionPool.java:199) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addStructure(Lorg/apache/pdfbox/cos/COSBase;)V (COSWriterCompressionPool.java:174) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addElements(Ljava/util/Iterator;)V (COSWriterCompressionPool.java:188) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addStructure(Lorg/apache/pdfbox/cos/COSBase;)V (COSWriterCompressionPool.java:174) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addElements(Ljava/util/Iterator;)V (COSWriterCompressionPool.java:199) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addStructure(Lorg/apache/pdfbox/cos/COSBase;)V (COSWriterCompressionPool.java:170) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addElements(Ljava/util/Iterator;)V (COSWriterCompressionPool.java:188) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addStructure(Lorg/apache/pdfbox/cos/COSBase;)V (COSWriterCompressionPool.java:174) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addElements(Ljava/util/Iterator;)V (COSWriterCompressionPool.java:199) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addStructure(Lorg/apache/pdfbox/cos/COSBase;)V (COSWriterCompressionPool.java:174) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.(Lorg/apache/pdfbox/pdmodel/PDDocument;Lorg/apache/pdfbox/pdfwriter/compress/CompressParameters;)V (COSWriterCompressionPool.java:83) at org.apache.pdfbox.pdfwriter.COSWriter.doWriteBodyCompressed(Lorg/apache/pdfbox/cos/COSDocument;)V (COSWriter.java:474) at org.apache.pdfbox.pdfwriter.COSWriter.visitFromDocument(Lorg/apache/pdfbox/cos/COSDocument;)V (COSWriter.java:1260) at org.apache.pdfbox.cos.COSDocument.accept(Lorg/apache/pdfbox/cos/ICOSVisitor;)V (COSDocument.java:402) at org.apache.pdfbox.pdfwriter.COSWriter.write(Lorg/apache/pdfbox/pdmodel/PDDocument;Lorg/apache/pdfbox/pdmodel/interactive/digitalsignature/SignatureInterface;)V (COSWriter.java:1542) at org.apache.pdfbox.pdfwriter.COSWriter.write(Lorg/apache/pdfbox/pdmodel/PDDocument;)V (COSWriter.java:1418) at org.apache.pdfbox.pdmodel.PDDocument.save(Ljava/io/OutputStream;Lorg/apache/pdfbox/pdfwriter/compress/CompressParameters;)V (PDDocument.java:1018) at org.apache.pdfbox.pdmodel.PDDocument.save(Ljava/io/OutputStream;)V
[jira] [Commented] (PDFBOX-5462) OutOfMemoryError when watermaking in 3.0.0-RC1
[ https://issues.apache.org/jira/browse/PDFBOX-5462?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17555945#comment-17555945 ] Andreas Lehmkühler commented on PDFBOX-5462: I ran a test with a pdf of 5240 pages (I've simply merged an old version of the pdf specs 4 times) and it works fine without any issues. I've used the {{AddWatermarkText}} from the examples package and I didn't add any further parameters. Maybe there is something special about the pdf. [~john75] Yes, please attach the code and a sam,ple pdf to the ticket > OutOfMemoryError when watermaking in 3.0.0-RC1 > -- > > Key: PDFBOX-5462 > URL: https://issues.apache.org/jira/browse/PDFBOX-5462 > Project: PDFBox > Issue Type: Bug >Affects Versions: 3.0.0 PDFBox >Reporter: Marian Ion >Priority: Major > Attachments: TestPdfBox.tgz > > > I am using the Maven *3.0.0-RC1* version and I encounter the following error > when watermarking a 5120 pages file: > {quote} java.lang.OutOfMemoryError: Java heap space: failed reallocation of > scalar replaced objects > {quote} > > However, the *2.0.26* version code works without problem! > The code is basically this : > {code:java} > private static final PDFont PDF_FONT = PDType1Font.HELVETICA; > memoryUsageSetting = MemoryUsageSetting.setupMixed(2 * ONE_GIGA, 40 * > ONE_GIGA); > //try (PDDocument pdfDocument = PDDocument.load(is, memoryUsageSetting)) { > // 2.0.26 > try (PDDocument pdfDocument = Loader.loadPDF(inputStream, > memoryUsageSetting)) { // 3.0.0-RC1 > int nbPages = addWatermark(watermarkText, pdfDocument); > pdfDocument.save(os); > } > ... > private int addWatermark(String watermarkText, PDDocument document) throws > IOException { > int numberOfPages = document.getNumberOfPages(); > System.out.printf("Start adding watermark on a %d pages PDF > document%n", numberOfPages); > long start = System.nanoTime(); > int pageIndex = 0; > for(PDPage page : document.getPages()) { > ++pageIndex; > try (PDPageContentStream cs = new PDPageContentStream(document, > page, PDPageContentStream.AppendMode.APPEND, true, true)) { > float width = page.getMediaBox().getWidth(); > float height = page.getMediaBox().getHeight(); > int rotation = page.getRotation(); > switch(rotation) { > case 90: > width = page.getMediaBox().getHeight(); > height = page.getMediaBox().getWidth(); > > cs.transform(Matrix.getRotateInstance(Math.toRadians(90), height, 0)); > break; > case 180: > > cs.transform(Matrix.getRotateInstance(Math.toRadians(180), width, height)); > break; > case 270: > width = page.getMediaBox().getHeight(); > height = page.getMediaBox().getWidth(); > > cs.transform(Matrix.getRotateInstance(Math.toRadians(270), 0, width)); > break; > default: > break; > } > double stringWidth = > (double)PDF_FONT.getStringWidth(watermarkText) / 1000 * FONT_HEIGHT; > double diagonalLength = Math.sqrt((double)width * width + > (double)height * height); > double angle = Math.atan2(height, width); > cs.transform(Matrix.getRotateInstance(angle, 0, 0)); > cs.setFont(PDF_FONT, (float)FONT_HEIGHT); > //cs.setRenderingMode(RenderingMode.STROKE); // for "hollow" > effect > PDExtendedGraphicsState gs = new PDExtendedGraphicsState(); > gs.setNonStrokingAlphaConstant(0.2f); > gs.setStrokingAlphaConstant(0.2f); > gs.setBlendMode(BlendMode.MULTIPLY); > cs.setGraphicsStateParameters(gs); > // some API weirdness here. When int, range is 0..255. > // when float, this would be 0..1f > cs.setNonStrokingColor(0f, 0, 0); > cs.setStrokingColor(0f, 0, 0); // black > float x = (float)((diagonalLength - stringWidth) / 2); // > "horizontal" position in rotated world > float y = (float)(-FONT_HEIGHT / 4); // 4 is a trial-and-error > thing, this lowers the text a bit > cs.beginText(); > cs.newLineAtOffset(x, y); > cs.showText(watermarkText); >
[jira] [Updated] (PDFBOX-5462) OutOfMemoryError when watermaking in 3.0.0-RC1
[ https://issues.apache.org/jira/browse/PDFBOX-5462?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Marian Ion updated PDFBOX-5462: --- Attachment: TestPdfBox.tgz > OutOfMemoryError when watermaking in 3.0.0-RC1 > -- > > Key: PDFBOX-5462 > URL: https://issues.apache.org/jira/browse/PDFBOX-5462 > Project: PDFBox > Issue Type: Bug >Affects Versions: 3.0.0 PDFBox >Reporter: Marian Ion >Priority: Major > Attachments: TestPdfBox.tgz > > > I am using the Maven *3.0.0-RC1* version and I encounter the following error > when watermarking a 5120 pages file: > {quote} java.lang.OutOfMemoryError: Java heap space: failed reallocation of > scalar replaced objects > {quote} > > However, the *2.0.26* version code works without problem! > The code is basically this : > {code:java} > private static final PDFont PDF_FONT = PDType1Font.HELVETICA; > memoryUsageSetting = MemoryUsageSetting.setupMixed(2 * ONE_GIGA, 40 * > ONE_GIGA); > //try (PDDocument pdfDocument = PDDocument.load(is, memoryUsageSetting)) { > // 2.0.26 > try (PDDocument pdfDocument = Loader.loadPDF(inputStream, > memoryUsageSetting)) { // 3.0.0-RC1 > int nbPages = addWatermark(watermarkText, pdfDocument); > pdfDocument.save(os); > } > ... > private int addWatermark(String watermarkText, PDDocument document) throws > IOException { > int numberOfPages = document.getNumberOfPages(); > System.out.printf("Start adding watermark on a %d pages PDF > document%n", numberOfPages); > long start = System.nanoTime(); > int pageIndex = 0; > for(PDPage page : document.getPages()) { > ++pageIndex; > try (PDPageContentStream cs = new PDPageContentStream(document, > page, PDPageContentStream.AppendMode.APPEND, true, true)) { > float width = page.getMediaBox().getWidth(); > float height = page.getMediaBox().getHeight(); > int rotation = page.getRotation(); > switch(rotation) { > case 90: > width = page.getMediaBox().getHeight(); > height = page.getMediaBox().getWidth(); > > cs.transform(Matrix.getRotateInstance(Math.toRadians(90), height, 0)); > break; > case 180: > > cs.transform(Matrix.getRotateInstance(Math.toRadians(180), width, height)); > break; > case 270: > width = page.getMediaBox().getHeight(); > height = page.getMediaBox().getWidth(); > > cs.transform(Matrix.getRotateInstance(Math.toRadians(270), 0, width)); > break; > default: > break; > } > double stringWidth = > (double)PDF_FONT.getStringWidth(watermarkText) / 1000 * FONT_HEIGHT; > double diagonalLength = Math.sqrt((double)width * width + > (double)height * height); > double angle = Math.atan2(height, width); > cs.transform(Matrix.getRotateInstance(angle, 0, 0)); > cs.setFont(PDF_FONT, (float)FONT_HEIGHT); > //cs.setRenderingMode(RenderingMode.STROKE); // for "hollow" > effect > PDExtendedGraphicsState gs = new PDExtendedGraphicsState(); > gs.setNonStrokingAlphaConstant(0.2f); > gs.setStrokingAlphaConstant(0.2f); > gs.setBlendMode(BlendMode.MULTIPLY); > cs.setGraphicsStateParameters(gs); > // some API weirdness here. When int, range is 0..255. > // when float, this would be 0..1f > cs.setNonStrokingColor(0f, 0, 0); > cs.setStrokingColor(0f, 0, 0); // black > float x = (float)((diagonalLength - stringWidth) / 2); // > "horizontal" position in rotated world > float y = (float)(-FONT_HEIGHT / 4); // 4 is a trial-and-error > thing, this lowers the text a bit > cs.beginText(); > cs.newLineAtOffset(x, y); > cs.showText(watermarkText); > cs.endText(); > } finally { > ... > } > return numberOfPages; > } > {code} -- This message was sent by Atlassian Jira (v8.20.7#820007) - To unsubscribe, e-mail: dev-unsubscr...@pdfbox.apache.org For additional commands, e-mail: dev-h...@pdfbox.apache.org
[jira] [Comment Edited] (PDFBOX-5462) OutOfMemoryError when watermaking in 3.0.0-RC1
[ https://issues.apache.org/jira/browse/PDFBOX-5462?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17555942#comment-17555942 ] Marian Ion edited comment on PDFBOX-5462 at 6/18/22 5:35 PM: - With a smaller PDF (512 pages only) it crashes when saving the result, the heap dump displays {code} main at java.lang.OutOfMemoryError.()V (OutOfMemoryError.java:48) at java.nio.HeapByteBuffer.duplicate()Ljava/nio/ByteBuffer; (HeapByteBuffer.java:131) at org.apache.pdfbox.io.RandomAccessReadBuffer.(Lorg/apache/pdfbox/io/RandomAccessReadBuffer;)V (RandomAccessReadBuffer.java:135) at org.apache.pdfbox.io.RandomAccessReadBuffer.createView(JJ)Lorg/apache/pdfbox/io/RandomAccessReadView; (RandomAccessReadBuffer.java:363) at org.apache.pdfbox.pdfparser.COSParser.createRandomAccessReadView(JJ)Lorg/apache/pdfbox/io/RandomAccessReadView; (COSParser.java:585) at org.apache.pdfbox.cos.COSDocument.createCOSStream(Lorg/apache/pdfbox/cos/COSDictionary;JJ)Lorg/apache/pdfbox/cos/COSStream; (COSDocument.java:185) at org.apache.pdfbox.pdfparser.COSParser.parseCOSStream(Lorg/apache/pdfbox/cos/COSDictionary;)Lorg/apache/pdfbox/cos/COSStream; (COSParser.java:914) at org.apache.pdfbox.pdfparser.COSParser.parseFileObject(Ljava/lang/Long;Lorg/apache/pdfbox/cos/COSObjectKey;)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:693) at org.apache.pdfbox.pdfparser.COSParser.parseObjectDynamically(Lorg/apache/pdfbox/cos/COSObjectKey;Z)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:615) at org.apache.pdfbox.pdfparser.COSParser.dereferenceCOSObject(Lorg/apache/pdfbox/cos/COSObject;)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:573) at org.apache.pdfbox.cos.COSObject.getObject()Lorg/apache/pdfbox/cos/COSBase; (COSObject.java:121) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addElements(Ljava/util/Iterator;)V (COSWriterCompressionPool.java:197) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addStructure(Lorg/apache/pdfbox/cos/COSBase;)V (COSWriterCompressionPool.java:174) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addElements(Ljava/util/Iterator;)V (COSWriterCompressionPool.java:199) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addStructure(Lorg/apache/pdfbox/cos/COSBase;)V (COSWriterCompressionPool.java:174) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addElements(Ljava/util/Iterator;)V (COSWriterCompressionPool.java:199) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addStructure(Lorg/apache/pdfbox/cos/COSBase;)V (COSWriterCompressionPool.java:174) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addElements(Ljava/util/Iterator;)V (COSWriterCompressionPool.java:188) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addStructure(Lorg/apache/pdfbox/cos/COSBase;)V (COSWriterCompressionPool.java:174) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addElements(Ljava/util/Iterator;)V (COSWriterCompressionPool.java:199) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addStructure(Lorg/apache/pdfbox/cos/COSBase;)V (COSWriterCompressionPool.java:170) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addElements(Ljava/util/Iterator;)V (COSWriterCompressionPool.java:188) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addStructure(Lorg/apache/pdfbox/cos/COSBase;)V (COSWriterCompressionPool.java:174) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addElements(Ljava/util/Iterator;)V (COSWriterCompressionPool.java:199) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addStructure(Lorg/apache/pdfbox/cos/COSBase;)V (COSWriterCompressionPool.java:174) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.(Lorg/apache/pdfbox/pdmodel/PDDocument;Lorg/apache/pdfbox/pdfwriter/compress/CompressParameters;)V (COSWriterCompressionPool.java:83) at org.apache.pdfbox.pdfwriter.COSWriter.doWriteBodyCompressed(Lorg/apache/pdfbox/cos/COSDocument;)V (COSWriter.java:474) at org.apache.pdfbox.pdfwriter.COSWriter.visitFromDocument(Lorg/apache/pdfbox/cos/COSDocument;)V (COSWriter.java:1260) at org.apache.pdfbox.cos.COSDocument.accept(Lorg/apache/pdfbox/cos/ICOSVisitor;)V (COSDocument.java:402) at org.apache.pdfbox.pdfwriter.COSWriter.write(Lorg/apache/pdfbox/pdmodel/PDDocument;Lorg/apache/pdfbox/pdmodel/interactive/digitalsignature/SignatureInterface;)V (COSWriter.java:1542) at org.apache.pdfbox.pdfwriter.COSWriter.write(Lorg/apache/pdfbox/pdmodel/PDDocument;)V (COSWriter.java:1418) at org.apache.pdfbox.pdmodel.PDDocument.save(Ljava/io/OutputStream;Lorg/apache/pdfbox/pdfwriter/compress/CompressParameters;)V (PDDocument.java:1018) at org.apache.pdfbox.pdmodel.PDDocument.save(Ljava/io/OutputStream;)V
[jira] [Comment Edited] (PDFBOX-5462) OutOfMemoryError when watermaking in 3.0.0-RC1
[ https://issues.apache.org/jira/browse/PDFBOX-5462?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17555942#comment-17555942 ] Marian Ion edited comment on PDFBOX-5462 at 6/18/22 5:35 PM: - With a smaller PDF (512 pages only) it crashes when saving the result, the heap dump displays {code} main at java.lang.OutOfMemoryError.()V (OutOfMemoryError.java:48) at java.nio.HeapByteBuffer.duplicate()Ljava/nio/ByteBuffer; (HeapByteBuffer.java:131) at org.apache.pdfbox.io.RandomAccessReadBuffer.(Lorg/apache/pdfbox/io/RandomAccessReadBuffer;)V (RandomAccessReadBuffer.java:135) at org.apache.pdfbox.io.RandomAccessReadBuffer.createView(JJ)Lorg/apache/pdfbox/io/RandomAccessReadView; (RandomAccessReadBuffer.java:363) at org.apache.pdfbox.pdfparser.COSParser.createRandomAccessReadView(JJ)Lorg/apache/pdfbox/io/RandomAccessReadView; (COSParser.java:585) at org.apache.pdfbox.cos.COSDocument.createCOSStream(Lorg/apache/pdfbox/cos/COSDictionary;JJ)Lorg/apache/pdfbox/cos/COSStream; (COSDocument.java:185) at org.apache.pdfbox.pdfparser.COSParser.parseCOSStream(Lorg/apache/pdfbox/cos/COSDictionary;)Lorg/apache/pdfbox/cos/COSStream; (COSParser.java:914) at org.apache.pdfbox.pdfparser.COSParser.parseFileObject(Ljava/lang/Long;Lorg/apache/pdfbox/cos/COSObjectKey;)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:693) at org.apache.pdfbox.pdfparser.COSParser.parseObjectDynamically(Lorg/apache/pdfbox/cos/COSObjectKey;Z)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:615) at org.apache.pdfbox.pdfparser.COSParser.dereferenceCOSObject(Lorg/apache/pdfbox/cos/COSObject;)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:573) at org.apache.pdfbox.cos.COSObject.getObject()Lorg/apache/pdfbox/cos/COSBase; (COSObject.java:121) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addElements(Ljava/util/Iterator;)V (COSWriterCompressionPool.java:197) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addStructure(Lorg/apache/pdfbox/cos/COSBase;)V (COSWriterCompressionPool.java:174) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addElements(Ljava/util/Iterator;)V (COSWriterCompressionPool.java:199) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addStructure(Lorg/apache/pdfbox/cos/COSBase;)V (COSWriterCompressionPool.java:174) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addElements(Ljava/util/Iterator;)V (COSWriterCompressionPool.java:199) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addStructure(Lorg/apache/pdfbox/cos/COSBase;)V (COSWriterCompressionPool.java:174) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addElements(Ljava/util/Iterator;)V (COSWriterCompressionPool.java:188) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addStructure(Lorg/apache/pdfbox/cos/COSBase;)V (COSWriterCompressionPool.java:174) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addElements(Ljava/util/Iterator;)V (COSWriterCompressionPool.java:199) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addStructure(Lorg/apache/pdfbox/cos/COSBase;)V (COSWriterCompressionPool.java:170) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addElements(Ljava/util/Iterator;)V (COSWriterCompressionPool.java:188) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addStructure(Lorg/apache/pdfbox/cos/COSBase;)V (COSWriterCompressionPool.java:174) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addElements(Ljava/util/Iterator;)V (COSWriterCompressionPool.java:199) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addStructure(Lorg/apache/pdfbox/cos/COSBase;)V (COSWriterCompressionPool.java:174) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.(Lorg/apache/pdfbox/pdmodel/PDDocument;Lorg/apache/pdfbox/pdfwriter/compress/CompressParameters;)V (COSWriterCompressionPool.java:83) at org.apache.pdfbox.pdfwriter.COSWriter.doWriteBodyCompressed(Lorg/apache/pdfbox/cos/COSDocument;)V (COSWriter.java:474) at org.apache.pdfbox.pdfwriter.COSWriter.visitFromDocument(Lorg/apache/pdfbox/cos/COSDocument;)V (COSWriter.java:1260) at org.apache.pdfbox.cos.COSDocument.accept(Lorg/apache/pdfbox/cos/ICOSVisitor;)V (COSDocument.java:402) at org.apache.pdfbox.pdfwriter.COSWriter.write(Lorg/apache/pdfbox/pdmodel/PDDocument;Lorg/apache/pdfbox/pdmodel/interactive/digitalsignature/SignatureInterface;)V (COSWriter.java:1542) at org.apache.pdfbox.pdfwriter.COSWriter.write(Lorg/apache/pdfbox/pdmodel/PDDocument;)V (COSWriter.java:1418) at org.apache.pdfbox.pdmodel.PDDocument.save(Ljava/io/OutputStream;Lorg/apache/pdfbox/pdfwriter/compress/CompressParameters;)V (PDDocument.java:1018) at org.apache.pdfbox.pdmodel.PDDocument.save(Ljava/io/OutputStream;)V
[jira] [Comment Edited] (PDFBOX-5462) OutOfMemoryError when watermaking in 3.0.0-RC1
[ https://issues.apache.org/jira/browse/PDFBOX-5462?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17555942#comment-17555942 ] Marian Ion edited comment on PDFBOX-5462 at 6/18/22 5:33 PM: - With a smaller PDF (512 pages only) it crashes when saving the result, the heap dump displays {code} main at java.lang.OutOfMemoryError.()V (OutOfMemoryError.java:48) at java.nio.HeapByteBuffer.duplicate()Ljava/nio/ByteBuffer; (HeapByteBuffer.java:131) at org.apache.pdfbox.io.RandomAccessReadBuffer.(Lorg/apache/pdfbox/io/RandomAccessReadBuffer;)V (RandomAccessReadBuffer.java:135) at org.apache.pdfbox.io.RandomAccessReadBuffer.createView(JJ)Lorg/apache/pdfbox/io/RandomAccessReadView; (RandomAccessReadBuffer.java:363) at org.apache.pdfbox.pdfparser.COSParser.createRandomAccessReadView(JJ)Lorg/apache/pdfbox/io/RandomAccessReadView; (COSParser.java:585) at org.apache.pdfbox.cos.COSDocument.createCOSStream(Lorg/apache/pdfbox/cos/COSDictionary;JJ)Lorg/apache/pdfbox/cos/COSStream; (COSDocument.java:185) at org.apache.pdfbox.pdfparser.COSParser.parseCOSStream(Lorg/apache/pdfbox/cos/COSDictionary;)Lorg/apache/pdfbox/cos/COSStream; (COSParser.java:914) at org.apache.pdfbox.pdfparser.COSParser.parseFileObject(Ljava/lang/Long;Lorg/apache/pdfbox/cos/COSObjectKey;)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:693) at org.apache.pdfbox.pdfparser.COSParser.parseObjectDynamically(Lorg/apache/pdfbox/cos/COSObjectKey;Z)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:615) at org.apache.pdfbox.pdfparser.COSParser.dereferenceCOSObject(Lorg/apache/pdfbox/cos/COSObject;)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:573) at org.apache.pdfbox.cos.COSObject.getObject()Lorg/apache/pdfbox/cos/COSBase; (COSObject.java:121) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addElements(Ljava/util/Iterator;)V (COSWriterCompressionPool.java:197) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addStructure(Lorg/apache/pdfbox/cos/COSBase;)V (COSWriterCompressionPool.java:174) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addElements(Ljava/util/Iterator;)V (COSWriterCompressionPool.java:199) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addStructure(Lorg/apache/pdfbox/cos/COSBase;)V (COSWriterCompressionPool.java:174) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addElements(Ljava/util/Iterator;)V (COSWriterCompressionPool.java:199) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addStructure(Lorg/apache/pdfbox/cos/COSBase;)V (COSWriterCompressionPool.java:174) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addElements(Ljava/util/Iterator;)V (COSWriterCompressionPool.java:188) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addStructure(Lorg/apache/pdfbox/cos/COSBase;)V (COSWriterCompressionPool.java:174) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addElements(Ljava/util/Iterator;)V (COSWriterCompressionPool.java:199) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addStructure(Lorg/apache/pdfbox/cos/COSBase;)V (COSWriterCompressionPool.java:170) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addElements(Ljava/util/Iterator;)V (COSWriterCompressionPool.java:188) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addStructure(Lorg/apache/pdfbox/cos/COSBase;)V (COSWriterCompressionPool.java:174) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addElements(Ljava/util/Iterator;)V (COSWriterCompressionPool.java:199) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addStructure(Lorg/apache/pdfbox/cos/COSBase;)V (COSWriterCompressionPool.java:174) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.(Lorg/apache/pdfbox/pdmodel/PDDocument;Lorg/apache/pdfbox/pdfwriter/compress/CompressParameters;)V (COSWriterCompressionPool.java:83) at org.apache.pdfbox.pdfwriter.COSWriter.doWriteBodyCompressed(Lorg/apache/pdfbox/cos/COSDocument;)V (COSWriter.java:474) at org.apache.pdfbox.pdfwriter.COSWriter.visitFromDocument(Lorg/apache/pdfbox/cos/COSDocument;)V (COSWriter.java:1260) at org.apache.pdfbox.cos.COSDocument.accept(Lorg/apache/pdfbox/cos/ICOSVisitor;)V (COSDocument.java:402) at org.apache.pdfbox.pdfwriter.COSWriter.write(Lorg/apache/pdfbox/pdmodel/PDDocument;Lorg/apache/pdfbox/pdmodel/interactive/digitalsignature/SignatureInterface;)V (COSWriter.java:1542) at org.apache.pdfbox.pdfwriter.COSWriter.write(Lorg/apache/pdfbox/pdmodel/PDDocument;)V (COSWriter.java:1418) at org.apache.pdfbox.pdmodel.PDDocument.save(Ljava/io/OutputStream;Lorg/apache/pdfbox/pdfwriter/compress/CompressParameters;)V (PDDocument.java:1018) at org.apache.pdfbox.pdmodel.PDDocument.save(Ljava/io/OutputStream;)V
[jira] [Commented] (PDFBOX-5462) OutOfMemoryError when watermaking in 3.0.0-RC1
[ https://issues.apache.org/jira/browse/PDFBOX-5462?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17555942#comment-17555942 ] Marian Ion commented on PDFBOX-5462: With a smaller PDF (512 pages only) it crashes when saving the result, the heap dump displays {code} main at java.lang.OutOfMemoryError.()V (OutOfMemoryError.java:48) at java.nio.HeapByteBuffer.duplicate()Ljava/nio/ByteBuffer; (HeapByteBuffer.java:131) at org.apache.pdfbox.io.RandomAccessReadBuffer.(Lorg/apache/pdfbox/io/RandomAccessReadBuffer;)V (RandomAccessReadBuffer.java:135) at org.apache.pdfbox.io.RandomAccessReadBuffer.createView(JJ)Lorg/apache/pdfbox/io/RandomAccessReadView; (RandomAccessReadBuffer.java:363) at org.apache.pdfbox.pdfparser.COSParser.createRandomAccessReadView(JJ)Lorg/apache/pdfbox/io/RandomAccessReadView; (COSParser.java:585) at org.apache.pdfbox.cos.COSDocument.createCOSStream(Lorg/apache/pdfbox/cos/COSDictionary;JJ)Lorg/apache/pdfbox/cos/COSStream; (COSDocument.java:185) at org.apache.pdfbox.pdfparser.COSParser.parseCOSStream(Lorg/apache/pdfbox/cos/COSDictionary;)Lorg/apache/pdfbox/cos/COSStream; (COSParser.java:914) at org.apache.pdfbox.pdfparser.COSParser.parseFileObject(Ljava/lang/Long;Lorg/apache/pdfbox/cos/COSObjectKey;)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:693) at org.apache.pdfbox.pdfparser.COSParser.parseObjectDynamically(Lorg/apache/pdfbox/cos/COSObjectKey;Z)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:615) at org.apache.pdfbox.pdfparser.COSParser.dereferenceCOSObject(Lorg/apache/pdfbox/cos/COSObject;)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:573) at org.apache.pdfbox.cos.COSObject.getObject()Lorg/apache/pdfbox/cos/COSBase; (COSObject.java:121) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addElements(Ljava/util/Iterator;)V (COSWriterCompressionPool.java:197) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addStructure(Lorg/apache/pdfbox/cos/COSBase;)V (COSWriterCompressionPool.java:174) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addElements(Ljava/util/Iterator;)V (COSWriterCompressionPool.java:199) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addStructure(Lorg/apache/pdfbox/cos/COSBase;)V (COSWriterCompressionPool.java:174) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addElements(Ljava/util/Iterator;)V (COSWriterCompressionPool.java:199) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addStructure(Lorg/apache/pdfbox/cos/COSBase;)V (COSWriterCompressionPool.java:174) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addElements(Ljava/util/Iterator;)V (COSWriterCompressionPool.java:188) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addStructure(Lorg/apache/pdfbox/cos/COSBase;)V (COSWriterCompressionPool.java:174) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addElements(Ljava/util/Iterator;)V (COSWriterCompressionPool.java:199) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addStructure(Lorg/apache/pdfbox/cos/COSBase;)V (COSWriterCompressionPool.java:170) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addElements(Ljava/util/Iterator;)V (COSWriterCompressionPool.java:188) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addStructure(Lorg/apache/pdfbox/cos/COSBase;)V (COSWriterCompressionPool.java:174) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addElements(Ljava/util/Iterator;)V (COSWriterCompressionPool.java:199) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.addStructure(Lorg/apache/pdfbox/cos/COSBase;)V (COSWriterCompressionPool.java:174) at org.apache.pdfbox.pdfwriter.compress.COSWriterCompressionPool.(Lorg/apache/pdfbox/pdmodel/PDDocument;Lorg/apache/pdfbox/pdfwriter/compress/CompressParameters;)V (COSWriterCompressionPool.java:83) at org.apache.pdfbox.pdfwriter.COSWriter.doWriteBodyCompressed(Lorg/apache/pdfbox/cos/COSDocument;)V (COSWriter.java:474) at org.apache.pdfbox.pdfwriter.COSWriter.visitFromDocument(Lorg/apache/pdfbox/cos/COSDocument;)V (COSWriter.java:1260) at org.apache.pdfbox.cos.COSDocument.accept(Lorg/apache/pdfbox/cos/ICOSVisitor;)V (COSDocument.java:402) at org.apache.pdfbox.pdfwriter.COSWriter.write(Lorg/apache/pdfbox/pdmodel/PDDocument;Lorg/apache/pdfbox/pdmodel/interactive/digitalsignature/SignatureInterface;)V (COSWriter.java:1542) at org.apache.pdfbox.pdfwriter.COSWriter.write(Lorg/apache/pdfbox/pdmodel/PDDocument;)V (COSWriter.java:1418) at org.apache.pdfbox.pdmodel.PDDocument.save(Ljava/io/OutputStream;Lorg/apache/pdfbox/pdfwriter/compress/CompressParameters;)V (PDDocument.java:1018) at org.apache.pdfbox.pdmodel.PDDocument.save(Ljava/io/OutputStream;)V (PDDocument.java:937) at
[jira] [Commented] (PDFBOX-5462) OutOfMemoryError when watermaking in 3.0.0-RC1
[ https://issues.apache.org/jira/browse/PDFBOX-5462?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17555941#comment-17555941 ] Maruan Sahyoun commented on PDFBOX-5462: can you try with a larger heap (I know that it's not wanted but would like to understand which amount is needed)? Can you share the PDF? > OutOfMemoryError when watermaking in 3.0.0-RC1 > -- > > Key: PDFBOX-5462 > URL: https://issues.apache.org/jira/browse/PDFBOX-5462 > Project: PDFBox > Issue Type: Bug >Affects Versions: 3.0.0 PDFBox >Reporter: Marian Ion >Priority: Major > > I am using the Maven *3.0.0-RC1* version and I encounter the following error > when watermarking a 5120 pages file: > {quote} java.lang.OutOfMemoryError: Java heap space: failed reallocation of > scalar replaced objects > {quote} > > However, the *2.0.26* version code works without problem! > The code is basically this : > {code:java} > private static final PDFont PDF_FONT = PDType1Font.HELVETICA; > memoryUsageSetting = MemoryUsageSetting.setupMixed(2 * ONE_GIGA, 40 * > ONE_GIGA); > //try (PDDocument pdfDocument = PDDocument.load(is, memoryUsageSetting)) { > // 2.0.26 > try (PDDocument pdfDocument = Loader.loadPDF(inputStream, > memoryUsageSetting)) { // 3.0.0-RC1 > int nbPages = addWatermark(watermarkText, pdfDocument); > pdfDocument.save(os); > } > ... > private int addWatermark(String watermarkText, PDDocument document) throws > IOException { > int numberOfPages = document.getNumberOfPages(); > System.out.printf("Start adding watermark on a %d pages PDF > document%n", numberOfPages); > long start = System.nanoTime(); > int pageIndex = 0; > for(PDPage page : document.getPages()) { > ++pageIndex; > try (PDPageContentStream cs = new PDPageContentStream(document, > page, PDPageContentStream.AppendMode.APPEND, true, true)) { > float width = page.getMediaBox().getWidth(); > float height = page.getMediaBox().getHeight(); > int rotation = page.getRotation(); > switch(rotation) { > case 90: > width = page.getMediaBox().getHeight(); > height = page.getMediaBox().getWidth(); > > cs.transform(Matrix.getRotateInstance(Math.toRadians(90), height, 0)); > break; > case 180: > > cs.transform(Matrix.getRotateInstance(Math.toRadians(180), width, height)); > break; > case 270: > width = page.getMediaBox().getHeight(); > height = page.getMediaBox().getWidth(); > > cs.transform(Matrix.getRotateInstance(Math.toRadians(270), 0, width)); > break; > default: > break; > } > double stringWidth = > (double)PDF_FONT.getStringWidth(watermarkText) / 1000 * FONT_HEIGHT; > double diagonalLength = Math.sqrt((double)width * width + > (double)height * height); > double angle = Math.atan2(height, width); > cs.transform(Matrix.getRotateInstance(angle, 0, 0)); > cs.setFont(PDF_FONT, (float)FONT_HEIGHT); > //cs.setRenderingMode(RenderingMode.STROKE); // for "hollow" > effect > PDExtendedGraphicsState gs = new PDExtendedGraphicsState(); > gs.setNonStrokingAlphaConstant(0.2f); > gs.setStrokingAlphaConstant(0.2f); > gs.setBlendMode(BlendMode.MULTIPLY); > cs.setGraphicsStateParameters(gs); > // some API weirdness here. When int, range is 0..255. > // when float, this would be 0..1f > cs.setNonStrokingColor(0f, 0, 0); > cs.setStrokingColor(0f, 0, 0); // black > float x = (float)((diagonalLength - stringWidth) / 2); // > "horizontal" position in rotated world > float y = (float)(-FONT_HEIGHT / 4); // 4 is a trial-and-error > thing, this lowers the text a bit > cs.beginText(); > cs.newLineAtOffset(x, y); > cs.showText(watermarkText); > cs.endText(); > } finally { > ... > } > return numberOfPages; > } > {code} -- This message was sent by Atlassian Jira (v8.20.7#820007) - To unsubscribe, e-mail:
[jira] [Comment Edited] (PDFBOX-5462) OutOfMemoryError when watermaking in 3.0.0-RC1
[ https://issues.apache.org/jira/browse/PDFBOX-5462?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17555939#comment-17555939 ] Marian Ion edited comment on PDFBOX-5462 at 6/18/22 5:14 PM: - I tried the application (packaged as an executable jar) with *-Xms2048m -Xmx2048m* options, it works smoothly with 2.0.26 (in fact, I remember using also older 2.0.x series versions without any problem), it crashes with 3.0.0-alpha3 displaying the following message {code} Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at java.base/java.util.ArrayList.(ArrayList.java:156) at org.apache.pdfbox.io.RandomAccessReadBuffer.(RandomAccessReadBuffer.java:132) at org.apache.pdfbox.io.RandomAccessReadBuffer.createView(RandomAccessReadBuffer.java:363) at org.apache.pdfbox.pdfparser.COSParser.createRandomAccessReadView(COSParser.java:585) at org.apache.pdfbox.cos.COSDocument.createCOSStream(COSDocument.java:185) at org.apache.pdfbox.pdfparser.COSParser.parseCOSStream(COSParser.java:914) at org.apache.pdfbox.pdfparser.COSParser.parseFileObject(COSParser.java:693) at org.apache.pdfbox.pdfparser.COSParser.parseObjectDynamically(COSParser.java:615) at org.apache.pdfbox.pdfparser.COSParser.dereferenceCOSObject(COSParser.java:573) at org.apache.pdfbox.cos.COSObject.getObject(COSObject.java:121) at org.apache.pdfbox.cos.COSDictionary.getDictionaryObject(COSDictionary.java:183) at org.apache.pdfbox.pdmodel.PDPage.hasContents(PDPage.java:218) at org.apache.pdfbox.pdmodel.PDPageContentStream.(PDPageContentStream.java:140) at org.apache.pdfbox.pdmodel.PDPageContentStream.(PDPageContentStream.java:123) at PdfboxWatermark.addWatermark(PdfboxWatermark.java:58) at PdfboxWatermark.setWatermarkOnContent(PdfboxWatermark.java:37) at WatermarkPDF.main(WatermarkPDF.java:29) {code} I also noticed something, that might explain the OOM: - with 2.0.26 the watermarking of each page is constant time, - with 3.x the watermarking time slowly increases until it crashes (so probably some memory is not freed and accumulates) was (Author: JIRAUSER291146): I tried the application (packaged as an executable jar) with *-Xms2048m -Xmx2048m* options, it works smoothly with 2.0.26 (in fact, I remember using also older 2.0.x series versions without any problem), it crashes with 3.0.0-alpha3 displaying the following message {code} Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at java.base/java.util.ArrayList.(ArrayList.java:156) at org.apache.pdfbox.io.RandomAccessReadBuffer.(RandomAccessReadBuffer.java:132) at org.apache.pdfbox.io.RandomAccessReadBuffer.createView(RandomAccessReadBuffer.java:363) at org.apache.pdfbox.pdfparser.COSParser.createRandomAccessReadView(COSParser.java:585) at org.apache.pdfbox.cos.COSDocument.createCOSStream(COSDocument.java:185) at org.apache.pdfbox.pdfparser.COSParser.parseCOSStream(COSParser.java:914) at org.apache.pdfbox.pdfparser.COSParser.parseFileObject(COSParser.java:693) at org.apache.pdfbox.pdfparser.COSParser.parseObjectDynamically(COSParser.java:615) at org.apache.pdfbox.pdfparser.COSParser.dereferenceCOSObject(COSParser.java:573) at org.apache.pdfbox.cos.COSObject.getObject(COSObject.java:121) at org.apache.pdfbox.cos.COSDictionary.getDictionaryObject(COSDictionary.java:183) at org.apache.pdfbox.pdmodel.PDPage.hasContents(PDPage.java:218) at org.apache.pdfbox.pdmodel.PDPageContentStream.(PDPageContentStream.java:140) at org.apache.pdfbox.pdmodel.PDPageContentStream.(PDPageContentStream.java:123) at PdfboxWatermark.addWatermark(PdfboxWatermark.java:58) at PdfboxWatermark.setWatermarkOnContent(PdfboxWatermark.java:37) at WatermarkPDF.main(WatermarkPDF.java:29) {code} > OutOfMemoryError when watermaking in 3.0.0-RC1 > -- > > Key: PDFBOX-5462 > URL: https://issues.apache.org/jira/browse/PDFBOX-5462 > Project: PDFBox > Issue Type: Bug >Affects Versions: 3.0.0 PDFBox >Reporter: Marian Ion >Priority: Major > > I am using the Maven *3.0.0-RC1* version and I encounter the following error > when watermarking a 5120 pages file: > {quote} java.lang.OutOfMemoryError: Java heap space: failed reallocation of > scalar replaced objects > {quote} > > However, the *2.0.26* version code works without problem! > The code is basically this : > {code:java} > private static final PDFont PDF_FONT = PDType1Font.HELVETICA; > memoryUsageSetting = MemoryUsageSetting.setupMixed(2 * ONE_GIGA, 40 * > ONE_GIGA); > //try (PDDocument pdfDocument = PDDocument.load(is, memoryUsageSetting)) { > //
[jira] [Comment Edited] (PDFBOX-5462) OutOfMemoryError when watermaking in 3.0.0-RC1
[ https://issues.apache.org/jira/browse/PDFBOX-5462?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17555936#comment-17555936 ] Marian Ion edited comment on PDFBOX-5462 at 6/18/22 5:07 PM: - Here's what *Eclipse Memory Analyzer* finds on a heap dump (and trying to watermark a 4k PDF, the same 4 pages repeated 1024 times): {code:java} main at java.lang.OutOfMemoryError.()V (OutOfMemoryError.java:48) at java.nio.HeapByteBuffer.duplicate()Ljava/nio/ByteBuffer; (HeapByteBuffer.java:131) at org.apache.pdfbox.io.RandomAccessReadBuffer.(Lorg/apache/pdfbox/io/RandomAccessReadBuffer;)V (RandomAccessReadBuffer.java:135) at org.apache.pdfbox.io.RandomAccessReadBuffer.createView(JJ)Lorg/apache/pdfbox/io/RandomAccessReadView; (RandomAccessReadBuffer.java:363) at org.apache.pdfbox.pdfparser.COSParser.createRandomAccessReadView(JJ)Lorg/apache/pdfbox/io/RandomAccessReadView; (COSParser.java:585) at org.apache.pdfbox.cos.COSDocument.createCOSStream(Lorg/apache/pdfbox/cos/COSDictionary;JJ)Lorg/apache/pdfbox/cos/COSStream; (COSDocument.java:185) at org.apache.pdfbox.pdfparser.COSParser.parseCOSStream(Lorg/apache/pdfbox/cos/COSDictionary;)Lorg/apache/pdfbox/cos/COSStream; (COSParser.java:914) at org.apache.pdfbox.pdfparser.COSParser.parseFileObject(Ljava/lang/Long;Lorg/apache/pdfbox/cos/COSObjectKey;)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:693) at org.apache.pdfbox.pdfparser.COSParser.parseObjectDynamically(Lorg/apache/pdfbox/cos/COSObjectKey;Z)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:615) at org.apache.pdfbox.pdfparser.COSParser.dereferenceCOSObject(Lorg/apache/pdfbox/cos/COSObject;)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:573) at org.apache.pdfbox.cos.COSObject.getObject()Lorg/apache/pdfbox/cos/COSBase; (COSObject.java:121) at org.apache.pdfbox.cos.COSDictionary.getDictionaryObject(Lorg/apache/pdfbox/cos/COSName;)Lorg/apache/pdfbox/cos/COSBase; (COSDictionary.java:183) at org.apache.pdfbox.pdmodel.PDPage.hasContents()Z (PDPage.java:218) at org.apache.pdfbox.pdmodel.PDPageContentStream.(Lorg/apache/pdfbox/pdmodel/PDDocument;Lorg/apache/pdfbox/pdmodel/PDPage;Lorg/apache/pdfbox/pdmodel/PDPageContentStream$AppendMode;ZZLorg/apache/pdfbox/pdmodel/common/PDStream;Lorg/apache/pdfbox/pdmodel/PDResources;)V (PDPageContentStream.java:140) at org.apache.pdfbox.pdmodel.PDPageContentStream.(Lorg/apache/pdfbox/pdmodel/PDDocument;Lorg/apache/pdfbox/pdmodel/PDPage;Lorg/apache/pdfbox/pdmodel/PDPageContentStream$AppendMode;ZZ)V (PDPageContentStream.java:123) at PdfboxWatermark.addWatermark(Ljava/lang/String;Lorg/apache/pdfbox/pdmodel/PDDocument;)I (PdfboxWatermark.java:57) at PdfboxWatermark.setWatermarkOnContent(Ljava/lang/String;Ljava/io/InputStream;Ljava/io/OutputStream;)I (PdfboxWatermark.java:37) at WatermarkPDF.main([Ljava/lang/String;)V (WatermarkPDF.java:29) {code} was (Author: JIRAUSER291146): Here's what *Eclipse Memory Analyzer* finds on a heap dump: {code:java} main at java.lang.OutOfMemoryError.()V (OutOfMemoryError.java:48) at java.nio.HeapByteBuffer.duplicate()Ljava/nio/ByteBuffer; (HeapByteBuffer.java:131) at org.apache.pdfbox.io.RandomAccessReadBuffer.(Lorg/apache/pdfbox/io/RandomAccessReadBuffer;)V (RandomAccessReadBuffer.java:135) at org.apache.pdfbox.io.RandomAccessReadBuffer.createView(JJ)Lorg/apache/pdfbox/io/RandomAccessReadView; (RandomAccessReadBuffer.java:363) at org.apache.pdfbox.pdfparser.COSParser.createRandomAccessReadView(JJ)Lorg/apache/pdfbox/io/RandomAccessReadView; (COSParser.java:585) at org.apache.pdfbox.cos.COSDocument.createCOSStream(Lorg/apache/pdfbox/cos/COSDictionary;JJ)Lorg/apache/pdfbox/cos/COSStream; (COSDocument.java:185) at org.apache.pdfbox.pdfparser.COSParser.parseCOSStream(Lorg/apache/pdfbox/cos/COSDictionary;)Lorg/apache/pdfbox/cos/COSStream; (COSParser.java:914) at org.apache.pdfbox.pdfparser.COSParser.parseFileObject(Ljava/lang/Long;Lorg/apache/pdfbox/cos/COSObjectKey;)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:693) at org.apache.pdfbox.pdfparser.COSParser.parseObjectDynamically(Lorg/apache/pdfbox/cos/COSObjectKey;Z)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:615) at org.apache.pdfbox.pdfparser.COSParser.dereferenceCOSObject(Lorg/apache/pdfbox/cos/COSObject;)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:573) at org.apache.pdfbox.cos.COSObject.getObject()Lorg/apache/pdfbox/cos/COSBase; (COSObject.java:121) at org.apache.pdfbox.cos.COSDictionary.getDictionaryObject(Lorg/apache/pdfbox/cos/COSName;)Lorg/apache/pdfbox/cos/COSBase; (COSDictionary.java:183) at org.apache.pdfbox.pdmodel.PDPage.hasContents()Z (PDPage.java:218) at
[jira] [Commented] (PDFBOX-5462) OutOfMemoryError when watermaking in 3.0.0-RC1
[ https://issues.apache.org/jira/browse/PDFBOX-5462?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17555939#comment-17555939 ] Marian Ion commented on PDFBOX-5462: I tried the application (packaged as an executable jar) with *-Xms2048m -Xmx2048m* options, it works smoothly with 2.0.26 (in fact, I remember using also older 2.0.x series version without any problem), it crashes with 3.0.0-alpha3 displaying the following message {code} Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at java.base/java.util.ArrayList.(ArrayList.java:156) at org.apache.pdfbox.io.RandomAccessReadBuffer.(RandomAccessReadBuffer.java:132) at org.apache.pdfbox.io.RandomAccessReadBuffer.createView(RandomAccessReadBuffer.java:363) at org.apache.pdfbox.pdfparser.COSParser.createRandomAccessReadView(COSParser.java:585) at org.apache.pdfbox.cos.COSDocument.createCOSStream(COSDocument.java:185) at org.apache.pdfbox.pdfparser.COSParser.parseCOSStream(COSParser.java:914) at org.apache.pdfbox.pdfparser.COSParser.parseFileObject(COSParser.java:693) at org.apache.pdfbox.pdfparser.COSParser.parseObjectDynamically(COSParser.java:615) at org.apache.pdfbox.pdfparser.COSParser.dereferenceCOSObject(COSParser.java:573) at org.apache.pdfbox.cos.COSObject.getObject(COSObject.java:121) at org.apache.pdfbox.cos.COSDictionary.getDictionaryObject(COSDictionary.java:183) at org.apache.pdfbox.pdmodel.PDPage.hasContents(PDPage.java:218) at org.apache.pdfbox.pdmodel.PDPageContentStream.(PDPageContentStream.java:140) at org.apache.pdfbox.pdmodel.PDPageContentStream.(PDPageContentStream.java:123) at PdfboxWatermark.addWatermark(PdfboxWatermark.java:58) at PdfboxWatermark.setWatermarkOnContent(PdfboxWatermark.java:37) at WatermarkPDF.main(WatermarkPDF.java:29) {code} > OutOfMemoryError when watermaking in 3.0.0-RC1 > -- > > Key: PDFBOX-5462 > URL: https://issues.apache.org/jira/browse/PDFBOX-5462 > Project: PDFBox > Issue Type: Bug >Affects Versions: 3.0.0 PDFBox >Reporter: Marian Ion >Priority: Major > > I am using the Maven *3.0.0-RC1* version and I encounter the following error > when watermarking a 5120 pages file: > {quote} java.lang.OutOfMemoryError: Java heap space: failed reallocation of > scalar replaced objects > {quote} > > However, the *2.0.26* version code works without problem! > The code is basically this : > {code:java} > private static final PDFont PDF_FONT = PDType1Font.HELVETICA; > memoryUsageSetting = MemoryUsageSetting.setupMixed(2 * ONE_GIGA, 40 * > ONE_GIGA); > //try (PDDocument pdfDocument = PDDocument.load(is, memoryUsageSetting)) { > // 2.0.26 > try (PDDocument pdfDocument = Loader.loadPDF(inputStream, > memoryUsageSetting)) { // 3.0.0-RC1 > int nbPages = addWatermark(watermarkText, pdfDocument); > pdfDocument.save(os); > } > ... > private int addWatermark(String watermarkText, PDDocument document) throws > IOException { > int numberOfPages = document.getNumberOfPages(); > System.out.printf("Start adding watermark on a %d pages PDF > document%n", numberOfPages); > long start = System.nanoTime(); > int pageIndex = 0; > for(PDPage page : document.getPages()) { > ++pageIndex; > try (PDPageContentStream cs = new PDPageContentStream(document, > page, PDPageContentStream.AppendMode.APPEND, true, true)) { > float width = page.getMediaBox().getWidth(); > float height = page.getMediaBox().getHeight(); > int rotation = page.getRotation(); > switch(rotation) { > case 90: > width = page.getMediaBox().getHeight(); > height = page.getMediaBox().getWidth(); > > cs.transform(Matrix.getRotateInstance(Math.toRadians(90), height, 0)); > break; > case 180: > > cs.transform(Matrix.getRotateInstance(Math.toRadians(180), width, height)); > break; > case 270: > width = page.getMediaBox().getHeight(); > height = page.getMediaBox().getWidth(); > > cs.transform(Matrix.getRotateInstance(Math.toRadians(270), 0, width)); > break; > default: > break; > } > double stringWidth = >
[jira] [Comment Edited] (PDFBOX-5462) OutOfMemoryError when watermaking in 3.0.0-RC1
[ https://issues.apache.org/jira/browse/PDFBOX-5462?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17555939#comment-17555939 ] Marian Ion edited comment on PDFBOX-5462 at 6/18/22 5:03 PM: - I tried the application (packaged as an executable jar) with *-Xms2048m -Xmx2048m* options, it works smoothly with 2.0.26 (in fact, I remember using also older 2.0.x series versions without any problem), it crashes with 3.0.0-alpha3 displaying the following message {code} Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at java.base/java.util.ArrayList.(ArrayList.java:156) at org.apache.pdfbox.io.RandomAccessReadBuffer.(RandomAccessReadBuffer.java:132) at org.apache.pdfbox.io.RandomAccessReadBuffer.createView(RandomAccessReadBuffer.java:363) at org.apache.pdfbox.pdfparser.COSParser.createRandomAccessReadView(COSParser.java:585) at org.apache.pdfbox.cos.COSDocument.createCOSStream(COSDocument.java:185) at org.apache.pdfbox.pdfparser.COSParser.parseCOSStream(COSParser.java:914) at org.apache.pdfbox.pdfparser.COSParser.parseFileObject(COSParser.java:693) at org.apache.pdfbox.pdfparser.COSParser.parseObjectDynamically(COSParser.java:615) at org.apache.pdfbox.pdfparser.COSParser.dereferenceCOSObject(COSParser.java:573) at org.apache.pdfbox.cos.COSObject.getObject(COSObject.java:121) at org.apache.pdfbox.cos.COSDictionary.getDictionaryObject(COSDictionary.java:183) at org.apache.pdfbox.pdmodel.PDPage.hasContents(PDPage.java:218) at org.apache.pdfbox.pdmodel.PDPageContentStream.(PDPageContentStream.java:140) at org.apache.pdfbox.pdmodel.PDPageContentStream.(PDPageContentStream.java:123) at PdfboxWatermark.addWatermark(PdfboxWatermark.java:58) at PdfboxWatermark.setWatermarkOnContent(PdfboxWatermark.java:37) at WatermarkPDF.main(WatermarkPDF.java:29) {code} was (Author: JIRAUSER291146): I tried the application (packaged as an executable jar) with *-Xms2048m -Xmx2048m* options, it works smoothly with 2.0.26 (in fact, I remember using also older 2.0.x series version without any problem), it crashes with 3.0.0-alpha3 displaying the following message {code} Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at java.base/java.util.ArrayList.(ArrayList.java:156) at org.apache.pdfbox.io.RandomAccessReadBuffer.(RandomAccessReadBuffer.java:132) at org.apache.pdfbox.io.RandomAccessReadBuffer.createView(RandomAccessReadBuffer.java:363) at org.apache.pdfbox.pdfparser.COSParser.createRandomAccessReadView(COSParser.java:585) at org.apache.pdfbox.cos.COSDocument.createCOSStream(COSDocument.java:185) at org.apache.pdfbox.pdfparser.COSParser.parseCOSStream(COSParser.java:914) at org.apache.pdfbox.pdfparser.COSParser.parseFileObject(COSParser.java:693) at org.apache.pdfbox.pdfparser.COSParser.parseObjectDynamically(COSParser.java:615) at org.apache.pdfbox.pdfparser.COSParser.dereferenceCOSObject(COSParser.java:573) at org.apache.pdfbox.cos.COSObject.getObject(COSObject.java:121) at org.apache.pdfbox.cos.COSDictionary.getDictionaryObject(COSDictionary.java:183) at org.apache.pdfbox.pdmodel.PDPage.hasContents(PDPage.java:218) at org.apache.pdfbox.pdmodel.PDPageContentStream.(PDPageContentStream.java:140) at org.apache.pdfbox.pdmodel.PDPageContentStream.(PDPageContentStream.java:123) at PdfboxWatermark.addWatermark(PdfboxWatermark.java:58) at PdfboxWatermark.setWatermarkOnContent(PdfboxWatermark.java:37) at WatermarkPDF.main(WatermarkPDF.java:29) {code} > OutOfMemoryError when watermaking in 3.0.0-RC1 > -- > > Key: PDFBOX-5462 > URL: https://issues.apache.org/jira/browse/PDFBOX-5462 > Project: PDFBox > Issue Type: Bug >Affects Versions: 3.0.0 PDFBox >Reporter: Marian Ion >Priority: Major > > I am using the Maven *3.0.0-RC1* version and I encounter the following error > when watermarking a 5120 pages file: > {quote} java.lang.OutOfMemoryError: Java heap space: failed reallocation of > scalar replaced objects > {quote} > > However, the *2.0.26* version code works without problem! > The code is basically this : > {code:java} > private static final PDFont PDF_FONT = PDType1Font.HELVETICA; > memoryUsageSetting = MemoryUsageSetting.setupMixed(2 * ONE_GIGA, 40 * > ONE_GIGA); > //try (PDDocument pdfDocument = PDDocument.load(is, memoryUsageSetting)) { > // 2.0.26 > try (PDDocument pdfDocument = Loader.loadPDF(inputStream, > memoryUsageSetting)) { // 3.0.0-RC1 > int nbPages = addWatermark(watermarkText, pdfDocument); > pdfDocument.save(os); > } > ... > private int addWatermark(String
[jira] [Commented] (PDFBOX-5462) OutOfMemoryError when watermaking in 3.0.0-RC1
[ https://issues.apache.org/jira/browse/PDFBOX-5462?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17555937#comment-17555937 ] Marian Ion commented on PDFBOX-5462: [~msahyoun] even with {code:java} double stringWidth = (double)PDF_FONT.getStringWidth(watermarkText)...{code} outside of the loop it still crashes! Thanks for pointing me out this optimization! > OutOfMemoryError when watermaking in 3.0.0-RC1 > -- > > Key: PDFBOX-5462 > URL: https://issues.apache.org/jira/browse/PDFBOX-5462 > Project: PDFBox > Issue Type: Bug >Affects Versions: 3.0.0 PDFBox >Reporter: Marian Ion >Priority: Major > > I am using the Maven *3.0.0-RC1* version and I encounter the following error > when watermarking a 5120 pages file: > {quote} java.lang.OutOfMemoryError: Java heap space: failed reallocation of > scalar replaced objects > {quote} > > However, the *2.0.26* version code works without problem! > The code is basically this : > {code:java} > private static final PDFont PDF_FONT = PDType1Font.HELVETICA; > memoryUsageSetting = MemoryUsageSetting.setupMixed(2 * ONE_GIGA, 40 * > ONE_GIGA); > //try (PDDocument pdfDocument = PDDocument.load(is, memoryUsageSetting)) { > // 2.0.26 > try (PDDocument pdfDocument = Loader.loadPDF(inputStream, > memoryUsageSetting)) { // 3.0.0-RC1 > int nbPages = addWatermark(watermarkText, pdfDocument); > pdfDocument.save(os); > } > ... > private int addWatermark(String watermarkText, PDDocument document) throws > IOException { > int numberOfPages = document.getNumberOfPages(); > System.out.printf("Start adding watermark on a %d pages PDF > document%n", numberOfPages); > long start = System.nanoTime(); > int pageIndex = 0; > for(PDPage page : document.getPages()) { > ++pageIndex; > try (PDPageContentStream cs = new PDPageContentStream(document, > page, PDPageContentStream.AppendMode.APPEND, true, true)) { > float width = page.getMediaBox().getWidth(); > float height = page.getMediaBox().getHeight(); > int rotation = page.getRotation(); > switch(rotation) { > case 90: > width = page.getMediaBox().getHeight(); > height = page.getMediaBox().getWidth(); > > cs.transform(Matrix.getRotateInstance(Math.toRadians(90), height, 0)); > break; > case 180: > > cs.transform(Matrix.getRotateInstance(Math.toRadians(180), width, height)); > break; > case 270: > width = page.getMediaBox().getHeight(); > height = page.getMediaBox().getWidth(); > > cs.transform(Matrix.getRotateInstance(Math.toRadians(270), 0, width)); > break; > default: > break; > } > double stringWidth = > (double)PDF_FONT.getStringWidth(watermarkText) / 1000 * FONT_HEIGHT; > double diagonalLength = Math.sqrt((double)width * width + > (double)height * height); > double angle = Math.atan2(height, width); > cs.transform(Matrix.getRotateInstance(angle, 0, 0)); > cs.setFont(PDF_FONT, (float)FONT_HEIGHT); > //cs.setRenderingMode(RenderingMode.STROKE); // for "hollow" > effect > PDExtendedGraphicsState gs = new PDExtendedGraphicsState(); > gs.setNonStrokingAlphaConstant(0.2f); > gs.setStrokingAlphaConstant(0.2f); > gs.setBlendMode(BlendMode.MULTIPLY); > cs.setGraphicsStateParameters(gs); > // some API weirdness here. When int, range is 0..255. > // when float, this would be 0..1f > cs.setNonStrokingColor(0f, 0, 0); > cs.setStrokingColor(0f, 0, 0); // black > float x = (float)((diagonalLength - stringWidth) / 2); // > "horizontal" position in rotated world > float y = (float)(-FONT_HEIGHT / 4); // 4 is a trial-and-error > thing, this lowers the text a bit > cs.beginText(); > cs.newLineAtOffset(x, y); > cs.showText(watermarkText); > cs.endText(); > } finally { > ... > } > return numberOfPages; > } > {code} -- This message was sent by Atlassian Jira (v8.20.7#820007)
[jira] [Comment Edited] (PDFBOX-5462) OutOfMemoryError when watermaking in 3.0.0-RC1
[ https://issues.apache.org/jira/browse/PDFBOX-5462?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17555936#comment-17555936 ] Marian Ion edited comment on PDFBOX-5462 at 6/18/22 4:36 PM: - Here's what *Eclipse Memory Analyzer* finds on a heap dump: {code:java} main at java.lang.OutOfMemoryError.()V (OutOfMemoryError.java:48) at java.nio.HeapByteBuffer.duplicate()Ljava/nio/ByteBuffer; (HeapByteBuffer.java:131) at org.apache.pdfbox.io.RandomAccessReadBuffer.(Lorg/apache/pdfbox/io/RandomAccessReadBuffer;)V (RandomAccessReadBuffer.java:135) at org.apache.pdfbox.io.RandomAccessReadBuffer.createView(JJ)Lorg/apache/pdfbox/io/RandomAccessReadView; (RandomAccessReadBuffer.java:363) at org.apache.pdfbox.pdfparser.COSParser.createRandomAccessReadView(JJ)Lorg/apache/pdfbox/io/RandomAccessReadView; (COSParser.java:585) at org.apache.pdfbox.cos.COSDocument.createCOSStream(Lorg/apache/pdfbox/cos/COSDictionary;JJ)Lorg/apache/pdfbox/cos/COSStream; (COSDocument.java:185) at org.apache.pdfbox.pdfparser.COSParser.parseCOSStream(Lorg/apache/pdfbox/cos/COSDictionary;)Lorg/apache/pdfbox/cos/COSStream; (COSParser.java:914) at org.apache.pdfbox.pdfparser.COSParser.parseFileObject(Ljava/lang/Long;Lorg/apache/pdfbox/cos/COSObjectKey;)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:693) at org.apache.pdfbox.pdfparser.COSParser.parseObjectDynamically(Lorg/apache/pdfbox/cos/COSObjectKey;Z)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:615) at org.apache.pdfbox.pdfparser.COSParser.dereferenceCOSObject(Lorg/apache/pdfbox/cos/COSObject;)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:573) at org.apache.pdfbox.cos.COSObject.getObject()Lorg/apache/pdfbox/cos/COSBase; (COSObject.java:121) at org.apache.pdfbox.cos.COSDictionary.getDictionaryObject(Lorg/apache/pdfbox/cos/COSName;)Lorg/apache/pdfbox/cos/COSBase; (COSDictionary.java:183) at org.apache.pdfbox.pdmodel.PDPage.hasContents()Z (PDPage.java:218) at org.apache.pdfbox.pdmodel.PDPageContentStream.(Lorg/apache/pdfbox/pdmodel/PDDocument;Lorg/apache/pdfbox/pdmodel/PDPage;Lorg/apache/pdfbox/pdmodel/PDPageContentStream$AppendMode;ZZLorg/apache/pdfbox/pdmodel/common/PDStream;Lorg/apache/pdfbox/pdmodel/PDResources;)V (PDPageContentStream.java:140) at org.apache.pdfbox.pdmodel.PDPageContentStream.(Lorg/apache/pdfbox/pdmodel/PDDocument;Lorg/apache/pdfbox/pdmodel/PDPage;Lorg/apache/pdfbox/pdmodel/PDPageContentStream$AppendMode;ZZ)V (PDPageContentStream.java:123) at PdfboxWatermark.addWatermark(Ljava/lang/String;Lorg/apache/pdfbox/pdmodel/PDDocument;)I (PdfboxWatermark.java:57) at PdfboxWatermark.setWatermarkOnContent(Ljava/lang/String;Ljava/io/InputStream;Ljava/io/OutputStream;)I (PdfboxWatermark.java:37) at WatermarkPDF.main([Ljava/lang/String;)V (WatermarkPDF.java:29) {code} was (Author: JIRAUSER291146): Here's what *Eclipse Memory Analyzer *finds on a heap dump: {code:java} main at java.lang.OutOfMemoryError.()V (OutOfMemoryError.java:48) at java.nio.HeapByteBuffer.duplicate()Ljava/nio/ByteBuffer; (HeapByteBuffer.java:131) at org.apache.pdfbox.io.RandomAccessReadBuffer.(Lorg/apache/pdfbox/io/RandomAccessReadBuffer;)V (RandomAccessReadBuffer.java:135) at org.apache.pdfbox.io.RandomAccessReadBuffer.createView(JJ)Lorg/apache/pdfbox/io/RandomAccessReadView; (RandomAccessReadBuffer.java:363) at org.apache.pdfbox.pdfparser.COSParser.createRandomAccessReadView(JJ)Lorg/apache/pdfbox/io/RandomAccessReadView; (COSParser.java:585) at org.apache.pdfbox.cos.COSDocument.createCOSStream(Lorg/apache/pdfbox/cos/COSDictionary;JJ)Lorg/apache/pdfbox/cos/COSStream; (COSDocument.java:185) at org.apache.pdfbox.pdfparser.COSParser.parseCOSStream(Lorg/apache/pdfbox/cos/COSDictionary;)Lorg/apache/pdfbox/cos/COSStream; (COSParser.java:914) at org.apache.pdfbox.pdfparser.COSParser.parseFileObject(Ljava/lang/Long;Lorg/apache/pdfbox/cos/COSObjectKey;)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:693) at org.apache.pdfbox.pdfparser.COSParser.parseObjectDynamically(Lorg/apache/pdfbox/cos/COSObjectKey;Z)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:615) at org.apache.pdfbox.pdfparser.COSParser.dereferenceCOSObject(Lorg/apache/pdfbox/cos/COSObject;)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:573) at org.apache.pdfbox.cos.COSObject.getObject()Lorg/apache/pdfbox/cos/COSBase; (COSObject.java:121) at org.apache.pdfbox.cos.COSDictionary.getDictionaryObject(Lorg/apache/pdfbox/cos/COSName;)Lorg/apache/pdfbox/cos/COSBase; (COSDictionary.java:183) at org.apache.pdfbox.pdmodel.PDPage.hasContents()Z (PDPage.java:218) at org.apache.pdfbox.pdmodel.PDPageContentStream.(Lorg/apache/pdfbox/pdmodel/PDDocument;Lorg/apache/pdfbox/pdmodel/PDPage;Lorg/apache/pdfbox/pdmodel/PDPageContentStream$AppendMode;ZZLorg/apache/pdfbox/pdmodel/common/PDStream;Lorg/apache/pdfbox/pdmodel/PDResources;)V (PDPageContentStream.java:140) at
[jira] [Comment Edited] (PDFBOX-5462) OutOfMemoryError when watermaking in 3.0.0-RC1
[ https://issues.apache.org/jira/browse/PDFBOX-5462?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17555936#comment-17555936 ] Marian Ion edited comment on PDFBOX-5462 at 6/18/22 4:35 PM: - Here's what *Eclipse Memory Analyzer *finds on a heap dump: {code:java} main at java.lang.OutOfMemoryError.()V (OutOfMemoryError.java:48) at java.nio.HeapByteBuffer.duplicate()Ljava/nio/ByteBuffer; (HeapByteBuffer.java:131) at org.apache.pdfbox.io.RandomAccessReadBuffer.(Lorg/apache/pdfbox/io/RandomAccessReadBuffer;)V (RandomAccessReadBuffer.java:135) at org.apache.pdfbox.io.RandomAccessReadBuffer.createView(JJ)Lorg/apache/pdfbox/io/RandomAccessReadView; (RandomAccessReadBuffer.java:363) at org.apache.pdfbox.pdfparser.COSParser.createRandomAccessReadView(JJ)Lorg/apache/pdfbox/io/RandomAccessReadView; (COSParser.java:585) at org.apache.pdfbox.cos.COSDocument.createCOSStream(Lorg/apache/pdfbox/cos/COSDictionary;JJ)Lorg/apache/pdfbox/cos/COSStream; (COSDocument.java:185) at org.apache.pdfbox.pdfparser.COSParser.parseCOSStream(Lorg/apache/pdfbox/cos/COSDictionary;)Lorg/apache/pdfbox/cos/COSStream; (COSParser.java:914) at org.apache.pdfbox.pdfparser.COSParser.parseFileObject(Ljava/lang/Long;Lorg/apache/pdfbox/cos/COSObjectKey;)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:693) at org.apache.pdfbox.pdfparser.COSParser.parseObjectDynamically(Lorg/apache/pdfbox/cos/COSObjectKey;Z)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:615) at org.apache.pdfbox.pdfparser.COSParser.dereferenceCOSObject(Lorg/apache/pdfbox/cos/COSObject;)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:573) at org.apache.pdfbox.cos.COSObject.getObject()Lorg/apache/pdfbox/cos/COSBase; (COSObject.java:121) at org.apache.pdfbox.cos.COSDictionary.getDictionaryObject(Lorg/apache/pdfbox/cos/COSName;)Lorg/apache/pdfbox/cos/COSBase; (COSDictionary.java:183) at org.apache.pdfbox.pdmodel.PDPage.hasContents()Z (PDPage.java:218) at org.apache.pdfbox.pdmodel.PDPageContentStream.(Lorg/apache/pdfbox/pdmodel/PDDocument;Lorg/apache/pdfbox/pdmodel/PDPage;Lorg/apache/pdfbox/pdmodel/PDPageContentStream$AppendMode;ZZLorg/apache/pdfbox/pdmodel/common/PDStream;Lorg/apache/pdfbox/pdmodel/PDResources;)V (PDPageContentStream.java:140) at org.apache.pdfbox.pdmodel.PDPageContentStream.(Lorg/apache/pdfbox/pdmodel/PDDocument;Lorg/apache/pdfbox/pdmodel/PDPage;Lorg/apache/pdfbox/pdmodel/PDPageContentStream$AppendMode;ZZ)V (PDPageContentStream.java:123) at PdfboxWatermark.addWatermark(Ljava/lang/String;Lorg/apache/pdfbox/pdmodel/PDDocument;)I (PdfboxWatermark.java:57) at PdfboxWatermark.setWatermarkOnContent(Ljava/lang/String;Ljava/io/InputStream;Ljava/io/OutputStream;)I (PdfboxWatermark.java:37) at WatermarkPDF.main([Ljava/lang/String;)V (WatermarkPDF.java:29) {code} was (Author: JIRAUSER291146): Here's what Eclipse Memory Analyzer finds on a heap dump: {code:java} main at java.lang.OutOfMemoryError.()V (OutOfMemoryError.java:48) at java.nio.HeapByteBuffer.duplicate()Ljava/nio/ByteBuffer; (HeapByteBuffer.java:131) at org.apache.pdfbox.io.RandomAccessReadBuffer.(Lorg/apache/pdfbox/io/RandomAccessReadBuffer;)V (RandomAccessReadBuffer.java:135) at org.apache.pdfbox.io.RandomAccessReadBuffer.createView(JJ)Lorg/apache/pdfbox/io/RandomAccessReadView; (RandomAccessReadBuffer.java:363) at org.apache.pdfbox.pdfparser.COSParser.createRandomAccessReadView(JJ)Lorg/apache/pdfbox/io/RandomAccessReadView; (COSParser.java:585) at org.apache.pdfbox.cos.COSDocument.createCOSStream(Lorg/apache/pdfbox/cos/COSDictionary;JJ)Lorg/apache/pdfbox/cos/COSStream; (COSDocument.java:185) at org.apache.pdfbox.pdfparser.COSParser.parseCOSStream(Lorg/apache/pdfbox/cos/COSDictionary;)Lorg/apache/pdfbox/cos/COSStream; (COSParser.java:914) at org.apache.pdfbox.pdfparser.COSParser.parseFileObject(Ljava/lang/Long;Lorg/apache/pdfbox/cos/COSObjectKey;)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:693) at org.apache.pdfbox.pdfparser.COSParser.parseObjectDynamically(Lorg/apache/pdfbox/cos/COSObjectKey;Z)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:615) at org.apache.pdfbox.pdfparser.COSParser.dereferenceCOSObject(Lorg/apache/pdfbox/cos/COSObject;)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:573) at org.apache.pdfbox.cos.COSObject.getObject()Lorg/apache/pdfbox/cos/COSBase; (COSObject.java:121) at org.apache.pdfbox.cos.COSDictionary.getDictionaryObject(Lorg/apache/pdfbox/cos/COSName;)Lorg/apache/pdfbox/cos/COSBase; (COSDictionary.java:183) at org.apache.pdfbox.pdmodel.PDPage.hasContents()Z (PDPage.java:218) at org.apache.pdfbox.pdmodel.PDPageContentStream.(Lorg/apache/pdfbox/pdmodel/PDDocument;Lorg/apache/pdfbox/pdmodel/PDPage;Lorg/apache/pdfbox/pdmodel/PDPageContentStream$AppendMode;ZZLorg/apache/pdfbox/pdmodel/common/PDStream;Lorg/apache/pdfbox/pdmodel/PDResources;)V (PDPageContentStream.java:140) at
[jira] [Commented] (PDFBOX-5462) OutOfMemoryError when watermaking in 3.0.0-RC1
[ https://issues.apache.org/jira/browse/PDFBOX-5462?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17555936#comment-17555936 ] Marian Ion commented on PDFBOX-5462: Here's what Eclipse Memory Analyzer finds on a heap dump: {code:java} main at java.lang.OutOfMemoryError.()V (OutOfMemoryError.java:48) at java.nio.HeapByteBuffer.duplicate()Ljava/nio/ByteBuffer; (HeapByteBuffer.java:131) at org.apache.pdfbox.io.RandomAccessReadBuffer.(Lorg/apache/pdfbox/io/RandomAccessReadBuffer;)V (RandomAccessReadBuffer.java:135) at org.apache.pdfbox.io.RandomAccessReadBuffer.createView(JJ)Lorg/apache/pdfbox/io/RandomAccessReadView; (RandomAccessReadBuffer.java:363) at org.apache.pdfbox.pdfparser.COSParser.createRandomAccessReadView(JJ)Lorg/apache/pdfbox/io/RandomAccessReadView; (COSParser.java:585) at org.apache.pdfbox.cos.COSDocument.createCOSStream(Lorg/apache/pdfbox/cos/COSDictionary;JJ)Lorg/apache/pdfbox/cos/COSStream; (COSDocument.java:185) at org.apache.pdfbox.pdfparser.COSParser.parseCOSStream(Lorg/apache/pdfbox/cos/COSDictionary;)Lorg/apache/pdfbox/cos/COSStream; (COSParser.java:914) at org.apache.pdfbox.pdfparser.COSParser.parseFileObject(Ljava/lang/Long;Lorg/apache/pdfbox/cos/COSObjectKey;)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:693) at org.apache.pdfbox.pdfparser.COSParser.parseObjectDynamically(Lorg/apache/pdfbox/cos/COSObjectKey;Z)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:615) at org.apache.pdfbox.pdfparser.COSParser.dereferenceCOSObject(Lorg/apache/pdfbox/cos/COSObject;)Lorg/apache/pdfbox/cos/COSBase; (COSParser.java:573) at org.apache.pdfbox.cos.COSObject.getObject()Lorg/apache/pdfbox/cos/COSBase; (COSObject.java:121) at org.apache.pdfbox.cos.COSDictionary.getDictionaryObject(Lorg/apache/pdfbox/cos/COSName;)Lorg/apache/pdfbox/cos/COSBase; (COSDictionary.java:183) at org.apache.pdfbox.pdmodel.PDPage.hasContents()Z (PDPage.java:218) at org.apache.pdfbox.pdmodel.PDPageContentStream.(Lorg/apache/pdfbox/pdmodel/PDDocument;Lorg/apache/pdfbox/pdmodel/PDPage;Lorg/apache/pdfbox/pdmodel/PDPageContentStream$AppendMode;ZZLorg/apache/pdfbox/pdmodel/common/PDStream;Lorg/apache/pdfbox/pdmodel/PDResources;)V (PDPageContentStream.java:140) at org.apache.pdfbox.pdmodel.PDPageContentStream.(Lorg/apache/pdfbox/pdmodel/PDDocument;Lorg/apache/pdfbox/pdmodel/PDPage;Lorg/apache/pdfbox/pdmodel/PDPageContentStream$AppendMode;ZZ)V (PDPageContentStream.java:123) at PdfboxWatermark.addWatermark(Ljava/lang/String;Lorg/apache/pdfbox/pdmodel/PDDocument;)I (PdfboxWatermark.java:57) at PdfboxWatermark.setWatermarkOnContent(Ljava/lang/String;Ljava/io/InputStream;Ljava/io/OutputStream;)I (PdfboxWatermark.java:37) at WatermarkPDF.main([Ljava/lang/String;)V (WatermarkPDF.java:29) {code} > OutOfMemoryError when watermaking in 3.0.0-RC1 > -- > > Key: PDFBOX-5462 > URL: https://issues.apache.org/jira/browse/PDFBOX-5462 > Project: PDFBox > Issue Type: Bug >Affects Versions: 3.0.0 PDFBox >Reporter: Marian Ion >Priority: Major > > I am using the Maven *3.0.0-RC1* version and I encounter the following error > when watermarking a 5120 pages file: > {quote} java.lang.OutOfMemoryError: Java heap space: failed reallocation of > scalar replaced objects > {quote} > > However, the *2.0.26* version code works without problem! > The code is basically this : > {code:java} > private static final PDFont PDF_FONT = PDType1Font.HELVETICA; > memoryUsageSetting = MemoryUsageSetting.setupMixed(2 * ONE_GIGA, 40 * > ONE_GIGA); > //try (PDDocument pdfDocument = PDDocument.load(is, memoryUsageSetting)) { > // 2.0.26 > try (PDDocument pdfDocument = Loader.loadPDF(inputStream, > memoryUsageSetting)) { // 3.0.0-RC1 > int nbPages = addWatermark(watermarkText, pdfDocument); > pdfDocument.save(os); > } > ... > private int addWatermark(String watermarkText, PDDocument document) throws > IOException { > int numberOfPages = document.getNumberOfPages(); > System.out.printf("Start adding watermark on a %d pages PDF > document%n", numberOfPages); > long start = System.nanoTime(); > int pageIndex = 0; > for(PDPage page : document.getPages()) { > ++pageIndex; > try (PDPageContentStream cs = new PDPageContentStream(document, > page, PDPageContentStream.AppendMode.APPEND, true, true)) { > float width = page.getMediaBox().getWidth(); > float height = page.getMediaBox().getHeight(); > int rotation = page.getRotation(); > switch(rotation) { > case 90: > width = page.getMediaBox().getHeight(); > height = page.getMediaBox().getWidth(); >
[jira] [Commented] (PDFBOX-5462) OutOfMemoryError when watermaking in 3.0.0-RC1
[ https://issues.apache.org/jira/browse/PDFBOX-5462?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17555932#comment-17555932 ] Maruan Sahyoun commented on PDFBOX-5462: Do you have the full stack trace? Are you using Java 11 and 17 also for 2.0.26? Not related but maybe move {code:java} double stringWidth = (double)PDF_FONT.getStringWidth(watermarkText) / 1000 * FONT_HEIGHT; {code} out of the loop as this is a costly operation and AFAIU {{stringWidth}} will always be the same > OutOfMemoryError when watermaking in 3.0.0-RC1 > -- > > Key: PDFBOX-5462 > URL: https://issues.apache.org/jira/browse/PDFBOX-5462 > Project: PDFBox > Issue Type: Bug >Affects Versions: 3.0.0 PDFBox >Reporter: Marian Ion >Priority: Major > > I am using the Maven *3.0.0-RC1* version and I encounter the following error > when watermarking a 5120 pages file: > {quote} java.lang.OutOfMemoryError: Java heap space: failed reallocation of > scalar replaced objects > {quote} > > However, the *2.0.26* version code works without problem! > The code is basically this : > {code:java} > private static final PDFont PDF_FONT = PDType1Font.HELVETICA; > memoryUsageSetting = MemoryUsageSetting.setupMixed(2 * ONE_GIGA, 40 * > ONE_GIGA); > //try (PDDocument pdfDocument = PDDocument.load(is, memoryUsageSetting)) { > // 2.0.26 > try (PDDocument pdfDocument = Loader.loadPDF(inputStream, > memoryUsageSetting)) { // 3.0.0-RC1 > int nbPages = addWatermark(watermarkText, pdfDocument); > pdfDocument.save(os); > } > ... > private int addWatermark(String watermarkText, PDDocument document) throws > IOException { > int numberOfPages = document.getNumberOfPages(); > System.out.printf("Start adding watermark on a %d pages PDF > document%n", numberOfPages); > long start = System.nanoTime(); > int pageIndex = 0; > for(PDPage page : document.getPages()) { > ++pageIndex; > try (PDPageContentStream cs = new PDPageContentStream(document, > page, PDPageContentStream.AppendMode.APPEND, true, true)) { > float width = page.getMediaBox().getWidth(); > float height = page.getMediaBox().getHeight(); > int rotation = page.getRotation(); > switch(rotation) { > case 90: > width = page.getMediaBox().getHeight(); > height = page.getMediaBox().getWidth(); > > cs.transform(Matrix.getRotateInstance(Math.toRadians(90), height, 0)); > break; > case 180: > > cs.transform(Matrix.getRotateInstance(Math.toRadians(180), width, height)); > break; > case 270: > width = page.getMediaBox().getHeight(); > height = page.getMediaBox().getWidth(); > > cs.transform(Matrix.getRotateInstance(Math.toRadians(270), 0, width)); > break; > default: > break; > } > double stringWidth = > (double)PDF_FONT.getStringWidth(watermarkText) / 1000 * FONT_HEIGHT; > double diagonalLength = Math.sqrt((double)width * width + > (double)height * height); > double angle = Math.atan2(height, width); > cs.transform(Matrix.getRotateInstance(angle, 0, 0)); > cs.setFont(PDF_FONT, (float)FONT_HEIGHT); > //cs.setRenderingMode(RenderingMode.STROKE); // for "hollow" > effect > PDExtendedGraphicsState gs = new PDExtendedGraphicsState(); > gs.setNonStrokingAlphaConstant(0.2f); > gs.setStrokingAlphaConstant(0.2f); > gs.setBlendMode(BlendMode.MULTIPLY); > cs.setGraphicsStateParameters(gs); > // some API weirdness here. When int, range is 0..255. > // when float, this would be 0..1f > cs.setNonStrokingColor(0f, 0, 0); > cs.setStrokingColor(0f, 0, 0); // black > float x = (float)((diagonalLength - stringWidth) / 2); // > "horizontal" position in rotated world > float y = (float)(-FONT_HEIGHT / 4); // 4 is a trial-and-error > thing, this lowers the text a bit > cs.beginText(); > cs.newLineAtOffset(x, y); > cs.showText(watermarkText); > cs.endText(); > } finally { > ... > } > return
[jira] [Comment Edited] (PDFBOX-5462) OutOfMemoryError when watermaking in 3.0.0-RC1
[ https://issues.apache.org/jira/browse/PDFBOX-5462?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17555927#comment-17555927 ] Marian Ion edited comment on PDFBOX-5462 at 6/18/22 3:57 PM: - The problems are (IMHO) # the code works with 2.0.26, I was expecting it to work with 3.x too, # the PDF has ~1,5G, I don't think loading it in memory is a better solution (what about a 10G PDF then?) # it crashes when watermarking page 291 out of 5120 pages # the PDF has 4 pages that repeat themselves 1280 times, and of those 4 pages, 3 contain images only. I forget to tell you that I am on Linux (Ubuntu 20.04, amd64) and both Java 11 and Java 17 exhibit the same behaviour: {quote} Exception in thread "main" java.lang.OutOfMemoryError: Java heap space: failed reallocation of scalar replaced objects {quote} I can eventually supply the code I use in order to reproduce the issue by yourselves. was (Author: JIRAUSER291146): The problems are (IMHO) # the code works with 2.0.26, I was expecting to work with 3.x, # the PDF has ~1,5G, I don't think loading it in memory is a better solution (what about a 10G PDF then?) # it crashes when watermarking page 291 out of 5120 pages # the PDF has 4 pages that repeat themselves 1280 times, and of those 4 pages, 3 contain images only. I forget to tell you that I am on Linux (Ubuntu 20.04, amd64) and both Java 11 and Java 17 exhibit the same behaviour: {quote} Exception in thread "main" java.lang.OutOfMemoryError: Java heap space: failed reallocation of scalar replaced objects {quote} I can eventually supply the code I use in order to reproduce the issue by yourselves. > OutOfMemoryError when watermaking in 3.0.0-RC1 > -- > > Key: PDFBOX-5462 > URL: https://issues.apache.org/jira/browse/PDFBOX-5462 > Project: PDFBox > Issue Type: Bug >Affects Versions: 3.0.0 PDFBox >Reporter: Marian Ion >Priority: Major > > I am using the Maven *3.0.0-RC1* version and I encounter the following error > when watermarking a 5120 pages file: > {quote} java.lang.OutOfMemoryError: Java heap space: failed reallocation of > scalar replaced objects > {quote} > > However, the *2.0.26* version code works without problem! > The code is basically this : > {code:java} > private static final PDFont PDF_FONT = PDType1Font.HELVETICA; > memoryUsageSetting = MemoryUsageSetting.setupMixed(2 * ONE_GIGA, 40 * > ONE_GIGA); > //try (PDDocument pdfDocument = PDDocument.load(is, memoryUsageSetting)) { > // 2.0.26 > try (PDDocument pdfDocument = Loader.loadPDF(inputStream, > memoryUsageSetting)) { // 3.0.0-RC1 > int nbPages = addWatermark(watermarkText, pdfDocument); > pdfDocument.save(os); > } > ... > private int addWatermark(String watermarkText, PDDocument document) throws > IOException { > int numberOfPages = document.getNumberOfPages(); > System.out.printf("Start adding watermark on a %d pages PDF > document%n", numberOfPages); > long start = System.nanoTime(); > int pageIndex = 0; > for(PDPage page : document.getPages()) { > ++pageIndex; > try (PDPageContentStream cs = new PDPageContentStream(document, > page, PDPageContentStream.AppendMode.APPEND, true, true)) { > float width = page.getMediaBox().getWidth(); > float height = page.getMediaBox().getHeight(); > int rotation = page.getRotation(); > switch(rotation) { > case 90: > width = page.getMediaBox().getHeight(); > height = page.getMediaBox().getWidth(); > > cs.transform(Matrix.getRotateInstance(Math.toRadians(90), height, 0)); > break; > case 180: > > cs.transform(Matrix.getRotateInstance(Math.toRadians(180), width, height)); > break; > case 270: > width = page.getMediaBox().getHeight(); > height = page.getMediaBox().getWidth(); > > cs.transform(Matrix.getRotateInstance(Math.toRadians(270), 0, width)); > break; > default: > break; > } > double stringWidth = > (double)PDF_FONT.getStringWidth(watermarkText) / 1000 * FONT_HEIGHT; > double diagonalLength = Math.sqrt((double)width * width + > (double)height * height); > double angle = Math.atan2(height, width); >
[jira] [Comment Edited] (PDFBOX-5462) OutOfMemoryError when watermaking in 3.0.0-RC1
[ https://issues.apache.org/jira/browse/PDFBOX-5462?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17555927#comment-17555927 ] Marian Ion edited comment on PDFBOX-5462 at 6/18/22 3:56 PM: - The problems are (IMHO) # the code works with 2.0.26, I was expecting to work with 3.x, # the PDF has ~1,5G, I don't think loading it in memory is a better solution (what about a 10G PDF then?) # it crashes when watermarking page 291 out of 5120 pages # the PDF has 4 pages that repeat themselves 1280 times, and of those 4 pages 3 contain images only. I forget to tell you that I am on Linux (Ubuntu 20.04, amd64) and both Java 11 and Java 17 exhibit the same behaviour: {quote} Exception in thread "main" java.lang.OutOfMemoryError: Java heap space: failed reallocation of scalar replaced objects {quote} I can eventually supply the code I use in order to reproduce the issue by yourselves. was (Author: JIRAUSER291146): The problems are (IMHO) # the code works with 2.0.26, I was expecting to work with 3.x, # the PDF has ~1,5G, I don't think loading it in memory is a better solution (what about a 10G PDF then?) I forget to tell you that I am on Linux (Ubuntu 20.04, amd64) and both Java 11 and Java 17 exhibit the same behaviour: {quote} Exception in thread "main" java.lang.OutOfMemoryError: Java heap space: failed reallocation of scalar replaced objects {quote} I can eventually supply the code I use in order to reproduce the issue by yourselves. > OutOfMemoryError when watermaking in 3.0.0-RC1 > -- > > Key: PDFBOX-5462 > URL: https://issues.apache.org/jira/browse/PDFBOX-5462 > Project: PDFBox > Issue Type: Bug >Affects Versions: 3.0.0 PDFBox >Reporter: Marian Ion >Priority: Major > > I am using the Maven *3.0.0-RC1* version and I encounter the following error > when watermarking a 5120 pages file: > {quote} java.lang.OutOfMemoryError: Java heap space: failed reallocation of > scalar replaced objects > {quote} > > However, the *2.0.26* version code works without problem! > The code is basically this : > {code:java} > private static final PDFont PDF_FONT = PDType1Font.HELVETICA; > memoryUsageSetting = MemoryUsageSetting.setupMixed(2 * ONE_GIGA, 40 * > ONE_GIGA); > //try (PDDocument pdfDocument = PDDocument.load(is, memoryUsageSetting)) { > // 2.0.26 > try (PDDocument pdfDocument = Loader.loadPDF(inputStream, > memoryUsageSetting)) { // 3.0.0-RC1 > int nbPages = addWatermark(watermarkText, pdfDocument); > pdfDocument.save(os); > } > ... > private int addWatermark(String watermarkText, PDDocument document) throws > IOException { > int numberOfPages = document.getNumberOfPages(); > System.out.printf("Start adding watermark on a %d pages PDF > document%n", numberOfPages); > long start = System.nanoTime(); > int pageIndex = 0; > for(PDPage page : document.getPages()) { > ++pageIndex; > try (PDPageContentStream cs = new PDPageContentStream(document, > page, PDPageContentStream.AppendMode.APPEND, true, true)) { > float width = page.getMediaBox().getWidth(); > float height = page.getMediaBox().getHeight(); > int rotation = page.getRotation(); > switch(rotation) { > case 90: > width = page.getMediaBox().getHeight(); > height = page.getMediaBox().getWidth(); > > cs.transform(Matrix.getRotateInstance(Math.toRadians(90), height, 0)); > break; > case 180: > > cs.transform(Matrix.getRotateInstance(Math.toRadians(180), width, height)); > break; > case 270: > width = page.getMediaBox().getHeight(); > height = page.getMediaBox().getWidth(); > > cs.transform(Matrix.getRotateInstance(Math.toRadians(270), 0, width)); > break; > default: > break; > } > double stringWidth = > (double)PDF_FONT.getStringWidth(watermarkText) / 1000 * FONT_HEIGHT; > double diagonalLength = Math.sqrt((double)width * width + > (double)height * height); > double angle = Math.atan2(height, width); > cs.transform(Matrix.getRotateInstance(angle, 0, 0)); > cs.setFont(PDF_FONT, (float)FONT_HEIGHT); >
[jira] [Comment Edited] (PDFBOX-5462) OutOfMemoryError when watermaking in 3.0.0-RC1
[ https://issues.apache.org/jira/browse/PDFBOX-5462?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17555927#comment-17555927 ] Marian Ion edited comment on PDFBOX-5462 at 6/18/22 3:56 PM: - The problems are (IMHO) # the code works with 2.0.26, I was expecting to work with 3.x, # the PDF has ~1,5G, I don't think loading it in memory is a better solution (what about a 10G PDF then?) # it crashes when watermarking page 291 out of 5120 pages # the PDF has 4 pages that repeat themselves 1280 times, and of those 4 pages, 3 contain images only. I forget to tell you that I am on Linux (Ubuntu 20.04, amd64) and both Java 11 and Java 17 exhibit the same behaviour: {quote} Exception in thread "main" java.lang.OutOfMemoryError: Java heap space: failed reallocation of scalar replaced objects {quote} I can eventually supply the code I use in order to reproduce the issue by yourselves. was (Author: JIRAUSER291146): The problems are (IMHO) # the code works with 2.0.26, I was expecting to work with 3.x, # the PDF has ~1,5G, I don't think loading it in memory is a better solution (what about a 10G PDF then?) # it crashes when watermarking page 291 out of 5120 pages # the PDF has 4 pages that repeat themselves 1280 times, and of those 4 pages 3 contain images only. I forget to tell you that I am on Linux (Ubuntu 20.04, amd64) and both Java 11 and Java 17 exhibit the same behaviour: {quote} Exception in thread "main" java.lang.OutOfMemoryError: Java heap space: failed reallocation of scalar replaced objects {quote} I can eventually supply the code I use in order to reproduce the issue by yourselves. > OutOfMemoryError when watermaking in 3.0.0-RC1 > -- > > Key: PDFBOX-5462 > URL: https://issues.apache.org/jira/browse/PDFBOX-5462 > Project: PDFBox > Issue Type: Bug >Affects Versions: 3.0.0 PDFBox >Reporter: Marian Ion >Priority: Major > > I am using the Maven *3.0.0-RC1* version and I encounter the following error > when watermarking a 5120 pages file: > {quote} java.lang.OutOfMemoryError: Java heap space: failed reallocation of > scalar replaced objects > {quote} > > However, the *2.0.26* version code works without problem! > The code is basically this : > {code:java} > private static final PDFont PDF_FONT = PDType1Font.HELVETICA; > memoryUsageSetting = MemoryUsageSetting.setupMixed(2 * ONE_GIGA, 40 * > ONE_GIGA); > //try (PDDocument pdfDocument = PDDocument.load(is, memoryUsageSetting)) { > // 2.0.26 > try (PDDocument pdfDocument = Loader.loadPDF(inputStream, > memoryUsageSetting)) { // 3.0.0-RC1 > int nbPages = addWatermark(watermarkText, pdfDocument); > pdfDocument.save(os); > } > ... > private int addWatermark(String watermarkText, PDDocument document) throws > IOException { > int numberOfPages = document.getNumberOfPages(); > System.out.printf("Start adding watermark on a %d pages PDF > document%n", numberOfPages); > long start = System.nanoTime(); > int pageIndex = 0; > for(PDPage page : document.getPages()) { > ++pageIndex; > try (PDPageContentStream cs = new PDPageContentStream(document, > page, PDPageContentStream.AppendMode.APPEND, true, true)) { > float width = page.getMediaBox().getWidth(); > float height = page.getMediaBox().getHeight(); > int rotation = page.getRotation(); > switch(rotation) { > case 90: > width = page.getMediaBox().getHeight(); > height = page.getMediaBox().getWidth(); > > cs.transform(Matrix.getRotateInstance(Math.toRadians(90), height, 0)); > break; > case 180: > > cs.transform(Matrix.getRotateInstance(Math.toRadians(180), width, height)); > break; > case 270: > width = page.getMediaBox().getHeight(); > height = page.getMediaBox().getWidth(); > > cs.transform(Matrix.getRotateInstance(Math.toRadians(270), 0, width)); > break; > default: > break; > } > double stringWidth = > (double)PDF_FONT.getStringWidth(watermarkText) / 1000 * FONT_HEIGHT; > double diagonalLength = Math.sqrt((double)width * width + > (double)height * height); > double angle = Math.atan2(height, width); >
[jira] [Commented] (PDFBOX-5462) OutOfMemoryError when watermaking in 3.0.0-RC1
[ https://issues.apache.org/jira/browse/PDFBOX-5462?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17555931#comment-17555931 ] Marian Ion commented on PDFBOX-5462: {quote} You could save memory by creating PDExtendedGraphicsState and the font outside of the loop {quote} No, because pages may have different sizes, I need to compute for each one the watermark text position. And, as you said, this does not explain why *2.0.26* works! > OutOfMemoryError when watermaking in 3.0.0-RC1 > -- > > Key: PDFBOX-5462 > URL: https://issues.apache.org/jira/browse/PDFBOX-5462 > Project: PDFBox > Issue Type: Bug >Affects Versions: 3.0.0 PDFBox >Reporter: Marian Ion >Priority: Major > > I am using the Maven *3.0.0-RC1* version and I encounter the following error > when watermarking a 5120 pages file: > {quote} java.lang.OutOfMemoryError: Java heap space: failed reallocation of > scalar replaced objects > {quote} > > However, the *2.0.26* version code works without problem! > The code is basically this : > {code:java} > private static final PDFont PDF_FONT = PDType1Font.HELVETICA; > memoryUsageSetting = MemoryUsageSetting.setupMixed(2 * ONE_GIGA, 40 * > ONE_GIGA); > //try (PDDocument pdfDocument = PDDocument.load(is, memoryUsageSetting)) { > // 2.0.26 > try (PDDocument pdfDocument = Loader.loadPDF(inputStream, > memoryUsageSetting)) { // 3.0.0-RC1 > int nbPages = addWatermark(watermarkText, pdfDocument); > pdfDocument.save(os); > } > ... > private int addWatermark(String watermarkText, PDDocument document) throws > IOException { > int numberOfPages = document.getNumberOfPages(); > System.out.printf("Start adding watermark on a %d pages PDF > document%n", numberOfPages); > long start = System.nanoTime(); > int pageIndex = 0; > for(PDPage page : document.getPages()) { > ++pageIndex; > try (PDPageContentStream cs = new PDPageContentStream(document, > page, PDPageContentStream.AppendMode.APPEND, true, true)) { > float width = page.getMediaBox().getWidth(); > float height = page.getMediaBox().getHeight(); > int rotation = page.getRotation(); > switch(rotation) { > case 90: > width = page.getMediaBox().getHeight(); > height = page.getMediaBox().getWidth(); > > cs.transform(Matrix.getRotateInstance(Math.toRadians(90), height, 0)); > break; > case 180: > > cs.transform(Matrix.getRotateInstance(Math.toRadians(180), width, height)); > break; > case 270: > width = page.getMediaBox().getHeight(); > height = page.getMediaBox().getWidth(); > > cs.transform(Matrix.getRotateInstance(Math.toRadians(270), 0, width)); > break; > default: > break; > } > double stringWidth = > (double)PDF_FONT.getStringWidth(watermarkText) / 1000 * FONT_HEIGHT; > double diagonalLength = Math.sqrt((double)width * width + > (double)height * height); > double angle = Math.atan2(height, width); > cs.transform(Matrix.getRotateInstance(angle, 0, 0)); > cs.setFont(PDF_FONT, (float)FONT_HEIGHT); > //cs.setRenderingMode(RenderingMode.STROKE); // for "hollow" > effect > PDExtendedGraphicsState gs = new PDExtendedGraphicsState(); > gs.setNonStrokingAlphaConstant(0.2f); > gs.setStrokingAlphaConstant(0.2f); > gs.setBlendMode(BlendMode.MULTIPLY); > cs.setGraphicsStateParameters(gs); > // some API weirdness here. When int, range is 0..255. > // when float, this would be 0..1f > cs.setNonStrokingColor(0f, 0, 0); > cs.setStrokingColor(0f, 0, 0); // black > float x = (float)((diagonalLength - stringWidth) / 2); // > "horizontal" position in rotated world > float y = (float)(-FONT_HEIGHT / 4); // 4 is a trial-and-error > thing, this lowers the text a bit > cs.beginText(); > cs.newLineAtOffset(x, y); > cs.showText(watermarkText); > cs.endText(); > } finally { > ... > } > return numberOfPages; > } > {code} -- This message was sent
[jira] [Comment Edited] (PDFBOX-5462) OutOfMemoryError when watermaking in 3.0.0-RC1
[ https://issues.apache.org/jira/browse/PDFBOX-5462?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17555931#comment-17555931 ] Marian Ion edited comment on PDFBOX-5462 at 6/18/22 3:49 PM: - {quote} You could save memory by creating PDExtendedGraphicsState and the font outside of the loop {quote} No, because pages may have different sizes, I need to compute for each one the watermark text position accordingly. And, as you said, this does not explain why *2.0.26* works! was (Author: JIRAUSER291146): {quote} You could save memory by creating PDExtendedGraphicsState and the font outside of the loop {quote} No, because pages may have different sizes, I need to compute for each one the watermark text position. And, as you said, this does not explain why *2.0.26* works! > OutOfMemoryError when watermaking in 3.0.0-RC1 > -- > > Key: PDFBOX-5462 > URL: https://issues.apache.org/jira/browse/PDFBOX-5462 > Project: PDFBox > Issue Type: Bug >Affects Versions: 3.0.0 PDFBox >Reporter: Marian Ion >Priority: Major > > I am using the Maven *3.0.0-RC1* version and I encounter the following error > when watermarking a 5120 pages file: > {quote} java.lang.OutOfMemoryError: Java heap space: failed reallocation of > scalar replaced objects > {quote} > > However, the *2.0.26* version code works without problem! > The code is basically this : > {code:java} > private static final PDFont PDF_FONT = PDType1Font.HELVETICA; > memoryUsageSetting = MemoryUsageSetting.setupMixed(2 * ONE_GIGA, 40 * > ONE_GIGA); > //try (PDDocument pdfDocument = PDDocument.load(is, memoryUsageSetting)) { > // 2.0.26 > try (PDDocument pdfDocument = Loader.loadPDF(inputStream, > memoryUsageSetting)) { // 3.0.0-RC1 > int nbPages = addWatermark(watermarkText, pdfDocument); > pdfDocument.save(os); > } > ... > private int addWatermark(String watermarkText, PDDocument document) throws > IOException { > int numberOfPages = document.getNumberOfPages(); > System.out.printf("Start adding watermark on a %d pages PDF > document%n", numberOfPages); > long start = System.nanoTime(); > int pageIndex = 0; > for(PDPage page : document.getPages()) { > ++pageIndex; > try (PDPageContentStream cs = new PDPageContentStream(document, > page, PDPageContentStream.AppendMode.APPEND, true, true)) { > float width = page.getMediaBox().getWidth(); > float height = page.getMediaBox().getHeight(); > int rotation = page.getRotation(); > switch(rotation) { > case 90: > width = page.getMediaBox().getHeight(); > height = page.getMediaBox().getWidth(); > > cs.transform(Matrix.getRotateInstance(Math.toRadians(90), height, 0)); > break; > case 180: > > cs.transform(Matrix.getRotateInstance(Math.toRadians(180), width, height)); > break; > case 270: > width = page.getMediaBox().getHeight(); > height = page.getMediaBox().getWidth(); > > cs.transform(Matrix.getRotateInstance(Math.toRadians(270), 0, width)); > break; > default: > break; > } > double stringWidth = > (double)PDF_FONT.getStringWidth(watermarkText) / 1000 * FONT_HEIGHT; > double diagonalLength = Math.sqrt((double)width * width + > (double)height * height); > double angle = Math.atan2(height, width); > cs.transform(Matrix.getRotateInstance(angle, 0, 0)); > cs.setFont(PDF_FONT, (float)FONT_HEIGHT); > //cs.setRenderingMode(RenderingMode.STROKE); // for "hollow" > effect > PDExtendedGraphicsState gs = new PDExtendedGraphicsState(); > gs.setNonStrokingAlphaConstant(0.2f); > gs.setStrokingAlphaConstant(0.2f); > gs.setBlendMode(BlendMode.MULTIPLY); > cs.setGraphicsStateParameters(gs); > // some API weirdness here. When int, range is 0..255. > // when float, this would be 0..1f > cs.setNonStrokingColor(0f, 0, 0); > cs.setStrokingColor(0f, 0, 0); // black > float x = (float)((diagonalLength - stringWidth) / 2); // > "horizontal" position in rotated world > float y =
[jira] [Commented] (PDFBOX-5462) OutOfMemoryError when watermaking in 3.0.0-RC1
[ https://issues.apache.org/jira/browse/PDFBOX-5462?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17555927#comment-17555927 ] Marian Ion commented on PDFBOX-5462: The problems are (IMHO) # the code works with 2.0.26, I was expecting to work with 3.x, # the PDF has ~1,5G, I don't think loading it in memory is a better solution (what about a 10G PDF then?) I forget to tell you that I am on Linux (Ubuntu 20.04, amd64) and both Java 11 and Java 17 exhibit the same behaviour: {quote} Exception in thread "main" java.lang.OutOfMemoryError: Java heap space: failed reallocation of scalar replaced objects {quote} I can eventually supply the code I use in order to reproduce the issue by yourselves. > OutOfMemoryError when watermaking in 3.0.0-RC1 > -- > > Key: PDFBOX-5462 > URL: https://issues.apache.org/jira/browse/PDFBOX-5462 > Project: PDFBox > Issue Type: Bug >Affects Versions: 3.0.0 PDFBox >Reporter: Marian Ion >Priority: Major > > I am using the Maven *3.0.0-RC1* version and I encounter the following error > when watermarking a 5120 pages file: > {quote} java.lang.OutOfMemoryError: Java heap space: failed reallocation of > scalar replaced objects > {quote} > > However, the *2.0.26* version code works without problem! > The code is basically this : > {code:java} > private static final PDFont PDF_FONT = PDType1Font.HELVETICA; > memoryUsageSetting = MemoryUsageSetting.setupMixed(2 * ONE_GIGA, 40 * > ONE_GIGA); > //try (PDDocument pdfDocument = PDDocument.load(is, memoryUsageSetting)) { > // 2.0.26 > try (PDDocument pdfDocument = Loader.loadPDF(inputStream, > memoryUsageSetting)) { // 3.0.0-RC1 > int nbPages = addWatermark(watermarkText, pdfDocument); > pdfDocument.save(os); > } > ... > private int addWatermark(String watermarkText, PDDocument document) throws > IOException { > int numberOfPages = document.getNumberOfPages(); > System.out.printf("Start adding watermark on a %d pages PDF > document%n", numberOfPages); > long start = System.nanoTime(); > int pageIndex = 0; > for(PDPage page : document.getPages()) { > ++pageIndex; > try (PDPageContentStream cs = new PDPageContentStream(document, > page, PDPageContentStream.AppendMode.APPEND, true, true)) { > float width = page.getMediaBox().getWidth(); > float height = page.getMediaBox().getHeight(); > int rotation = page.getRotation(); > switch(rotation) { > case 90: > width = page.getMediaBox().getHeight(); > height = page.getMediaBox().getWidth(); > > cs.transform(Matrix.getRotateInstance(Math.toRadians(90), height, 0)); > break; > case 180: > > cs.transform(Matrix.getRotateInstance(Math.toRadians(180), width, height)); > break; > case 270: > width = page.getMediaBox().getHeight(); > height = page.getMediaBox().getWidth(); > > cs.transform(Matrix.getRotateInstance(Math.toRadians(270), 0, width)); > break; > default: > break; > } > double stringWidth = > (double)PDF_FONT.getStringWidth(watermarkText) / 1000 * FONT_HEIGHT; > double diagonalLength = Math.sqrt((double)width * width + > (double)height * height); > double angle = Math.atan2(height, width); > cs.transform(Matrix.getRotateInstance(angle, 0, 0)); > cs.setFont(PDF_FONT, (float)FONT_HEIGHT); > //cs.setRenderingMode(RenderingMode.STROKE); // for "hollow" > effect > PDExtendedGraphicsState gs = new PDExtendedGraphicsState(); > gs.setNonStrokingAlphaConstant(0.2f); > gs.setStrokingAlphaConstant(0.2f); > gs.setBlendMode(BlendMode.MULTIPLY); > cs.setGraphicsStateParameters(gs); > // some API weirdness here. When int, range is 0..255. > // when float, this would be 0..1f > cs.setNonStrokingColor(0f, 0, 0); > cs.setStrokingColor(0f, 0, 0); // black > float x = (float)((diagonalLength - stringWidth) / 2); // > "horizontal" position in rotated world > float y = (float)(-FONT_HEIGHT / 4); // 4 is a trial-and-error > thing, this lowers the text a bit >
Re: New PDFBox 3.0.0 release
Am 14.06.22 um 10:20 schrieb Emmeran Seehuber: Hi Andreas, Am 14.06.2022 um 08:19 schrieb Andreas Lehmkuehler : Hi, looks like it is time for another 3.0.0 release of PDFBox. Depending on the outcome of the next regression test I'd like to cut the next 3.0.0 release. Should we target another alpha or maybe the first beta? Or are is it time for a stable 3.0.0 PDFBox release already? No, I would suggest at least releasing a beta first. The beta should already have some kind of API stability guarantee. I'm ok with that. I would then port my commercial projects to this beta, and see what breaks. That will hopefully give us some valuable feedback, thanks in advance Andreas Best regards Emmeran WDYT? Do you have some TODOs on your lists which have to be solved first? I'm going to resolve my remaining 3.0.0 tickets soon Andreas - To unsubscribe, e-mail: dev-unsubscr...@pdfbox.apache.org For additional commands, e-mail: dev-h...@pdfbox.apache.org Mit freundlichen Grüßen aus Augsburg Emmeran Seehuber Dipl. Inf. (FH) Schrannenstraße 8 86150 Augsburg USt-IdNr.: DE266070804 - To unsubscribe, e-mail: dev-unsubscr...@pdfbox.apache.org For additional commands, e-mail: dev-h...@pdfbox.apache.org - To unsubscribe, e-mail: dev-unsubscr...@pdfbox.apache.org For additional commands, e-mail: dev-h...@pdfbox.apache.org
[jira] [Commented] (PDFBOX-5462) OutOfMemoryError when watermaking in 3.0.0-RC1
[ https://issues.apache.org/jira/browse/PDFBOX-5462?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17555858#comment-17555858 ] Andreas Lehmkühler commented on PDFBOX-5462: To use an InputStream is the least efficient possibility to load a PDF as the whole file is loaded to the memory. Try to use a File as input instead. But I'm afraid that isn't the root cause for this issue, we need to investigate further > OutOfMemoryError when watermaking in 3.0.0-RC1 > -- > > Key: PDFBOX-5462 > URL: https://issues.apache.org/jira/browse/PDFBOX-5462 > Project: PDFBox > Issue Type: Bug >Affects Versions: 3.0.0 PDFBox >Reporter: Marian Ion >Priority: Major > > I am using the Maven *3.0.0-RC1* version and I encounter the following error > when watermarking a 5120 pages file: > {quote} java.lang.OutOfMemoryError: Java heap space: failed reallocation of > scalar replaced objects > {quote} > > However, the *2.0.26* version code works without problem! > The code is basically this : > {code:java} > private static final PDFont PDF_FONT = PDType1Font.HELVETICA; > memoryUsageSetting = MemoryUsageSetting.setupMixed(2 * ONE_GIGA, 40 * > ONE_GIGA); > //try (PDDocument pdfDocument = PDDocument.load(is, memoryUsageSetting)) { > // 2.0.26 > try (PDDocument pdfDocument = Loader.loadPDF(inputStream, > memoryUsageSetting)) { // 3.0.0-RC1 > int nbPages = addWatermark(watermarkText, pdfDocument); > pdfDocument.save(os); > } > ... > private int addWatermark(String watermarkText, PDDocument document) throws > IOException { > int numberOfPages = document.getNumberOfPages(); > System.out.printf("Start adding watermark on a %d pages PDF > document%n", numberOfPages); > long start = System.nanoTime(); > int pageIndex = 0; > for(PDPage page : document.getPages()) { > ++pageIndex; > try (PDPageContentStream cs = new PDPageContentStream(document, > page, PDPageContentStream.AppendMode.APPEND, true, true)) { > float width = page.getMediaBox().getWidth(); > float height = page.getMediaBox().getHeight(); > int rotation = page.getRotation(); > switch(rotation) { > case 90: > width = page.getMediaBox().getHeight(); > height = page.getMediaBox().getWidth(); > > cs.transform(Matrix.getRotateInstance(Math.toRadians(90), height, 0)); > break; > case 180: > > cs.transform(Matrix.getRotateInstance(Math.toRadians(180), width, height)); > break; > case 270: > width = page.getMediaBox().getHeight(); > height = page.getMediaBox().getWidth(); > > cs.transform(Matrix.getRotateInstance(Math.toRadians(270), 0, width)); > break; > default: > break; > } > double stringWidth = > (double)PDF_FONT.getStringWidth(watermarkText) / 1000 * FONT_HEIGHT; > double diagonalLength = Math.sqrt((double)width * width + > (double)height * height); > double angle = Math.atan2(height, width); > cs.transform(Matrix.getRotateInstance(angle, 0, 0)); > cs.setFont(PDF_FONT, (float)FONT_HEIGHT); > //cs.setRenderingMode(RenderingMode.STROKE); // for "hollow" > effect > PDExtendedGraphicsState gs = new PDExtendedGraphicsState(); > gs.setNonStrokingAlphaConstant(0.2f); > gs.setStrokingAlphaConstant(0.2f); > gs.setBlendMode(BlendMode.MULTIPLY); > cs.setGraphicsStateParameters(gs); > // some API weirdness here. When int, range is 0..255. > // when float, this would be 0..1f > cs.setNonStrokingColor(0f, 0, 0); > cs.setStrokingColor(0f, 0, 0); // black > float x = (float)((diagonalLength - stringWidth) / 2); // > "horizontal" position in rotated world > float y = (float)(-FONT_HEIGHT / 4); // 4 is a trial-and-error > thing, this lowers the text a bit > cs.beginText(); > cs.newLineAtOffset(x, y); > cs.showText(watermarkText); > cs.endText(); > } finally { > ... > } > return numberOfPages; > } > {code} -- This message was sent by Atlassian Jira
[jira] [Closed] (PDFBOX-5461) Fonts are not rendered in this document
[ https://issues.apache.org/jira/browse/PDFBOX-5461?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Daniel Migowski closed PDFBOX-5461. --- Fix Version/s: 2.0.23 Resolution: Not A Bug I am so sorry for the noise, there had been a file corruption during my tests and I didn't notice and still don't understand how it was possible. Thanks for taking the time looking into it, [~tilman], my next reports will be of higher quality. > Fonts are not rendered in this document > --- > > Key: PDFBOX-5461 > URL: https://issues.apache.org/jira/browse/PDFBOX-5461 > Project: PDFBox > Issue Type: Bug > Components: Rendering >Affects Versions: 2.0.23 > Environment: n/a >Reporter: Daniel Migowski >Priority: Major > Fix For: 2.0.23 > > Attachments: TK_invoice_160265.pdf, The_rendered_doc.png > > > This seems to be a tough one. The PDF can be rendered by Adobe Acrobat, but > Chrome and Firefox also fail to render it. So it seems like a corner case > where the document does not adhere to the specs but Adobe works around it > somehow. > I assume this would fail with the latest PDFBox also so I skipped updating 3 > minor versions before creating this ticket. -- This message was sent by Atlassian Jira (v8.20.7#820007) - To unsubscribe, e-mail: dev-unsubscr...@pdfbox.apache.org For additional commands, e-mail: dev-h...@pdfbox.apache.org