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

PDFsharp generates blank page in Azure, but works locally

当 运行 在本地时,这在 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 答案,指出 PDFsharp 的 GDI 版本在 Azure 上不起作用,所以我改用 WPF 版本 - 结果相同。

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

抱歉,如果这是一个明显的问题,我就卡住了!

如果完整的PDF到达客户,可能是字体问题(我在评论中要求确认,但还没有得到答复)。

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

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

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

您可以为此目的使用我的 class 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/