我正在使用itext7 pdfhtml(4.0.3)将Html转换为内存中的pdf。下面的方法是在内存中获取html并返回itext7的PdfDocument对象。我需要将该PdfDocument对象转换为字节数组或流。请让我知道我们如何实现这一点。
private iText.Kernel.Pdf.PdfDocument CreatePdf( string html)
{
byte[] bytes = Encoding.ASCII.GetBytes(html);
ConverterProperties properties = new ConverterProperties();
properties.SetBaseUri(path);
MemoryStream myMemoryStream = new MemoryStream(bytes);
PdfWriter writer = new(myMemoryStream);
iText.Kernel.Pdf.PdfDocument pdf = new iText.Kernel.Pdf.PdfDocument(writer);
pdf.SetDefaultPageSize(PageSize.A4);
pdf.SetTagged();
HtmlConverter.ConvertToDocument(html,pdf,properties);
return pdf;
}
对于@mkl的观点,你有点过分了。这里有一个简单的例子:
var html = "<h1>hi mom</h1>";
byte[] result;
using (var memoryStream = new MemoryStream())
{
var pdf = new PdfDocument(new PdfWriter(memoryStream));
pdf.SetDefaultPageSize(PageSize.A4);
pdf.SetTagged();
HtmlConverter.ConvertToPdf(html, pdf, new ConverterProperties());
result = memoryStream.ToArray();
}
File.WriteAllBytes(@"/tmp/file.pdf", result);
MemyStream将在内存中表示您的转换。我添加了WriteAllBytes位,以便您自己查看。
另请注意,如果您不需要设置任何PdfDocument属性,您可以使用更简单的版本:
var html = "<h1>hi mom</h1>";
byte[] result;
using (var memoryStream = new MemoryStream())
{
HtmlConverter.ConvertToPdf(html, memoryStream);
result = memoryStream.ToArray();
}
File.WriteAllBytes(@"/tmp/file.pdf", result);