字体(Myanmar3)无法在 iText 中正确呈现
Posted
技术标签:
【中文标题】字体(Myanmar3)无法在 iText 中正确呈现【英文标题】:Font (Myanmar3) not rendering correctly in iText 【发布时间】:2016-03-21 14:52:27 【问题描述】:在jasper-reports 部分有这个jasper-report-character-encoding-in-pdf 问题。
jasper 报告中无法解决该问题,因为它似乎是 itext 问题(使用 iText v. 5.5.4)
示例代码:
public class FontTest
/** The resulting PDF file. */
public static final String RESULT = "pdf/fontTest.pdf";
/** the text to render. */
public static final String TEST = "\u1005\u101B\u1004\u103A\u1038\u1021\u1004\u103A\u1038\u1019\u103B\u102C\u1038\u1011\u100A\u103A\u101E\u103D\u1004\u103A\u1038\u1001\u103C\u1004\u103A\u1038";
public void createPdf(String filename) throws IOException, DocumentException
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filename));
document.open();
BaseFont bf = BaseFont.createFont(
"lib/mm3.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font font = new Font(bf, 20);
ColumnText column = new ColumnText(writer.getDirectContent());
column.setSimpleColumn(36, 730, 569, 36);
column.addElement(new Paragraph(TEST, font));
column.go();
document.close();
public static void main(String[] args) throws IOException, DocumentException
new FontTest().createPdf(RESULT);
字体可以在mm3.ttf下载
会错误渲染为:
它应该呈现为(在浏览器中使用相同的ttf
)
只是出于好奇,发生了什么? (似乎某些字符,带有虚线的圆圈应该向后移动,但这没有发生)。
这是.tff
的问题还是iText 不支持这些字体?
【问题讨论】:
您看到的行为是由 iText 不支持连字引起的。您需要 iText 的下一个未发布版本之一。我们将在明年发布测试版,但仅限于客户。 @BrunoLowagie,1000 感谢您的回复,期待新版本 是否可以直接使用此版本的 iText 处理 字形?那么你只需要知道这个字体的内部 OpenType '规则',你就可以在你的代码中进行字符翻译。 .. 例如,序列\u1004\u103A
("င ်") 转换为字形索引109
158
,这些在链接上下文查找中被引用。查找 (Lookup #54) 将字形索引 158
更改为字形索引 233
并保持其他字符不变。字形索引 233
没有分配给它的 Unicode 代码点,因此您确实需要在字形索引之间进行转换,并且能够在呈现文本字符串时引用这些索引。
@Jongware 感谢您的 cmets,我将研究是否以及如何在 itext 中直接访问字形(已经看到这个开放问题 ***.com/questions/33748186/…)。
【参考方案1】:
将 Bruno Lowagie(itext 的原始开发者)评论转换为答案(社区 wiki)
您看到的行为是由 iText 不支持连字造成的。 (当前版本在github.com5.5.8)
您需要 iText 的下一个未发布版本之一。我们将于明年(2016 年)发布测试版,但仅限客户使用
感谢@Rad Lexus 提供的一些赏金,关于在 iText 中直接访问 openType 字形的其他问题有一个答案Accessing OpenType glyph variants in iText
【讨论】:
我编辑了你的答案,因为官方下载页面在 GitHub 上。 Sourceforge 只是一个遗留备份。 它不是我的,是每个人的:) 我们现在是 5.5.9,但这主要是一个错误修复版本。不是布鲁诺提到的新版本。【参考方案2】:请尝试以下代码,
string ZawgyiOnePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "ZawgyiOne.ttf");
BaseFont ZawgyiOneBaseFont = BaseFont.CreateFont(ZawgyiOnePath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
iTextSharp.text.Font ZawgyiOneFont = new iTextSharp.text.Font(ZawgyiOneBaseFont, 9);
【讨论】:
以上是关于字体(Myanmar3)无法在 iText 中正确呈现的主要内容,如果未能解决你的问题,请参考以下文章