FontFactory(lowagie),Java,在尝试使用Greek-Regular时获取java.io.EOFException

时间:2014-06-14 13:59:36

标签: java pdf fonts internationalization itext

我正在使用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)

1 个答案:

答案 0 :(得分:0)

您的问题无效,原因如下:

  1. 您在代码中使用我的名字(我是从com.lowagie包中知道的Lowagie)。这意味着您使用的是过时的iText版本,其中包含过去五年中已经修复的大量已知错误。
  2. 我在最近版本的iText 中使用您的代码段写了一个概念验证(POC),我无法重现这个问题。
  3. 对于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