Я использую iText 7, в частности метод HtmlConverter.ConvertToDocument, для преобразования HTML в PDF. Проблема в том, что я действительно не хотел бы создавать файл PDF на своем сервере, я бы предпочел сделать все в памяти и просто отправить его в браузер пользователей, чтобы они могли его загрузить.
Может ли кто-нибудь показать мне пример того, как использовать эту библиотеку, но вместо записи в файл писать в MemoryStream, чтобы я мог отправить его прямо в браузер?
Я искал примеры, и все, что я могу найти, это те, которые относятся к выводу файла.
Я пробовал следующее, но продолжаю получать сообщение об ошибке о невозможности доступа к закрытому потоку памяти.
public FileStreamResult pdf() {
using (var workStream = new MemoryStream())
using (var pdfWriter = new PdfWriter(workStream)) {
pdfWriter.SetCloseStream(false);
using (var document = HtmlConverter.ConvertToDocument(html, pdfWriter)) {
//Returns the written-to MemoryStream containing the PDF.
byte[] byteInfo = workStream.ToArray();
workStream.Write(byteInfo, 0, byteInfo.Length);
workStream.Position = 0;
return new FileStreamResult(workStream, "application/pdf");
}
//return new FileStreamResult(workStream, "application/pdf");
}
}





Обычно такой подход работает
using (var ms = new MemoryStream())
{
//yourStream.Seek(0, SeekOrigin.Begin)
yourStream.CopyTo(ms);
}
Вы вмешиваетесь в workStream до того, как document и pdfWriter закончат создавать в нем результат. Кроме того, цель вашего вмешательства неясна, сначала вы извлекаете байты из потока памяти, а затем записываете их обратно в него...?
public FileStreamResult pdf()
{
var workStream = new MemoryStream())
using (var pdfWriter = new PdfWriter(workStream))
{
pdfWriter.SetCloseStream(false);
using (var document = HtmlConverter.ConvertToDocument(html, pdfWriter))
{
}
}
workStream.Position = 0;
return new FileStreamResult(workStream, "application/pdf");
}
Между прочим, поскольку вы, по сути, не делаете ничего особенного с document, возвращаемым HtmlConverter.ConvertToDocument, вы, вероятно, могли бы использовать другой метод HtmlConverter с меньшими затратами в своем коде.
Я бы подумал, установив соответствующие атрибуты css media.
Есть ли способ установить размер страницы документа, если следовать этому методу?