我正在使用com.lowagie.text.FontFactory注册希腊字体以在PDF文件中使用。但是,在注册时我得到了java.io.EOFException。如果有人对此有任何了解,我将不胜感激。感谢
FontFactory.register("/classes/fonts/LiberationSans-Regular.ttf","Greek-Regular");
错误堆栈:
ExceptionConverter: java.io.EOFException
at com.lowagie.text.pdf.RandomAccessFileOrArray.readFully(Unknown Source)
at com.lowagie.text.pdf.RandomAccessFileOrArray.readFully(Unknown Source)
at com.lowagie.text.pdf.TrueTypeFont.readStandardString(Unknown Source)
at com.lowagie.text.pdf.TrueTypeFont.getAllNames(Unknown Source)
at com.lowagie.text.pdf.TrueTypeFont.process(Unknown Source)
at com.lowagie.text.pdf.TrueTypeFont.<init>(Unknown Source)
at com.lowagie.text.pdf.BaseFont.getAllFontNames(Unknown Source)
at com.lowagie.text.FontFactoryImp.register(Unknown Source)
at com.lowagie.text.FontFactory.register(Unknown Source)
at com.gxs.activefoundation.delegate.DefaultPdfReportDelegateImpl.<clinit>(DefaultPdfReportDelegateImpl.java:212)
答案 0 :(得分:0)
您的问题无效,原因如下:
com.lowagie
包中知道的Lowagie)。这意味着您使用的是过时的iText版本,其中包含过去五年中已经修复的大量已知错误。 对于POC,我已从此站点下载了LiberationSans-Regular.ttf:http://www.fontsquirrel.com/fonts/Liberation-Sans
我已复制粘贴您的代码段,我已经用一个简单的希腊语来编写一个名为LiberationSans
的小型独立应用。得到的PDF如下所示:LiberationSans.pdf(请检查它是否显示“Brides”的希腊字词。)
没有遇到任何例外:
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream("LiberationSans.pdf"));
document.open();
FontFactory.register("resources/fonts/LiberationSans-Regular.ttf","Greek-Regular");
Font f = FontFactory.getFont("Greek-Regular", "Cp1253", true);
Paragraph p = new Paragraph("\u039d\u03cd\u03c6\u03b5\u03c2", f);
document.add(p);
请注意,Liberation Sans不是您所声称的希腊字体。它是一种字体,包含许多字形,以及希腊字母表中的字形。另请注意,您可能希望将我的示例中的"Cp1253"
替换为BaseFont.IDENTITY_H
(这样可以生成更具面向未来的PDF文件)。
长话短说:我们建议人们不要使用旧版iText。有关详细信息,请阅读http://itextpdf.com/salesfaq。