在Azure函数中使用字体

时间:2017-07-18 09:30:57

标签: azure azure-functions

我尝试让PdfSharp在Azure函数中运行 但我的字体有一些问题

 // Create a new PDF document
  PdfDocument document = new PdfDocument();
  document.Info.Title = "Created with PDFsharp";

  // Create an empty page
  PdfPage page = document.AddPage();

  // Get an XGraphics object for drawing
  XGraphics gfx = XGraphics.FromPdfPage(page);

  // Create a font
  XFont font = new XFont("Verdana", 20, XFontStyle.BoldItalic);

  // Draw the text
  gfx.DrawString("Hello, World!", font, XBrushes.Black,
    new XRect(0, 0, page.Width, page.Height),
    XStringFormats.Center);

这也是PDFSharp示例页面中的代码...... 在字体行他给我以下错误......

Exception while executing function: Functions.PDFGenerationFunction. PdfSharp: Internal error. Font data could not retrieved.

我需要引用一些特别的东西吗?或者是否无法在Azure功能中执行此操作?

PDFSharp版本 - > “PDFsharp”:“1.32.3057”

和/或另一种在Azure功能中生成PDF文档的解决方案......

2 个答案:

答案 0 :(得分:1)

这可能是Azure功能和Web应用程序运行的沙箱的问题。 查看此列表,了解可在沙箱中使用的已知PDF库。 https://github.com/projectkudu/kudu/wiki/Azure-Web-App-sandbox#unsupported-frameworks

答案 1 :(得分:0)

PDF Sharp无法找到适合该功能以及Web API /应用程序的字体。因为它们没有提供标准字体。

要解决此问题,需要对PDF Sharp进行编码并提供基于PDFSharp接口IFontResolver font resolver 。该解析器实际上将获取字体并将其作为流返回。

以下示例是我编写的解析器,用于从当前程序集中提取嵌入字体,例如:

PdfSharp.Fonts.GlobalFontSettings.FontResolver = new EmbeddedFontResolver();

关于如何在Stack Overflow上创建这样的解析器的最好例子是这个答案(这不是我的答案,但是我已经对其进行了修改,以更好地了解发生的情况

Azure PDF Sharp not using Unicode font

如果该功能不允许您使用嵌入字体,则可以从Azure Blob加载它们。