2012-10-05 47 views
1

我已到处寻找这个,但无法找到有效的答案。我有2个输入PDF(只有2)。如何在iTextSharp中添加PDF到另一个PDF?

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

任何人都可以提供帮助,如果你提交任何代码,如果它在vb.net将是伟大的。

回答

2

我会建议使用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) 

,如果你想添加这个模板下,然后调用GetUnderContent阅读内容PDF2

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

。在我的代码示例中,可以通过提供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) 

不知道我缺少在您的意见别的东西..? ...

+0

你好,谢谢你,它的作品,但它只是增加了新的文件到当前的顶部,所以它实际上重叠的第一个文件,我遇到的问题是获取新的页面,apped第一个,你知道如何做到这一点? – connersz

+0

好吧,提到的文件似乎是腐败的,并解释了这个问题。现在的问题是,我似乎只是添加了第一个以上的新PDF,即使交换后它们:-S – connersz

+0

好吧,我将编辑这个答案,其中有一些不同的代码... – Darren

相关问题