0

我正在使用 iText 创建一个表格。
但是输出看起来非常糟糕,因为连字符似乎没有正确完成。
我已经读过这个问题How to hyphenate text?
这个例子http://itextpdf.com/sandbox/tables/HyphenationExample
在我将 itext_hyph_xml.jar 添加到我的类路径后,我在 eclipse 中尝试了这个例子。当我运行代码时没有抛出错误,但是这些行

Hyphenator h = new Hyphenator("de", "DE", 2, 2);
Hyphenation s = h.hyphenate("Leistungsscheinziffer");
System.out.println(s);

将 null 打印到控制台而不是“Lei-stungs-schein-zif-fer”或我预期的类似内容。
我尝试使用中的参数

chunk.setHyphenation(new HyphenationAuto("de", "DE", 2,2));

但是文档中的输出几乎没有什么不同。

顺便说一句,我试图开始工作的代码看起来像这样:

for(String s: interest){
        Chunk chunk = new Chunk(s,FONT[0]);
        chunk.setHyphenation(new HyphenationAuto("de", "DE", 2,3));
        table.addCell(new Phrase(chunk));

}

4

1 回答 1

0

好的,我现在自己想通了。
而且因为我在互联网上找不到答案,所以我想我会在这里分享它,所以将来可能有同样错误的任何人都不需要一周的时间来弄清楚。

似乎在类Hyphenator中 defaultHyphLocation 设置如下:

private static final String defaultHyphLocation = "com/itextpdf/text/pdf/hyphenation/hyph/";

但是itext_hyph.jar的结构是这样的:
com.lowagie.text.pdf.hyphenation.hyph
显然从jar中加载一个hyph文件肯定会失败,因为Hyphenator找不到使用的路径。我实际上认为这会导致错误,但似乎只是null在加载 hyph 文件失败时返回。
然而,调用Hyphenator.setHyphenDir("com/lowagie/text/pdf/hyphenation/hyph/");
不会像人们想象的那样改变一件事,因为它改变了错误的字符串变量。
我能想到的解决这个问题的唯一方法是根据给出的路径重新创建 itext_hyph.jarHyphenator并实际修复它。断字现在正在工作。

于 2015-09-02T06:10:21.623 回答