【问题标题】:Add existing PDF document to opened document将现有 PDF 文档添加到打开的文档
【发布时间】:2015-06-23 10:12:18
【问题描述】:

使用 iText 5.5.5。 我通过PdfWriter 实例打开了com.itextpdf.text.Document。在构建文档的各个阶段,我需要添加静态 PDF 页面。静态页面以byte[] 的形式出现。

在关注itextpdf.com 上的各种示例后,我无法将他们的示例与我的用例联系起来。代码如下:

Document trunk = new Document();
PdfWriter writer = PdfWriter.getInstance(trunk, getTrunkStream());
writer.setPageEvent(geTrunkPageEvent());
trunk.open();

....

PdfReader reader = new PdfReader(bytes);
// graft == my static content
Document graft = new Document(reader.getPageSizeWithRotation(1));
PdfCopy copy = new PdfCopy(graft, getTrunkStream());
graft.open();

int count = reader.getNumberOfPages();
for(int page = 0; page < count;) {
    copy.addPage(copy.getImportedPage(reader, ++page));
}

copy.freeReader(reader);
reader.close();

代码编译并运行无错误。但是移植页面无法与主干页面一起出现。

【问题讨论】:

  • 您下载免费电子书The best iText Questions on StackOverflow了吗?它包含这个问题的答案Creating a PDF image in iText。在您的代码中,您使用了两次getTrunkStream():一次使用PdfWriter 从头创建文档,一次使用PdfCopy 合并现有文档。这违背了所有的逻辑。你没看chapter 6 of my book吗?
  • 为什么光顾这个问题?
  • 因为我是 iText 的赞助人。你飞过硅谷吗?然后你就会知道 SFO 机场位于一个叫 San Bruno 的地方:D
  • 我明天要飞往圣何塞参加 PDF 的 ISO 会议。飞行前我总是很紧张。当我降落在以圣布鲁诺命名的城市时,我会很高兴。
  • 尤其是当你飞那么远的时候。神速。

标签: java pdf itext


【解决方案1】:

阅读这个问题的答案 Read BLOB (PDF Content) from database and edit and output PDF , 更详细的描述

使用PdfContentByte保存要添加的PDF内容

 PdfContentByte cb = writer.getDirectContent(); 

使用getImportedPage()为要从另一个文档导入的每个页面创建一个PdfImportedPage页面对象,并使用addTemplate()将页面使用添加到writer

trunk.newPage();
page = writer.getImportedPage(pdfReader, pagenumber);
cb.addTemplate(page, 0, 0);

确保关闭documentpdfReader

注意:如果您只想合并一堆文件,请不要使用此代码 sn-p。您不应该这样做的原因在问题How to merge documents correctly?的答案中进行了解释@

【讨论】:

  • 我已更新您的答案,因为它很容易被误解为合并文档的一种方式。导入页面时,重要的是要了解问题How to merge documents correctly? 的答案中解释的注意事项,该问题被选为The Best iText Questions on StackOverflow 之一。有了这些变化,答案值得一票;-)
  • @BrunoLowagie,我从来没有遇到过页面方向不同的情况,因此不知道这个问题。正确指出答案的投票超过了应得的!
  • 这个解决方案对我有用。尽管我必须确定并关闭我的主干的页面事件并在重新打开它之前调用一个新页面,因为我想准确地保留检索到的内容。谢谢大家。
猜你喜欢
  • 1970-01-01
  • 2015-12-21
  • 2021-09-13
  • 1970-01-01
  • 2017-11-25
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 2011-07-16
相关资源
最近更新 更多