Я хочу сохранить PdfSharp.Pdf.PdfDocument по методу сохранения в поток, но он не прикрепляет к нему настройки заголовка PDF. Поэтому, когда я читаю Stream и возвращаю его пользователю, он видит, что файл PDF недействителен. Есть ли решение для присоединения настроек заголовка PDF, когда PDFsharp сохраняет в памяти?PDFsharp save to MemoryStream
ответ
Таким образом, решение:
MigraDoc.DocumentObjectModel.Document doc = new MigraDoc.DocumentObjectModel.Document();
MigraDoc.Rendering.DocumentRenderer renderer = new DocumentRenderer(doc);
MigraDoc.Rendering.PdfDocumentRenderer pdfRenderer = new MigraDoc.Rendering.PdfDocumentRenderer();
pdfRenderer.PdfDocument = pDoc;
pdfRenderer.DocumentRenderer = renderer;
using (MemoryStream ms = new MemoryStream())
{
pdfRenderer.Save(ms, false);
byte[] buffer = new byte[ms.Length];
ms.Seek(0, SeekOrigin.Begin);
ms.Flush();
ms.Read(buffer, 0, (int)ms.Length);
}
Существует этот MigraDoc материал, который поставляется с PDFsharp, но я вряд ли нашел какой-либо надлежащий DOC/Faq для него. После нескольких часов работы в Интернете я нашел фрагмент, который был чем-то вроде этого. Теперь это работает.
Если вы считаете, что есть проблема с PdfDocument.Save, сообщите об этом на форуме PDFsharp (но, пожалуйста, уточните свое описание ошибки). Ваше «решение» выглядит как хак для меня. «pdfRenderer.Save» вызывает «PdfDocument.Save» внутри. Независимо от проблемы - ваше «решение» по-прежнему вызывает ту же самую процедуру сохранения.
Edit: Чтобы получить байт [], содержащий файл PDF, вам нужно только позвонить:
MemoryStream stream = new MemoryStream();
document.Save(stream, false);
byte[] bytes = stream.ToArray();
Ранние версии PDFsharp не сбрасывают положение потока.
Таким образом, вы должны вызвать
ms.Seek(0, SeekOrigin.Begin);
сбросить позицию потока перед чтением из потока; это больше не требуется для текущих версий.
Использование ToArray часто может использоваться вместо чтения из потока.
Edit 2: вместо stream.ToArray()
может быть более эффективно использовать stream.GetBuffer()
, но этот буфер, как правило, больше, чем файл PDF, и вы должны использовать только stream.Length
байт из этого буфера. Очень полезно для метода, который принимает byte[]
вместе с параметром длины.
я нашел простое решение:
byte[] fileContents = null;
using(MemoryStream stream = new MemoryStream())
{
pdfDoc.Save(stream, true);
fileContents = stream.ToArray();
}
Мой ответ показывает с 2010 года, что можно использовать 'ToArray()'. ;-) –
Для MigraDoc (вер 1.30) я мог сохранить его с
PdfDocumentRenderer renderer = new PdfDocumentRenderer(true, PdfSharp.Pdf.PdfFontEmbedding.Always);
renderer.Document = report.m_Document;
renderer.RenderDocument();
using (MemoryStream stream = new MemoryStream())
{
renderer.PdfDocument.Save(stream, false);
... your code in here
}
- 1. argumentnullexception bitmap save to memorystream
- 2. MemoryStream (pdf) to Ghostscript to MemoryStream (jpg)
- 3. MemoryStream to string []
- 4. XSLTransform to MemoryStream
- 5. PDF to Text using PDFSharp
- 6. MemoryStream to SecureString: Очистка памяти
- 7. BinaryWriter to MemoryStream в Java
- 8. HTML to PDF - перерыв страницы с PdfSharp и HtmlRenderer
- 9. save gtk.DrawingArea to file
- 10. Pyspark save to S3
- 11. json save to variable
- 12. System.Speech.Recognizer save to string
- 13. save bufferedimage to gif
- 14. foreach save to mysqli
- 15. PDFsharp: Заменить строку, используя PDFsharp
- 16. PDFsharp ориентация документа
- 17. PDFsharp document outofmemory exception
- 18. Azure Storage private container blob to MemoryStream
- 19. MemoryStream to Base64, дающий неверную строку Base64
- 20. Загрузить Big ZipArchive-MemoryStream to Azure
- 21. C# save System.Drawing.Graphics to .png
- 22. Android save pics to drawable
- 23. save mysql results to datatable
- 24. JavaScript save blob to localStorage
- 25. android: save json to sqlite
- 26. Javascript Blob save to variable
- 27. Pyqt save dom to file
- 28. Python save to mysql database
- 29. Android save to file.txt appending
- 30. Django many-to-many save
Что PDoc? Это то же самое, что и документ? –
это сработало для меня вот так: pdfRenderer.Document = doc; pdfRenderer.RenderDocument(); pdfRenderer.PdfDocument.Save (поток); – vicentedealencar
Что такое pDoc ???? – Zafar