【发布时间】:2019-12-16 08:38:28
【问题描述】:
我正在使用IText 7,我已经能够获取一个 html 页面并为该页面生成一个 pdf,但我需要从多个 html 页面生成一个 pdf 文档并按页面分隔。例如:我有Page1.html、Page2.html 和Page3.html。我需要一个 3 页的 pdf 文档,第一页的内容为 Page1.html,第二页的内容为 Page2.html 等等...
这是我拥有的代码,它适用于一个 html 页面:
ConverterProperties properties = new ConverterProperties();
PdfWriter writer = new PdfWriter(pdfRoot, new WriterProperties().SetFullCompressionMode(true));
PdfDocument pdfDocument = new PdfDocument(writer);
pdfDocument.AddEventHandler(PdfDocumentEvent.END_PAGE, new HeaderPdfEventHandler());
HtmlConverter.ConvertToPdf(htmlContent, pdfDocument, properties);
是否可以对多个 html 页面进行循环,为每个 html 页面添加一个新页面到 PdfDocument,然后只生成一个 pdf,每个 html 页面只有一个页面?
更新
我一直在关注 this 示例并尝试将其从 Java 转换为 C#,我正在尝试使用 PdfMerger 并循环浏览 html 页面...但我收到了异常 Cannot access a closed stream ,在这一行:
temp = new PdfDocument(
new PdfReader(new RandomAccessSourceFactory().CreateSource(baos), rp));
看起来与ByteArrayOutputStream baos 实例有关。有什么建议?这是我当前的代码:
foreach (var html in htmlList)
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfDocument temp = new PdfDocument(new PdfWriter(baos));
HtmlConverter.ConvertToPdf(html, temp, properties);
ReaderProperties rp = new ReaderProperties();
temp = new PdfDocument(
new PdfReader(new RandomAccessSourceFactory().CreateSource(baos), rp));
merger.Merge(temp, 1, temp.GetNumberOfPages());
temp.Close();
}
pdfDocument.Close();
【问题讨论】:
-
“是否可以针对多个 html 页面进行循环” - 您是否尝试过创建该循环?它以何种方式失败? (因为确实,它应该是可能的。)
-
最好的解决方案是在内存中生成这些文档并使用
PdfMerger将它们合并到一个单独的fat文件中 -
@mkl 我已经更新了我的问题,我正在尝试这样做,但我收到了一个异常
-
@AlexeySubach 感谢您的建议,我正在尝试使用
PdfMerger,但仍然无法使用,我已经更新了我的问题,有什么建议吗?
标签: c# pdf itext pdf-generation itext7