You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PDFBox实现仅指定页面叠加PDF模板的问题求助

问题原因

你调用了setAllPagesOverlayPDF(overlayDoc),这个方法会给所有未在映射表中指定的页面设置默认叠加模板,所以第3、4页也被应用了template.pdf。

解决方案

移除setAllPagesOverlayPDF调用,只保留映射表中第1、2页的叠加规则,这样未指定的页面会保持原内容不变。同时可以优化代码,直接使用已加载的PDDocument对象而非重复读取文件路径:

void overlayPDF(){
    try {
        PDDocument overlayDoc = PDDocument.load(new File("D:\\template.pdf"));    
        Overlay overlayObj = new Overlay();    
        PDDocument originalDoc = PDDocument.load(new File("D:\\Sample.pdf"));
        
        overlayObj.setOverlayPosition(Overlay.Position.BACKGROUND);
        overlayObj.setInputPDF(originalDoc);
        
        // 使用已加载的PDDocument对象构建映射表,避免重复读取文件
        Map<Integer, PDDocument> ovmap = new HashMap<>();            
        ovmap.put(1, overlayDoc);
        ovmap.put(2, overlayDoc);

        overlayObj.overlay(ovmap);
                    
        originalDoc.save("D:\\Sample.pdf");        
        overlayDoc.close();
        originalDoc.close();            
    } catch(Exception e) {
        e.printStackTrace();
    }
}
Overlay方法工作机制说明
  • 当调用overlay(Map)时,映射表中的键是原PDF的页码(1-based),值是要叠加的PDF文档或文件路径。
  • 只有映射表中明确指定的页码会被叠加对应的模板。
  • 如果调用了setAllPagesOverlayPDF,所有未在映射表中的页码会自动使用这个默认模板;如果不调用该方法,未指定的页码将保留原内容。

内容的提问来源于stack exchange,提问作者Janvi Kadu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 06:05:26