我有一个包含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文档(包括法语和阿拉伯语文本) 在我调用生成pdf但没有响应的方法时,在IIS 7中部署web api项目之后 当我使用Postmane直接调用api时,我看到这样的消息: “消息”:“发生错误。”, “ExceptionMessage”:Identity-H不是受支持的编码名称“
我不知道问题是在IIS中还是我必须更改IDENTITY_H字体? 有人可以帮忙吗?
答案 0 :(得分:0)
这没有意义:
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上不起作用。我假设fontPath
到ARIALUNI.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
,或者您提供另一种支持阿拉伯语的字体。