【问题标题】:iTextSharp embedded cyrillic font in Adobe ReaderAdobe Reader 中的 iTextSharp 嵌入西里尔字体
【发布时间】:2013-08-14 10:58:48
【问题描述】:

我的 PDF 无法在 Adob​​e Reader 中正确显示。其他 PDF 阅读器没问题,所以这一定是语法问题,因为我听说 Adob​​e Reader 对 PDF 语法更严格。字体似乎是应有的两倍大,但水平间距是正确的,这使得字体相互重叠。

这是我的 C# 代码(字体创建代码在本文末尾)。

Font officialUseFont = EmbeddedResources.CreateDesignFont(webform);
PdfContentByte officialUseCanvas = _stamper.GetOverContent(3);
ColumnText.ShowTextAligned(officialUseCanvas, Element.ALIGN_CENTER, new Phrase(webform.Text, officialUseFont), posX, posY, 0);

我正在使用 iTextSharp 5.4.2.0 和运行时 v2.0.50727.

我一定嵌入了一些字体,因为西里尔字母和中文字母以前不工作,但现在可以工作。 PDF 中存在的表单字段填充了西里尔字符,没有任何问题,只是导致问题的画布。

public Font CreateDesignFont(IForm webform)
{
    var baseFont = GetBaseFont(fontNamespace.Length, selectedFontName);
    return new Font(baseFont, webform.FontSize);
}
    private static BaseFont GetBaseFont(int fontNamespaceLength, string selectedFontName)
    {

        byte[] fontBuffer;
        using (var stream = (Assembly.GetExecutingAssembly().GetManifestResourceStream(selectedFontName)))
        {
            fontBuffer = new byte[stream.Length];
            stream.Read(fontBuffer, 0, fontBuffer.Length);
        }
        var fontfile = selectedFontName.Substring(fontNamespaceLength);
        var customFont = BaseFont.CreateFont(fontfile, BaseFont.IDENTITY_H, BaseFont.EMBEDDED, BaseFont.CACHED, fontBuffer, null);
        return customFont;
    }

【问题讨论】:

  • 对不起,我在原帖中犯了一个错误。我正在使用版本 5.4.2.0
  • 请提供PDF供查阅。
  • 您现在在帖子中有足够的信息吗?如果您需要,我可以将 PDF 放入 Dropbox 文件夹中。
  • 样本 PDF 仍然会有所帮助。
  • 我同意@mkl 我无法重现这个问题,所以我不知道出了什么问题。

标签: itextsharp adobe-reader


【解决方案1】:

您提供的代码 sn-p 不够用。问题出在您执行EmbeddedResources.CreateDesignFont(webform);

时发生的任何事情

如果 Adob​​e Reader 中未显示该字体,则说明您没有嵌入该字体。也许你认为你有,但从 PDF 查看器的行为来看,你没有。

您能否提供文档属性的屏幕截图,更具体地说是“字体”选项卡?

更新

我尝试编写自己的代码 sn-p,但无法重现该问题。因此,我又查看了您的代码,发现您正在缓存字体,但您已经使用 ArialMT 使用 WINANSI 编码来填写第 1 页上的字段。IMO(我没有是时候检查了)这与使用IDENTITY_H 使用缓存中的相同字体不兼容。如果您不缓存字体(为什么要缓存?您正在传递 fontBuffer!如果您自己已经缓存了字体字节,则无需将字体存储在缓存中),您的问题可能会得到解决。

【讨论】:

  • 我正在使用带有 IDENTITY_H 编码的 Times New Roman。该帖子已更新,包含更多信息。
  • 我已经通过了 iTextSharp 源代码,但仍然找不到问题。已设置嵌入标志,因此应嵌入。
【解决方案2】:

问题源于我使用 .otf 字体这一事实。当我更改为 .ttf 时,问题就消失了。

【讨论】:

    猜你喜欢
    • 2012-10-13
    • 1970-01-01
    • 2015-08-31
    • 2016-12-11
    • 2016-09-12
    • 2016-11-18
    • 2016-01-27
    • 1970-01-01
    • 2011-12-03
    相关资源
    最近更新 更多