【问题标题】:How can i add a PDF to another in iTextSharp?如何在 iTextSharp 中将 PDF 添加到另一个 PDF?
【发布时间】:2012-10-05 14:39:55
【问题描述】:

我到处寻找这个,但找不到有效的答案。我有 2 个输入 PDF(只有 2 个)。

我想将 PDF2 添加到 PDF1(新页面)的底部,然后将两者都输出为 PDF3。

如果您在 vb.net 中提交任何代码,任何人都可以提供帮助。

【问题讨论】:

    标签: asp.net vb.net pdf itextsharp


    【解决方案1】:

    我建议使用 PdfWriter.GetImportedPage...

    例如:

    '' Create your blank PDF
    Dim pdfDoc As Document = New Document(New Rectangle(0, 0, width, height))
    Dim pdfWriter As PdfWriter = pdfWriter.GetInstance(pdfDoc, New FileStream("yourPDF.pdf", FileMode.OpenOrCreate))
    pdfDoc.Open()
    
    '' Create a reader to read in your PDF 2
    Dim bgReader As PdfReader = New PdfReader("pdf2.pdf"))
    Dim bg As PdfImportedPage = pdfWriter.GetImportedPage(bgReader, 1)
    
    
    '' add the template beneath content
    pdfWriter.DirectContentUnder.AddTemplate(bg, 0, 0)
    
    '' now do the same for PDF1
    bgReader = new PdfReader("pdf1.pdf")
    bg = pdfWriter.GetImportedPage(bgReader,1)
    pdfWriter.DirectContentUnder.AddTemplate(bg,0,0)
    
    '' don't forget to close the doc which will save it
    pdfDoc.Close()
    

    这是几种方法之一。尚未测试代码,但应该不会太远:)

    编辑:

    请看,据我所知,您实际上无法更改 PDF1。您必须创建由 PDF1 和 PDF2 组成的 PDF3。因此,这就是我们实际在做的事情。

    您可以做的另一件事是加载构成主要文档基础的文档,然后创建一个您将写入的 PdfStamper。所以假设 PDF1 是你的主要。

    Dim reader as PdfReader = New PdfReader("pathToPDF1")
    Dim stamper as new PdfStamper(reader, New FileStream("PathToSaveYourNewPdfTo.pdf"), IO.FileMode.Create)
    

    现在,读入内容 PDF2

    Dim bgReader As PdfReader = New PdfReader("pdf2.pdf"))
    Dim bg As PdfImportedPage = pdfWriter.GetImportedPage(bgReader, 1)
    

    如果您想在模板下添加此内容,请调用 GetUnderContent。您可以通过在我的代码示例中提供 X 和 Y 坐标“0,0”来定位您想要的位置。记住坐标来自 PDF 的左下角。

    '' add the template beneath content, 1 indicates pagenumber of the doc you loaded in
    stamper.GetUnderContent(1).AddTemplate(bg, 0, 0)
    

    如果要添加到模板的顶部,则调用 GetOverContent 并可以使用相同的定位属性

    stamper.GetOverContent(1).AddTemplate(bg, 0, 0)
    

    不确定我是否在您的 cmets 中遗漏了其他内容...?...

    【讨论】:

    • 您好,谢谢,它可以工作,但它只是将新文档添加到当前文档的顶部,因此它实际上与第一个文档重叠,我遇到的问题是让新页面应用第一个,你知道怎么做吗?
    • 好吧,提到的文档似乎已损坏,这解释了该问题。现在的问题是,即使在交换它们之后,我似乎也只能在第一个pdf之上添加新的pdf:-S
    • 谢谢你,如果它来自左下角,如果我将它保留为 0,0,它会附加第一个吗?查看我目前的输出(pdf3)运行正常,但两个输入 pdf 只是错误的方式,所以我需要的底部是顶部,这是唯一的问题。
    • 如果没有实际编码您的整个需求,我不确定还有什么建议。代码示例有效,因为您需要将 PDF 合并为一个 PDF。这些 PDF 的放置是使用坐标完成的,我建议使用它们来找出最佳位置。
    【解决方案2】:

    您可以使用 "ITextSharp" 合并 Pds...这是我在最近的项目中尝试过的一个很好的例子...您可以从中获得好主意...

    Pdf Merge Issue in ItextSharp (After Merging Pdfs don't retain their Values)

    【讨论】:

      猜你喜欢
      • 2011-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多