【发布时间】:2016-08-07 22:40:15
【问题描述】:
这是对这个问题How to export fonts in Gujarati-Indian Language to pdf?、@amedee-van-gasse、iText 的 QA 工程师asked me 的后续跟进,以发布一个特定于 itext 的问题以及相关的 mcve。
为什么这个 unicode \u0ab9\u0abf\u0aaa\u0acd\u0ab8 序列没有正确呈现?
应该是这样渲染的:
હિપ્સ ,也用unicode-converter测试过
但是这段代码(示例改编形式iText: Chapter 11: Choosing the right font)
public class FontTest {
/** The resulting PDF file. */
public static final String RESULT = "fontTest.pdf";
/** the text to render. */
public static final String TEST = "\u0ab9\u0abf\u0aaa\u0acd\u0ab8";
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(
"ARIALUNI.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();
System.out.println("DONE");
}
public static void main(String[] args) throws IOException, DocumentException {
new FontTest().createPdf(RESULT);
}
}
生成此结果:
看起来不一样
હિપ્સ
我用 itextpdf-5.5.4.jar,itextpdf-5.5.9.jar 和 itext-2.1.7.js3.jar 进行了测试(与 jasper-reports 一起分发)
使用它的字体与 MS Office ARIALUNI.TTF 一起分发,可以从这里下载 Arial Unicode MS *下载可能存在一些法律问题,请参阅 Mike 'Pomax' Kamermans 评论
【问题讨论】:
-
请注意,您的下载链接是......不是 100% 合法的。 Arial Unicode 与 Microsoft Office 免费捆绑在一起,但这并不能使字体本身免费。如果您查看fonts.com/font/monotype/arial-unicode,很明显这是一种非常昂贵的字体(如果您没有购买Office,这两个家庭需要370美元)。
-
另一个问题是这里的问题是谁 - iText 依赖什么文本整形器,您是否尝试过查看 it 在呈现 Unicode 序列和字体资源时的作用?这可以是 iText,但也可以是 iText 所依赖的任何 Java 整形器。
-
仅供参考:Guajarati 需要在应用字体自身的 OpenType 功能之前重新排序字形。该字体文件中没有可重新排序的代码;它留给渲染器软件首先对字符串进行预处理。另请参阅Microsoft's notes on Gujarati。
-
iText(Sharp) 目前不支持连字。 iTextSharp 的下一个版本(大约一周后将在班加罗尔的 Great Indian Developer Summit 上展示)将支持连字,但将添加此支持的排版插件将不会作为开源提供。我们决定让它成为一个封闭源代码的商业插件,因为太多人认为开源是“免费”的同义词(事实并非如此)。
-
感谢布鲁诺的评论,消息已收到,祝峰会好运。