В версии вы работали , которую вы использовали HtmlConverter.ConvertToPdf
. Этот внутренний вызов также создает объект Document
, но закрывает его перед возвратом.
Закрытие объекта Document
приводит к тому, что все данные сгенерированного PDF, все еще находящиеся в памяти, сбрасываются в поток результатов, который затем завершается с помощью трейлера PDF.
Таким образом, ваша рабочая версия возвращает готовый, полный файл PDF.
В своем новом коде вы используете HtmlConverter.ConvertToDocument
. Этот вызов возвращает использованный объект Document
, но не закрывает его: вы все еще хотите использовать его для некоторых манипуляций.
Поскольку вы не закрываете объект Document
перед вызовом return workStream.ToArray()
, вы возвращаете неполный PDF, в вашем случае только раздел заголовка PDF.
Таким образом, вы должны закрыть этот Document
объект перед извлечением байтов из вашего MemoryStream
, например. явно так
using (var workStream = new MemoryStream())
using (var pdfWriter = new PdfWriter(workStream))
using (var document = HtmlConverter.ConvertToDocument(html, pdfWriter))
{
//Passes the document to a delegated function to perform some content, margin or page size manipulation
pdfModifier(document);
document.Close();
//Returns the written-to MemoryStream containing the PDF.
return workStream.ToArray();
}
или неявно так:
using (var workStream = new MemoryStream())
using (var pdfWriter = new PdfWriter(workStream))
{
using (var document = HtmlConverter.ConvertToDocument(html, pdfWriter))
{
//Passes the document to a delegated function to perform some content, margin or page size manipulation
pdfModifier(document);
}
//Returns the written-to MemoryStream containing the PDF.
return workStream.ToArray();
}