错误:'文件过早结束'。

时间:2013-03-08 07:35:43

标签: java grails pdf-generation itext

import java.io.*;
import com.lowagie.text.DocumentException;
import org.xhtmlrenderer.pdf.ITextRenderer;

public class FirstDoc {

    public static void main(String[] args) 
        throws IOException, DocumentException {

        String url= "http://www.facebook.com";

        String outputFile = "firstdoc.pdf";
        OutputStream os = new FileOutputStream(outputFile);

        ITextRenderer renderer = new ITextRenderer();
        renderer.setDocument(url);
        renderer.layout();
        renderer.createPDF(os);

        os.close();
    }
}

但是我收到了这个错误

> ERROR:  'Premature end of file.'
Exception in thread "main" org.xhtmlrenderer.util.XRRuntimeException: Can't load the XML resource (using TRaX transformer). org.xml.sax.SAXParseException: Premature end of file.
at org.xhtmlrenderer.resource.XMLResource$XMLResourceBuilder.createXMLResource(XMLResource.java:191)
at org.xhtmlrenderer.resource.XMLResource.load(XMLResource.java:71)
at org.xhtmlrenderer.swing.NaiveUserAgent.getXMLResource(NaiveUserAgent.java:205)
at org.xhtmlrenderer.pdf.ITextRenderer.loadDocument(ITextRenderer.java:102)
at org.xhtmlrenderer.pdf.ITextRenderer.setDocument(ITextRenderer.java:106)
at com.test.java.FirstDoc.main(FirstDoc.java:17)

Caused by: javax.xml.transform.TransformerException: org.xml.sax.SAXParseException: Premature end of file.
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:720)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:313)
at org.xhtmlrenderer.resource.XMLResource$XMLResourceBuilder.createXMLResource(XMLResource.java:189)
... 5 more
Caused by: org.xml.sax.SAXParseException: Premature end of file.
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1231)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:637)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:708)
... 7 more

2 个答案:

答案 0 :(得分:4)

很可能http://www.facebook.com不会返回HTML文档,而是HTTP重定向或其他内容,而ITextRenderer可能不支持该文档。

您应该通过测试一些没有重定向的URL来验证这一点。

答案 1 :(得分:0)

如果您在使用IText将第二个签名添加到pdf文件时收到文件过早错误,请确保您正在执行以下操作。

  • 第二个签名的名称应与第一个签名不同
  • 应在附加模式中添加签名。例如:(PdfStamper.createSignature(reader,os,'\ 0',null,append);
  • 确保pdf认证级别应支持添加第二个签名字段。例如:(appearance.setCertificationLevel(PdfSignatureAppearance.NOT_CERTIFIED))
  • 如果是可见的签名,请确保第二个签名在视觉上位于不同的位置。