我们有ASP.NET应用程序,其中,我正在尝试合并两个PDF文件,我们目前正在使用BCL easyPDF7库。我试图在特定位置或页面合并新文件(例如在主文档中的第3页之后)但是我发现在这个库中的Merge只是将文件附加到最后。
我们决定使用新工具PDF4NET,我从PDF4NET的示例代码中观察到它们还提供了最终附加文档的合并功能。
我们有什么方法可以做到这一点? (通过PDF4NET或BCL easyPDF7)请分享您的观点。
答案 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;
}