代码之家  ›  专栏  ›  技术社区  ›  Shaggy Frog

在iText中合并两个模板

  •  1
  • Shaggy Frog  · 技术社区  · 16 年前

    我想使用iText来获取这两个模板,并从中创建一个单一的“合并”模板(C.pdf),它只是一个页面(a.pdf的内容在上半部分,B.pdf的内容在下半部分)。

    我将在servlet环境(tomcat6)中运行iText,但我不认为这对答案有什么影响。

    3 回复  |  直到 16 年前
        1
  •  4
  •   Shaggy Frog    16 年前

    我得到了马克·斯托尔的帮助 iText mailing list . 解决办法是 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() );
    
        2
  •  1
  •   leonbloy    16 年前
        3
  •  0
  •   Vanden    10 年前

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