2016-03-11 7 views
0

Сосудом я использую из мавена repoJava Генерация PDF с летающим блюдцем

Кода я тестирование от предыдущего стека 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 

кто-нибудь может пролить некоторый свет на это, или предложить лучший способ для создания PDF-документа в Ява? У меня есть документы XML и XHTML.

EDIT Когда я добавить библиотеку com.lowagie.text из repo

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 

Am я даже используя правильные библиотеки/самые современные из них?

Может ли кто-нибудь, кто имеет самые последние библиотеки или знает репо, где они хранятся, связывает их?

EDIT 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. 
+0

Вам нужно найти банку, содержащую '' com.lowagie.text.DocumentException и добавить это к вашему пути к классам –

+0

@Scary Wombat, я также пробовал это, выдает другую ошибку. Существует много версий библиотек и нет руководства, которое я не уверен, что использовать :( – codeCompiler77

+0

Да, ополосните и повторите попытку для 'org/xhtmlrenderer/extend/UserAgentCallback' –

ответ

0

Я использую ту же самую зависимость, что и вы упомянули, так что это не должно быть проблемой.

Однако, вы определенно используете метод setDocumentFromString неправильным способом. Вместо:

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

входной параметр должен быть сам HTML, а не путь к нему. Как это:

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

В качестве альтернативы, (и предпочтительно) использовать setDocument метод, который принимает в качестве входных данных путь в виде строки или файла. see JavaDoc

1

Я создал простой проект Maven со следующим depencency:

<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

Я надеюсь, что помогает ...


Смежные вопросы