假设我有两个用Adobe Acrobat创建的PDF模板,这两个模板都是单页的8.5x11文档。第一个模板(A.pdf)包含页面上半部分的内容。第二个模板(B.pdf)包含页面下半部分的内容。(碰巧两个模板中的内容不会相互“重叠”。)
我想使用iText来使用这两个模板,并从它创建一个单独的、“合并”的模板(C.pdf),它只是一个页面(上半部分是a.pdf的内容,下半部分是b.pdf的内容)。
(我不想将这两个文件“合并”成一个两页的文档。我需要的最终产品是一个单一的页面。)
我将在servlet环境(Tomcat6)中运行iText,但我不认为这对答案有什么影响。
这个是可能的吗?
发布于 2010-08-10 07:26:18
我在iText mailing list上得到了Mark Storer的帮助。解决方案是为每个文件获取PdfTemplate对象,然后使用addTemplate()方法将它们添加到一起,例如:
PdfTemplate topOfPage = writer.getImportedPage( reader, 1 );
PdfTemplate bottomOfPage = writer.getImportedPage( reader, 2 );
PdfContentByte content = writer.getDirectContent();
// in PDF, "0, 0" is the lower left corner.
content.addTemplate( bottomOfPage );
content.addTemplate( topOfPage, 0, bottomOfPage.getHeight() );发布于 2010-05-07 05:21:43
也许这个代码示例可以帮助http://kickjava.com/src/com/lowagie/tools/handout_pdf.java.htm
发布于 2016-03-28 02:09:20
更常用的情况是合并单页背景pdf和多页源pdf文件。背景pdf仅包含例如页眉和页脚。源pdf已经准备了上边距和下边距作为此场景中背景pdf模板的页眉和页脚的占位符。如果你正在寻找这个-就像我一样-你会在这里遇到这个帖子,你可以应用以下方法:
tplFile$ = "c:/0/background.pdf"
srcFile$ = "c:/0/source1.pdf"
destFile$ = "c:/0/newMergedDest.pdf"
declare Document destDoc!
declare PdfWriter destWriter!
declare PdfReader mainDocReader!
declare PdfReader singlePageBackgroundReader!
declare PdfImportedPage mainDocPage!
declare PdfImportedPage backgroundPage!
declare PdfContentByte dcb!
declare PdfContentByte ucb!
destDoc! = new Document()
destWriter! = PdfWriter.getInstance(destDoc!, new FileOutputStream(destFile$))
destDoc!.open()
dcb! = destWriter!.getDirectContent()
ucb! = destWriter!.getDirectContentUnder()
mainDocReader! = new PdfReader(srcFile$)
singlePageBackgroundReader! = new PdfReader(tplFile$)
backgroundPage! = destWriter!.getImportedPage(singlePageBackgroundReader!,1)
for i=1 to mainDocReader!.getNumberOfPages()
destDoc!.newPage()
mainDocPage! = destWriter!.getImportedPage(mainDocReader!,i)
dcb!.addTemplate(mainDocPage!,0,0)
ucb!.addTemplate(backgroundPage!,0,0)
next i
destDoc!.close()https://stackoverflow.com/questions/2777415
复制相似问题