1

Using iText7, I'm trying to merge various PDF documents into one single PDF but every printable layer present in the documents ends up being permanently visible.

Is it possible to copy or merge these documents while maintaining the layer properties? It seems as if iText triggers the printable flag, not unlike any "print to PDF" option in any document visualizer.

The first document always has a layer on each page marked as printable that was generated with:

PdfCanvas canvas = new PdfCanvas(page);
PdfLayer printLayer = new PdfLayer("print", pdfDocument);
Canvas canvasModel = new Canvas(canvas, pdfDocument, page.getPageSize());

layerImprimir.setOn(false);
layerImprimir.setOnPanel(false);
layerImprimir.setPrint("Print", true);

canvas.beginLayer(printLayer);
Paragraph paragraph = new Paragraph().setWidth(lineHeight).add(someText);
canvasModel.showTextAligned(paragraph, xPos, yPos, pageNumber, TextAlignment.CENTER, VerticalAlignment.MIDDLE, radAngle);
canvas.endLayer();
canvasModel.close();

Afterwards, that first document is merged with other PDFs that may or may not contain printable layers. I've used both PdfCopy and PdfMerger.

With PdfCopy:

Document finalDocument = new Document();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfCopy copy = new PdfCopy(finalDocument, baos);
PdfReader reader;

finalDocument.open();

reader = new PdfReader(firstDocument);
copy.addDocument(reader);
reader.close();

reader = new PdfReader(secondDocument);
copy.addDocument(reader);
reader.close();

finalDocument.close();

With PdfMerger (from https://stackoverflow.com/a/40594055/13114951):

PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
PdfMerger merger = new PdfMerger(pdf);

//Add pages from the first document
PdfDocument firstSourcePdf = new PdfDocument(new PdfReader(SRC1));
merger.merge(firstSourcePdf, 1, firstSourcePdf.getNumberOfPages());

//Add pages from the second pdf document
PdfDocument secondSourcePdf = new PdfDocument(new PdfReader(SRC2));
merger.merge(secondSourcePdf, 1, secondSourcePdf.getNumberOfPages());

firstSourcePdf.close();
secondSourcePdf.close();
pdf.close();
SebLavK
  • 13
  • 2

0 Answers0