@@ -44,6 +44,8 @@ This file is part of the iText (R) project.
4444
4545import com .itextpdf .io .image .ImageDataFactory ;
4646import com .itextpdf .io .source .DeflaterOutputStream ;
47+ import com .itextpdf .kernel .font .PdfFontFactory ;
48+ import com .itextpdf .kernel .pdf .canvas .PdfCanvas ;
4749import com .itextpdf .kernel .pdf .navigation .PdfDestination ;
4850import com .itextpdf .kernel .utils .CompareTool ;
4951import com .itextpdf .test .ExtendedITextTest ;
@@ -55,6 +57,7 @@ This file is part of the iText (R) project.
5557
5658import java .io .ByteArrayOutputStream ;
5759import java .io .IOException ;
60+ import java .nio .charset .StandardCharsets ;
5861
5962import static org .junit .Assert .*;
6063
@@ -303,6 +306,31 @@ public void testFreeReference() throws IOException, InterruptedException {
303306 assertNull (new CompareTool ().compareByContent (destinationFolder + "freeReference.pdf" , sourceFolder + "cmp_freeReference.pdf" , destinationFolder , "diff_" ));
304307 }
305308
309+ @ Test
310+ public void fullCompressionAppendMode () throws IOException , InterruptedException {
311+ PdfWriter writer = new PdfWriter (destinationFolder + "fullCompressionAppendMode.pdf" ,
312+ new WriterProperties ()
313+ .setFullCompressionMode (true )
314+ .setCompressionLevel (CompressionConstants .NO_COMPRESSION ));
315+ PdfDocument pdfDocument = new PdfDocument (new PdfReader (sourceFolder + "fullCompressionDoc.pdf" ), writer ,
316+ new StampingProperties ().useAppendMode ());
317+
318+ PdfPage page = pdfDocument .getPage (1 );
319+ PdfStream contentStream = new PdfStream ();
320+ String contentStr = new String (pdfDocument .getPage (1 ).getFirstContentStream ().getBytes (), StandardCharsets .US_ASCII );
321+ contentStream .setData (contentStr .replace ("/F1 16" , "/F1 24" ).getBytes (StandardCharsets .US_ASCII ));
322+ page .getPdfObject ().put (PdfName .Contents , contentStream );
323+ page .setModified ();
324+
325+ pdfDocument .close ();
326+
327+ assertNull (new CompareTool ().compareByContent (destinationFolder + "fullCompressionAppendMode.pdf" , sourceFolder + "cmp_fullCompressionAppendMode.pdf" , destinationFolder , "diff_" ));
328+
329+ PdfDocument assertDoc = new PdfDocument (new PdfReader (destinationFolder + "fullCompressionAppendMode.pdf" ));
330+ Assert .assertTrue (assertDoc .getPdfObject (9 ).isStream ());
331+ Assert .assertEquals (1 , ((PdfDictionary )assertDoc .getPdfObject (9 )).getAsNumber (PdfName .N ).intValue ());
332+ }
333+
306334 @ Test
307335 public void checkAndResolveCircularReferences () throws IOException , InterruptedException {
308336 PdfDocument pdfDocument = new PdfDocument (new PdfReader (sourceFolder + "datasheet.pdf" ), new PdfWriter (destinationFolder + "datasheet_mode.pdf" ));
0 commit comments