[jira] [Comment Edited] (PDFBOX-5462) OutOfMemoryError when watermaking in 3.0.0-RC1

2022-06-18 Thread Marian Ion (Jira)


[ 
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

2022-06-18 Thread Marian Ion (Jira)


[ 
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

2022-06-18 Thread Marian Ion (Jira)


[ 
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

2022-06-18 Thread Jira


[ 
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

2022-06-18 Thread Marian Ion (Jira)


 [ 
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

2022-06-18 Thread Marian Ion (Jira)


[ 
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

2022-06-18 Thread Marian Ion (Jira)


[ 
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

2022-06-18 Thread Marian Ion (Jira)


[ 
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

2022-06-18 Thread Marian Ion (Jira)


[ 
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

2022-06-18 Thread Maruan Sahyoun (Jira)


[ 
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

2022-06-18 Thread Marian Ion (Jira)


[ 
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

2022-06-18 Thread Marian Ion (Jira)


[ 
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

2022-06-18 Thread Marian Ion (Jira)


[ 
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

2022-06-18 Thread Marian Ion (Jira)


[ 
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

2022-06-18 Thread Marian Ion (Jira)


[ 
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

2022-06-18 Thread Marian Ion (Jira)


[ 
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

2022-06-18 Thread Marian Ion (Jira)


[ 
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

2022-06-18 Thread Marian Ion (Jira)


[ 
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

2022-06-18 Thread Maruan Sahyoun (Jira)


[ 
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

2022-06-18 Thread Marian Ion (Jira)


[ 
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

2022-06-18 Thread Marian Ion (Jira)


[ 
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

2022-06-18 Thread Marian Ion (Jira)


[ 
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

2022-06-18 Thread Marian Ion (Jira)


[ 
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

2022-06-18 Thread Marian Ion (Jira)


[ 
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

2022-06-18 Thread Marian Ion (Jira)


[ 
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

2022-06-18 Thread Andreas Lehmkuehler

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

2022-06-18 Thread Jira


[ 
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

2022-06-18 Thread Daniel Migowski (Jira)


 [ 
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