使用 NReco PdfGenerator 合并 pdf
Merge pdfs with NReco PdfGenerator
在 NReco 网站的功能部分,在示例列表中:有一行关于 MergePdf。
我查看了 API-reference 并在 visualstudio 中使用了 intellisense,但我找不到任何东西。
我不想在通过邮件发送之前合并多个 pdf。 Pdf 是使用 nreco wkhtmltopdf 生成的,具有不同的页眉和页脚,我无法在同一生成中工作,所以我拆分了这一代,现在我想再次合并 pdf。
或者我必须让另一个图书馆参与进来。
有两种方法可以实现您提到的目标:
- 使用 GeneratePdfFromFiles method which accepts array of WkHtmlInput 结构,允许您为每个输入 HTML 文件单独指定 header/footer。结果生成了一个 PDF;请注意,此方法需要有效的许可证密钥,并且不适用于免费图书馆用户
- 以标准方式生成多个 PDF,然后merge them into one resulting PDF with help of iTextSharp library(免费的 LGPL 4.1.6 可用于此目的)。
只是分享我的结果。最起码到现在。
它是使用 iTextSharp 对建议解决方案的修改。
public static byte[] MergePdfs(IEnumerable<byte[]> pdfs)
{
using (var memoryStream = new MemoryStream())
{
var document = new Document(PageSize.A4);
var writer = PdfWriter.GetInstance(document, memoryStream);
document.Open();
var writerDirectContent = writer.DirectContent;
foreach (var pdf in pdfs)
{
var pdfReader = new PdfReader(pdf);
var numberOfPages = pdfReader.NumberOfPages;
for (var currentPageNumber = 1; currentPageNumber <= numberOfPages; currentPageNumber++)
{
document.SetPageSize(PageSize.A4);
document.NewPage();
var page = writer.GetImportedPage(pdfReader, currentPageNumber);
writerDirectContent.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
}
}
document.Close();
return memoryStream.ToArray();
}
}
在 NReco 网站的功能部分,在示例列表中:有一行关于 MergePdf。 我查看了 API-reference 并在 visualstudio 中使用了 intellisense,但我找不到任何东西。
我不想在通过邮件发送之前合并多个 pdf。 Pdf 是使用 nreco wkhtmltopdf 生成的,具有不同的页眉和页脚,我无法在同一生成中工作,所以我拆分了这一代,现在我想再次合并 pdf。 或者我必须让另一个图书馆参与进来。
有两种方法可以实现您提到的目标:
- 使用 GeneratePdfFromFiles method which accepts array of WkHtmlInput 结构,允许您为每个输入 HTML 文件单独指定 header/footer。结果生成了一个 PDF;请注意,此方法需要有效的许可证密钥,并且不适用于免费图书馆用户
- 以标准方式生成多个 PDF,然后merge them into one resulting PDF with help of iTextSharp library(免费的 LGPL 4.1.6 可用于此目的)。
只是分享我的结果。最起码到现在。 它是使用 iTextSharp 对建议解决方案的修改。
public static byte[] MergePdfs(IEnumerable<byte[]> pdfs)
{
using (var memoryStream = new MemoryStream())
{
var document = new Document(PageSize.A4);
var writer = PdfWriter.GetInstance(document, memoryStream);
document.Open();
var writerDirectContent = writer.DirectContent;
foreach (var pdf in pdfs)
{
var pdfReader = new PdfReader(pdf);
var numberOfPages = pdfReader.NumberOfPages;
for (var currentPageNumber = 1; currentPageNumber <= numberOfPages; currentPageNumber++)
{
document.SetPageSize(PageSize.A4);
document.NewPage();
var page = writer.GetImportedPage(pdfReader, currentPageNumber);
writerDirectContent.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
}
}
document.Close();
return memoryStream.ToArray();
}
}