当前位置: 首页 > 知识库问答 >
问题:

iTextSharp在Adobe Reader中嵌入西里尔字体

胡景澄
2023-03-14

Adobe Reader无法正确显示我的PDF。对于其他PDF阅读器来说,这是一个语法问题,因为我听说Adobe 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);

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;
    }

共有1个答案

姜泳
2023-03-14

您提供的代码片段不够充分。问题源于执行EmbeddedResources.CreateDesignFont(webform);时发生的任何情况

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

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

更新

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

 类似资料:
  • 我有PDF模板文件与字段。客户创建的模板。它有一些文本、字段标签和字段本身。文本和标签使用嵌入在模板中的某种字体。 当我尝试用西里尔文值填充字段时会出现问题-结果文档中没有西里尔文符号。 所以问题是:1。如果我可以嵌入字体在Adobe Acrobat只用于字段,那么如何做?2.如果我可以用iTextSharp为现有字段定义字体族,那么该怎么做?

  • 问题内容: 当用户在数据库中插入俄语单词如“锌褉松弛屑械Russian”时,数据库将其保存为“ ??????”。如果他们以’N’字母插入,或者我以’N’字母进行选择,即;exec Table_Name N’没有问题。但是我不想在每个查询中都使用“ N”,因此对此有什么解决方案吗?顺便说一下,我将使用存储过程。 更新: 现在,我可以使用带有排序规则的俄语字母。但是我无法更改每种语言的排序规则,我只想

  • 如何使其在输出俄语时,输出俄语字母,而不是�� ����� �������� �����! 它不仅在控制台中工作,而且在终端中一切正常 我试过这个 > 窗口 还有这个 窗户- 还有这个 在eclipse主目录中打开eclipse.ini,或者在STS(Spring Tool Suite)的情况下打开STS. ini,将下面的行放在文件末尾-Dfile.encoding=UTF-8 但还是做不到。请

  • 问题内容: 我正在尝试使用php的函数json_encode将西里尔UTF-8数组编码为JSON字符串。示例代码如下所示: 它工作正常,但脚本的结果表示为: 每个西里尔字母组成6个字符。有没有一种方法可以获取键/值对的原始字符,而不是编码的字符? 问题答案: 您不能在此处使用JSON_UNESCAPED_UNICODE常量吗?

  • 我正在使用pdfbox 2.0.5使用以下代码填写PDF文档的表单字段: 我得到这个错误:U+0434('AFII10069')在此字体Times-Roman(泛型:TimesNewRomanPSMT)编码:StandardEncoding with Difference中不可用 我必须在文本字段中指定哪种字体来处理西里尔(或亚洲)字符? 谢谢,罗波

  • 问题内容: 当我写一些西里尔字母的文字System.out.println(“Русскийязык”)-然后使用Windows控制台胜过此╨єёёъшщч√ъ时,该如何解决?文件编码为utf-8,但是没关系,当它是ansii或Windows-1251时,它的输出相同。 问题答案: 请注意,您可能会在输出中看到一些尾随的垃圾(我确实如此),但是如果将输出重定向到文件,则会看到这只是一个显示伪像。