在特定页面或位置ASP.NET合并PDF文件

时间:2014-02-25 15:51:25

标签: asp.net pdf merge

我们有ASP.NET应用程序,其中,我正在尝试合并两个PDF文件,我们目前正在使用BCL easyPDF7库。我试图在特定位置或页面合并新文件(例如在主文档中的第3页之后)但是我发现在这个库中的Merge只是将文件附加到最后。

我们决定使用新工具PDF4NET,我从PDF4NET的示例代码中观察到它们还提供了最终附加文档的合并功能。

我们有什么方法可以做到这一点? (通过PDF4NET或BCL easyPDF7)请分享您的观点。

2 个答案:

答案 0 :(得分:0)

我之前使用过iTextSharp,基本上创建了一个新的输出pdf,然后读入新文档并循环遍历将页面添加到新输出文档的页面。这甚至可以维护每个页面的页面大小和方向信息。

以下是将pdf添加到输出的代码:

    int pc = pdfReader.NumberOfPages;
    int p, rotation;
    Rectangle box;
    PdfImportedPage page;

    for (p = 0; p < pc; p++) {
        pageNo++;

        page = pdfWriter.GetImportedPage(pdfReader, p + 1);
        rotation = pdfReader.GetPageRotation(p + 1);
        box = pdfReader.GetPageSizeWithRotation(p + 1);

        outputDoc.SetPageSize(box);
        outputDoc.NewPage();

        if ((rotation == 90) || (rotation == 270)) {
            pdfContentByte.AddTemplate(page, 0, -1.0f, 1.0f, 0, 0, box.Height);
        } else {
            pdfContentByte.AddTemplate(page, 1.0f, 0, 0, 1.0f, 0, 0);
        }
    }

    pdfReader.Close();

在此示例中,pdfReader是引用要添加的源pdf的PdfReader类的实例。这可以是文件,流或字节数组。 pdfWriter是PdfWriter类的新实例,它是输出内容。

我知道它不是使用PDF4NET或BCL easyPDF7,但希望它会有所帮助。

答案 1 :(得分:0)

我通过提取页面和创建新文件来实现它。我从主文件中提取页面到索引,索引是我要插入第二个文件的页码。

希望有助于谁处理PDF4NET并希望在特定页码处合并文件。

 private string MergeFiles(string mainfile, string attachment, string path, int index)
 {
        var newFile = @"C:\Test\PDF\NewInsertedAt2.pdf";

      int mainFilePages, attachFilePages, i, j, k;

      PDFFile mainFile = PDFFile.FromFile(mainfile);
      PDFFile attachFile = PDFFile.FromFile(attachment);

      PDFImportedPage ip = null;
      PDFDocument doc = new PDFDocument();

      mainFilePages = mainFile.PagesCount;
      attachFilePages = attachFile.PagesCount;


                        for (i = 0; i < index; i++)
                        {
                            ip = mainFile.ExtractPage(i);
                            doc.Pages.Add(ip);
                        }
                        for (j = 0; j < attachFilePages; j++)
                        {
                            ip = attachFile.ExtractPage(j);
                            doc.Pages.Add(ip);
                        }
                        for (k = i; k < mainFilePages; k++)
                        {
                            ip = mainFile.ExtractPage(k);
                            doc.Pages.Add(ip);
                        }

                        doc.Save(newFile);


  mainFile.Close();
 attachFile.Close();

 return newFile;
}