【问题标题】:Java Generate a PDF with flying SaucerJava 使用飞碟生成 PDF
【发布时间】:2016-06-26 03:30:55
【问题描述】:

我使用的 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.

【问题讨论】:

  • 您需要找到包含com.lowagie.text.DocumentException 的jar 并将其添加到您的类路径中
  • @Scary Wombat 我也试过了,但会引发不同的错误。有很多版本的库,没有指南,我不确定要使用哪个:(
  • 是的,冲洗并重复org/xhtmlrenderer/extend/UserAgentCallback
  • @Scary Wombat 当它要求使用 2006 年和 2008 年的折旧库而不是 2015 年的库时,这无济于事。这些例子已经过时了:(
  • 然后尝试使用 apacheFOP

标签: java itext flying-saucer apache-fop


【解决方案1】:

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

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

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

请注意,我必须更改这行代码才能正常工作:

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

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

PDF 看起来像这样:

希望对你有帮助……


【讨论】:

    【解决方案2】:

    我使用的依赖与你提到的完全相同,所以这应该不是问题。

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-11-25
      • 2021-03-25
      • 2013-04-09
      • 2016-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-04
      • 2014-10-15
      相关资源
      最近更新 更多