简体   繁体   English

如何合并具有相同图层名称的多个 PDF 并为 output 获取更短的图层列表

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

I'm using iText to merge several PDFs with layer.我正在使用 iText 将多个 PDF 与图层合并。 Each pdf file contains two layers: 'Cut' and 'Crease'.每个 pdf 文件包含两层:“剪切”和“折痕”。

Code:代码:

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());

            }
        }
    }
}

The target pdf contains the correct content.目标 pdf 包含正确的内容。 However, the layer list contains many layers with similar names.但是,图层列表包含许多具有相似名称的图层。

合并的 PDF 文件图层

Can I change some code so that the merged file only contains two layers: 'Cut' and 'Crease'?我可以更改一些代码以使合并的文件仅包含两层:“剪切”和“折痕”吗?

With the following code, I can remove the layer name postfix.使用以下代码,我可以删除图层名称后缀。

        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+$", ""));
        }

在此处输入图像描述

But still not clear how to reuse the layer name from the first input pdf file.但仍不清楚如何重用第一个输入 pdf 文件中的图层名称。

You can set the smart mode on the PdfWriter to enable the reuse of resources (see https://api.itextpdf.com/iText7/java/7.1.14/com/itextpdf/kernel/pdf/PdfWriter.html#setSmartMode-boolean- )您可以在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