[英]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.
但是,图层列表包含许多具有相似名称的图层。
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.