itextsharp 生成阿拉伯语字体

Itextsharp Generate arabic font

我有一个包含 ASP WEB API 项目的解决方案

我有一个使用 ItextSharp 创建 PDF 文档的方法 本文档包含法文和阿拉伯文文本 我使用此代码获取阿拉伯语字体:

    public static BaseFont GetArabicFont()
    {

        var appDomain = System.AppDomain.CurrentDomain;
        var basePath = appDomain.BaseDirectory;
        var fontPath = Path.Combine(basePath, "fonts", "pdf", "ARIALUNI.TTF");

        try
        {
            BaseFont bf = BaseFont.CreateFont(fontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
            return bf;
        }
        catch (Exception ex)
        {

            return BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

        }
   }

当我执行应用程序时,我可以正确生成 pdf 文档(包括法语和阿拉伯语文本) 在 IIS 7 中部署 web api 项目后,当我调用生成 pdf 的方法时,但没有响应 当我使用 Postmane 直接调用 api 时,我看到了这条消息: "Message": "An error has occurred.", "ExceptionMessage": Identity-H 不是受支持的编码名称

我不知道问题出在 IIS 上还是我必须更改 IDENTITY_H 字体? 有人可以帮忙吗?

这没有意义:

BaseFont.CreateFont(fontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

如果您使用 BaseFont.IDENTITY_H,iText 将总是 嵌入字体。否则,iText 将创建不符合 ISO-32000-1 的 PDF。更正确的做法是:

BaseFont.CreateFont(fontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

这并不是很重要,因为 iText 会忽略您的错误并无论如何嵌入字体,即使您告诉 iText 不要嵌入它。这就是您的代码在您的机器上正常工作的原因。

您说相同的代码在 IIS 上不起作用。我假设 fontPathARIALUNI.TTF 不会在 IIS 上生成字体。也许字体丢失了;也许 IIS 无法访问该字体。在这种情况下,将抛出错误并遇到以下行:

return BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

这一行也没有意义,因为 BaseFont.IDENTITY_H 不能与 BaseFont.TIMES_ROMAN 结合使用。此外:Times-Roman 不包含任何阿拉伯字形,除非您提供 PFB 文件和 AFM 文件,否则您无法嵌入 Times-Roman。

您的问题的解决方案是确保 ArialUni.ttf 存在于您的服务器上,或者您提供另一种支持阿拉伯语的字体。