itext7 中的 htmlConverter 在我希望它在 C# 中关闭之前关闭 pdf 文档
htmlConverter in itext7 closes the pdf document before I want it to be closed in C#
我正在使用 iText7 从 HTML 转换为运行完美的 PDF
但是这个调用:
HtmlConverter.ConvertToPdf(htmlStream, document);
将在调用后关闭文档,但我不想关闭文档,原因如下
我写这个函数来写页面我会在循环中调用它
public static void WritePage(string htmlbody)
{
document.AddNewPage();
byte[] htmlByteArray = Encoding.UTF8.GetBytes(htmlbody);
MemoryStream htmlStream = new MemoryStream(htmlByteArray);
HtmlConverter.ConvertToPdf(htmlStream, document);
}
循环结束后,我将自行关闭文档
public static void CloseDocument()
{
document.Close();
}
这在我使用 iText5 时有效,但现在 convertToPdf 将关闭文档。
我可以从该文档中读取并将其与新页面一起添加到新文档,但我不想这样做
我想利用内置的 document.AddNewPage 并且在文档完全构建后我将自己关闭它
提前致谢
answer#1 正在使用 PdfMerger,这是我的首选答案
public void createPdf(String baseUri, String[] src, String dest) throws IOException {
ConverterProperties properties = new ConverterProperties();
properties.setBaseUri(baseUri);
PdfWriter writer = new PdfWriter(dest);
PdfDocument pdf = new PdfDocument(writer);
PdfMerger merger = new PdfMerger(pdf);
for (String html : src) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfDocument temp = new PdfDocument(new PdfWriter(baos));
HtmlConverter.convertToPdf(new FileInputStream(html), temp, properties);
temp = new PdfDocument(
new PdfReader(new ByteArrayInputStream(baos.toByteArray())));
merger.merge(temp, 1, temp.getNumberOfPages());
temp.close();
}
pdf.close();}
answer#2 正在将 html 转换为 IElement 列表并将其添加到文档中,如以下代码所示:
public void createPdf(String baseUri, String[] src, String dest) throws IOException {
ConverterProperties properties = new ConverterProperties();
properties.setBaseUri(baseUri);
PdfWriter writer = new PdfWriter(dest);
PdfDocument pdf = new PdfDocument(writer);
Document document = new Document(pdf);
for (String html : src) {
List<IElement> elements =
HtmlConverter.convertToElements(new FileInputStream(html), properties);
for (IElement element : elements) {
document.add((IBlockElement)element);
}
}
document.close();}
我正在使用 iText7 从 HTML 转换为运行完美的 PDF
但是这个调用:
HtmlConverter.ConvertToPdf(htmlStream, document);
将在调用后关闭文档,但我不想关闭文档,原因如下
我写这个函数来写页面我会在循环中调用它
public static void WritePage(string htmlbody)
{
document.AddNewPage();
byte[] htmlByteArray = Encoding.UTF8.GetBytes(htmlbody);
MemoryStream htmlStream = new MemoryStream(htmlByteArray);
HtmlConverter.ConvertToPdf(htmlStream, document);
}
循环结束后,我将自行关闭文档
public static void CloseDocument()
{
document.Close();
}
这在我使用 iText5 时有效,但现在 convertToPdf 将关闭文档。 我可以从该文档中读取并将其与新页面一起添加到新文档,但我不想这样做 我想利用内置的 document.AddNewPage 并且在文档完全构建后我将自己关闭它
提前致谢
answer#1 正在使用 PdfMerger,这是我的首选答案
public void createPdf(String baseUri, String[] src, String dest) throws IOException {
ConverterProperties properties = new ConverterProperties();
properties.setBaseUri(baseUri);
PdfWriter writer = new PdfWriter(dest);
PdfDocument pdf = new PdfDocument(writer);
PdfMerger merger = new PdfMerger(pdf);
for (String html : src) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfDocument temp = new PdfDocument(new PdfWriter(baos));
HtmlConverter.convertToPdf(new FileInputStream(html), temp, properties);
temp = new PdfDocument(
new PdfReader(new ByteArrayInputStream(baos.toByteArray())));
merger.merge(temp, 1, temp.getNumberOfPages());
temp.close();
}
pdf.close();}
answer#2 正在将 html 转换为 IElement 列表并将其添加到文档中,如以下代码所示:
public void createPdf(String baseUri, String[] src, String dest) throws IOException {
ConverterProperties properties = new ConverterProperties();
properties.setBaseUri(baseUri);
PdfWriter writer = new PdfWriter(dest);
PdfDocument pdf = new PdfDocument(writer);
Document document = new Document(pdf);
for (String html : src) {
List<IElement> elements =
HtmlConverter.convertToElements(new FileInputStream(html), properties);
for (IElement element : elements) {
document.add((IBlockElement)element);
}
}
document.close();}