Java用飞碟生成PDF

时间:2016-03-11 01:55:50

标签: java itext flying-saucer apache-fop

我正在使用的jar来自maven repo

我正在测试的代码来自之前的堆栈solution

我担心它可能会过时,因为库已经过折旧了。测试以下代码时:

import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;

import org.w3c.dom.Document;
import org.xhtmlrenderer.pdf.ITextRenderer;

public class test
{

    public static void main(String[] args)
    {
        ITextRenderer renderer = new ITextRenderer();

        // if you have html source in hand, use it to generate document object
        renderer.setDocumentFromString( "C:/Users/Goran/Documents/Documents/Development/workspace/FlyingSaucer/data/input/report.xhtml" );
        renderer.layout();

        String fileNameWithPath = "C:/Users/Goran/Documents/Documents/Development/workspace/FlyingSaucer/data/output/" + "PDF-FromHtmlString.pdf";
        FileOutputStream fos = new FileOutputStream( fileNameWithPath );
        renderer.createPDF( fos );
        fos.close();

        System.out.println( "File 2: '" + fileNameWithPath + "' created." );
    }

}

我在此行中出现以下错误:renderer.createPDF( fos );

The type com.lowagie.text.DocumentException cannot be resolved. It is indirectly referenced from required .class files

任何人都可以对此有所了解,或建议在java中创建pdf文档的最佳方法?我有XML和XHTML文档。

编辑当我从repo

添加com.lowagie.text库时
Exception in thread "main" java.lang.NoClassDefFoundError: org/xhtmlrenderer/extend/UserAgentCallback
    at test.main(test.java:16)
Caused by: java.lang.ClassNotFoundException: org.xhtmlrenderer.extend.UserAgentCallback
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 1 more

我甚至使用了正确的库/最新的库吗?

拥有最新图书馆或知道存储资料的人是否可以链接他们?

编辑2 放弃使用飞碟并按照建议使用ApacheFop的想法。目前的错误是:

Mar 10, 2016 9:58:23 PM org.apache.fop.events.LoggingEventListener processEvent
WARNING: Font "Symbol,normal,700" not found. Substituting with "Symbol,normal,400".
Mar 10, 2016 9:58:23 PM org.apache.fop.events.LoggingEventListener processEvent
WARNING: Font "ZapfDingbats,normal,700" not found. Substituting with "ZapfDingbats,normal,400".
Mar 10, 2016 9:58:23 PM org.apache.fop.events.LoggingEventListener processEvent
INFO: Rendered page #1.

2 个答案:

答案 0 :(得分:1)

我创建了一个简单的Maven项目,具有以下依赖性:

    <dependency>
        <groupId>org.xhtmlrenderer</groupId>
        <artifactId>core-renderer</artifactId>
        <version>R8</version>
    </dependency>

我创建了一个测试类,其中包含您上面发布的代码,并且能够毫无问题地编译它。这就是Eclipse显示的Maven依赖项:

enter image description here

请注意,我必须更改此行才能使代码生效:

renderer.setDocumentFromString("<html><body><strong>Hello</strong> <em>world</em>!</body></html>");

...因为字符串应该是HTML内容本身,而不是文件的路径。

PDF看起来像这样:

enter image description here

我希望有帮助...

答案 1 :(得分:0)

我正在使用与您提到的完全相同的依赖关系,因此这不应该是问题。

但是,您肯定以错误的方式使用方法setDocumentFromString。而不是:

renderer.setDocumentFromString( "C:/some/path/report.xhtml" );

输入参数必须是HTML本身,而不是它的路径。像这样:

renderer.setDocumentFromString( "<html><body>some content</body></html>" );

或者,(并且最好)使用setDocument方法,该方法将字符串或文件形式的路径作为输入。 see JavaDoc