1
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
4

2 回答 2

4

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

您应该通过使用一些不执行重定向的 URL 进行测试来验证这一点。

于 2013-03-08T07:49:28.150 回答
0

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

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