我想通过它的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. 保存的MemoryStream并继续
- 5. Telerik RadEditor memorystream/string保存为RTF
- 6. 使用MemoryStream保存.docx文件C#
- 7. 如何Pdfsharp pdfDocument保存到一个文件路径
- 8. C#3.0使用MemoryStream保存itextsharp pdf到数据库
- 9. GDI +的异常保存位图到一个MemoryStream
- 10. 怎么写的MemoryStream数据保存到文件
- 11. C#3.0 - 如何将文件从MemoryStream保存到数据库?
- 12. 在缓存中存储MemoryStream
- 13. C#到Java:Base64String,MemoryStream,GZipStream
- 14. 将表保存为一个整体MigraDoc/PDFsharp
- 15. MemoryStream“内存不足”C#
- 16. 使用MemoryStream分配内存
- 17. C# - 将上传的Excel文件保存到MemoryStream中,然后用它填充DataTable
- 18. SharpSvn - 如何保存从MemoryStream的更改,但不工作副本
- 19. 怎样的MemoryStream在Windows 8中保存为JPEG C#
- 20. 使用OpenXML&MemoryStream在ASP.NET程序中编辑和保存.docx
- 21. 转换PDFsharp从C#解除保护到VB.NET
- 22. 在PDFSharp
- 23. BinaryWriter到Java中的MemoryStream
- 24. 使用NAudio录制到MemoryStream
- 25. PDF到MemoryStream然后返回
- 26. “Chunked”MemoryStream
- 27. PDFsharp图像XImage
- 28. .NET通过PDFsharp
- 29. 单声道PdfSharp
- 30. PDFsharp水印
什么是PDOC保存呢?与doc相同吗? – 2014-10-29 20:36:37
它为我这样工作: pdfRenderer.Document = doc; pdfRenderer.RenderDocument(); pdfRenderer.PdfDocument.Save(stream); – vicentedealencar 2014-12-19 18:05:24