簡體   English   中英

如何合並具有相同圖層名稱的多個 PDF 並為 output 獲取更短的圖層列表

[英]How to merge multiple PDFs with same layer names and get a shorter layer list for the output

我正在使用 iText 將多個 PDF 與圖層合並。 每個 pdf 文件包含兩層:“剪切”和“折痕”。

代碼:

public void testMergePdfMerger() throws Exception {

    String[] srcPdfs = new String[]{
            resourceFile("pdf/4901.pdf"),
            resourceFile("pdf/4902.pdf"),
            // more files here...

    };

    String destPdf = targetFile("MergerSimple.pdf");

    try (PdfDocument tgt = new PdfDocument(new PdfWriter(destPdf))) {
        PdfMerger merger = new PdfMerger(tgt);
        for (String srcPdf : srcPdfs) {
            try (PdfDocument src = new PdfDocument(new PdfReader(srcPdf))) {
                merger.merge(src, 1, src.getNumberOfPages());

            }
        }
    }
}

目標 pdf 包含正確的內容。 但是,圖層列表包含許多具有相似名稱的圖層。

合並的 PDF 文件圖層

我可以更改一些代碼以使合並的文件僅包含兩層:“剪切”和“折痕”嗎?

使用以下代碼,我可以刪除圖層名稱后綴。

        List<PdfLayer> layers = tgt.getCatalog().getOCProperties(false).getLayers();
        for(PdfLayer layer: layers) {
            String currentLayerName = layer.getPdfObject().get(PdfName.Name).toString();
            layer.setName(currentLayerName.replaceAll("_\\d+$", ""));
        }

在此處輸入圖像描述

但仍不清楚如何重用第一個輸入 pdf 文件中的圖層名稱。

您可以在PdfWriter上設置smart mode以啟用資源重用(參見https://api.itextpdf.com/iText7/java/7.1.14/com/itextpdf/kernel/pdf/PdfWriter.html#setSmartMode-boolean - )

try (PdfDocument tgt = new PdfDocument(new PdfWriter(destPdf).setSmartMode(true))) {
    [...]
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM