PDFsharp在Azure中生成空白页,但在本地工作

时间:2016-12-09 01:55:04

标签: c# asp.net-mvc azure pdfsharp migradoc

这在本地运行时在ASP.NET MVC应用程序中有效,但在Azure上部署时

Document doc = new Document();  
Section section = doc.AddSection();
section.AddParagraph("Some text to go into a PDF");          
PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer(false, PdfFontEmbedding.Always);
pdfRenderer.Document = doc;
pdfRenderer.RenderDocument();
System.IO.MemoryStream stream = new System.IO.MemoryStream();
pdfRenderer.PdfDocument.Save(stream, false);
Byte[] documentBytes = stream.ToArray();

return File(documentBytes, "application/pdf");

在本地,我得到了一个不错的PDF。在Azure上,我得到一个空白的PDF。我没有看到任何抛出的异常或其他错误消息。我找到了一些SO答案,说明PDF的GDI版本在Azure上不起作用,所以我使用的是WPF版本 - 结果相同。

我发现了这个问题,但我不清楚如何将其应用于MVC应用:Why is MigraDoc generating a blank pdf in my asp.net application?

对不起,如果这是一个显而易见的问题,我只是被卡住了!

2 个答案:

答案 0 :(得分:2)

如果完整的PDF到达客户端,可能会出现字体问题(我在评论中要求确认但尚未得到答案)。

PDFsharp必须能够访问TTF文件才能提取信息。您在%windir%\ fonts文件夹中使用的字体是否具有读取它们的权限?

Azure是IFontResolver的候选者,因为缺少许多字体,通常不会授予权限。

使用IFontResolver,您可以使用PDFsharp直接访问TTF文件(如byte [])。

您可以将我的EZFontResolver类用于此目的:
http://developer.th-soft.com/developer/2015/12/11/ezfontresolver-a-generic-font-resolver-for-pdfsharp-and-migradoc/

我还有一个示例,展示了如何实现自己的IFontResolver:
http://developer.th-soft.com/developer/2015/09/21/using-private-fonts-with-pdfsharp-1-50-beta-2-or-migradoc/

答案 1 :(得分:-2)

可能是因为Azure处理内存流的方式不同。我建议在写入流之前寻找流的开头(stream.Seek(0, SeekOrigin.Begin)),并使用重载File(Stream, string)MemoryStream继承Stream,这样你就可以直接传递它了)

如果有帮助,请告诉我。