0

我的 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 字体属性

我一定嵌入了一些字体,因为西里尔字母和中文字母以前不工作,但现在可以工作。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;
    }
4

2 回答 2

0

您提供的代码段是不够的。问题出在你这样做时发生的任何事情EmbeddedResources.CreateDesignFont(webform);

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

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

更新

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

于 2013-08-14T12:59:22.537 回答
0

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

于 2013-08-29T17:56:34.677 回答