提问者:小点点

将itext7 PdfDocument转换为c#中的字节数组


我正在使用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;
    }

共1个答案

匿名用户

对于@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);