字体不会加载到pdf查看器中

时间:2016-08-04 15:47:33

标签: c# wpf pdf pdfsharp migradoc

我目前在使用PdfSharp / MigraDoc和pdf查看器时遇到问题。我使用EZFontResolver made by Thomas能够使用自定义字体生成pdf。不幸的是,pdf查看器无法呈现字体,我不知道为什么。我在Thomas的博客上看到了一个错误described by Travis,其中指出,如果EZFontResolver没有多个粗体/斜体符号识别(例如“fontname | b | b”),那么 PdfDocumentRenderer.RenderDocument ()失败。关键是,当我尝试这样的事情时:

Document document = DdlReader.DocumentFromString(ddl);
_renderer = new DocumentRenderer(document);
_renderer.PrepareDocument();
要求EZFontResolver提供名称类似“customfont | b | b”的字体(当我只使用 PdfDocument.Save(...)而不是“ CustomFont的”。

我的pdf查看器会覆盖DocumentViewer并查看FixedDocument类实例。有趣的是,保存的pdf文件设置了所有字体,但预览无法做到(这是我的大问题)。即使我使用解析器返回正确的字体,所有这一切都会发生。

修改

ddl是一个看起来像这样的字符串:

"\\document
[
  Info
  {
    Title = \"My file\"
    Subject = \"My pdf file\"
    Author = \"mikes\"
  }
]
{
  \\styles
  {
    Heading1 : Normal
    {
      Font
      {
        Name = \"My custom font\"
        Bold = true
      }
      ParagraphFormat
      {
        Alignment = Center
        SpaceBefore = \"0.5cm\"
        SpaceAfter = \"0.5cm\"
      }
    }

    header : Normal
    {
      Font
      {
        Name = \"My custom font\"
        Size = 6
      }
      ParagraphFormat
      {
        Alignment = Center
      }
    }

当我删除Travis的错误修复时,异常被抛出在 _renderer.PrepareDocument()中(修复后,堆栈跟踪显示多个“| b”的来源也是离开那里。

1 个答案:

答案 0 :(得分:1)

模拟粗体和模拟斜体使用常规字体,但会应用转换。

因此,如果PDF查看器不支持这些转换,则模拟将不起作用。

MigraDoc附带的DocumentViewer不显示PDF文件,它显示MigraDoc文档。由于技术原因,它不能使用通过IFontResolver接口提供的字体。 EZFontResolver是IFontResolver的一个实现。

关于" customfont | b | b":我不能说这是一个bug还是常规行为。如果您认为它是一个错误,请提供MCVE(完整样本)。