使用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);
我正在使用运行时版v2.0.50727的iTextSharp 5.4.2.0。
我必须嵌入一些字体,因为西里尔字母和中文字母之前没有工作,但它们现在正在工作。 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;
}
答案 0 :(得分:0)
您提供的代码段是不够的。问题源于您执行EmbeddedResources.CreateDesignFont(webform);
如果Adobe Reader中未显示该字体,则表示您未嵌入该字体。也许你认为你这样做,但从PDF观众的行为来判断,你没有。
您是否可以提供文档属性的屏幕截图,更具体地说是“字体”选项卡?
<强>更新强>
我尝试编写自己的代码段,但我无法重现问题。所以我再看看你的代码,我看到你正在缓存字体,但你已经使用WINANSI
编码使用ArialMT来填写第1页上的字段.IMO(我不是有时间检查)与使用IDENTITY_H
的缓存使用相同的字体不兼容。如果你不缓存字体(为什么你会传递fontBuffer!如果你已经自己缓存了字体字节,则不需要将字体存储在缓存中),你的问题可能会得到解决。
答案 1 :(得分:0)
问题源于我使用.otf字体的事实。当我改为.ttf时,问题就消失了。