我想通過它的Save方法將一個PdfSharp.Pdf.PdfDocument保存到一個Stream,但它不會將PDF頭設置附加到它。因此,當我讀迴流並將其返回給用戶時,他發現PDF文件無效。在PDFsharp保存到內存時是否有解決方案來附加PDF標頭設置?PDFsharp保存到MemoryStream
25
A
回答
20
因此,解決辦法:
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裏吧。經過幾個小時的谷歌搜索,我找到了一個這樣的代碼片段。現在它可以工作。
30
如果您認爲PdfDocument.Save存在問題,請在PDFsharp論壇上報告此問題(但請詳細說明您的錯誤說明)。 您的「解決方案」對我來說看起來像一個黑客。 「pdfRenderer.Save」在內部調用「PdfDocument.Save」。 無論問題是什麼 - 您的「解決方案」仍然調用相同的保存例程。
編輯: 爲了得到一個byte []包含PDF文件時,您只需要撥打:
MemoryStream stream = new MemoryStream();
document.Save(stream, false);
byte[] bytes = stream.ToArray();
PDFsharp的早期版本不重置流位置。
所以你必須調用
ms.Seek(0, SeekOrigin.Begin);
從流中讀取之前重置流位置;這對於當前版本不再需要。
使用ToArray通常可以用來代替從流中讀取數據。
編輯2:代替stream.ToArray()
它可能是更有效地使用stream.GetBuffer()
,但這個緩衝區通常比PDF文件較大,你只需要使用stream.Length
字節從緩衝區。對於採用byte[]
以及長度參數的方法非常有用。
9
我找到簡單的解決辦法:
byte[] fileContents = null;
using(MemoryStream stream = new MemoryStream())
{
pdfDoc.Save(stream, true);
fileContents = stream.ToArray();
}
5
對於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. 將位圖保存到MemoryStream
- 2. 用MemoryStream保存PdfCopy
- 3. 將上傳的文件保存到MemoryStream
- 4. C#Memorystream未完全保存到文件
- 5. 將databound datagridview圖像保存到memoryStream
- 6. 保存的MemoryStream並繼續
- 7. 防止PDFsharp保存圖像文件?
- 8. Telerik RadEditor memorystream/string保存爲RTF
- 9. 使用MemoryStream保存.docx文件C#
- 10. c#BitmapImage AccessViolationException當保存爲MemoryStream
- 11. 如何Pdfsharp pdfDocument保存到一個文件路徑
- 12. 如何將PDFSharp對象保存到多個文件?
- 13. C#3.0使用MemoryStream保存itextsharp pdf到數據庫
- 14. 怎麼寫的MemoryStream數據保存到文件
- 15. GDI +的異常保存位圖到一個MemoryStream
- 16. C#3.0 - 如何將文件從MemoryStream保存到數據庫?
- 17. 在緩存中存儲MemoryStream
- 18. 追加到MemoryStream
- 19. MemoryStream上的BinaryReader保持空
- 20. C#到Java:Base64String,MemoryStream,GZipStream
- 21. 將表保存爲一個整體MigraDoc/PDFsharp
- 22. 打開PDFSharp文檔並保存刪除密碼
- 23. 如何使用PDFsharp將system.drawing.graphics對象保存爲PDF文件?
- 24. 使用MemoryStream分配內存
- 25. MemoryStream「內存不足」C#
- 26. MemoryStream使用多少內存?
- 27. 當我在IIS7中將png保存到MemoryStream時發生了一般性錯誤
- 28. C# - 將上傳的Excel文件保存到MemoryStream中,然後用它填充DataTable
- 29. Image.Save異常「GDI +中發生了一般性錯誤」。保存到的MemoryStream
- 30. C#從一個MemoryStream保存多個PNG文件
什麼是PDOC保存呢?與doc相同嗎? – 2014-10-29 20:36:37
它爲我這樣工作: pdfRenderer.Document = doc; pdfRenderer.RenderDocument(); pdfRenderer.PdfDocument.Save(stream); – vicentedealencar 2014-12-19 18:05:24