Java HTML-> PDF Решения? - PullRequest
       4

Java HTML-> PDF Решения?

3 голосов
/ 06 апреля 2011

В настоящее время я работаю над созданием отчета на основе PDF на Java.Я посмотрел на iText и BIRT, но мне кажется, что нужно приложить немало усилий, чтобы узнать их API, и то, что я пытаюсь найти, - это решение, которое позволит мне сгенерировать отчет в HTMl (что я уже знаю) и вывести его в PDF.Кто-нибудь может предложить несколько возможных решений?- Спасибо!- Дункан Кребс

Ответы [ 5 ]

3 голосов
/ 06 апреля 2011

Летающая тарелка преобразует XHTML в PDF.Это просто супер.Это не быстро.Сбой, если в вашем синтаксисе XHTML есть небольшая ошибка.(например, <br>, когда должно быть <br/>)

Это ссылка, с которой я начал.Кажется, он использует iText, но как только у вас все заработает, просто измените HTML, и он обновится.

http://today.java.net/pub/a/today/2007/06/26/generating-pdfs-with-flying-saucer-and-itext.html

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

2 голосов
/ 05 ноября 2012

Если ваш исходный HTML-код стилизован с помощью CSS и не обязательно правильно сформирован, попробуйте библиотеку PD4ML (бесплатно для некоммерческого использования).

1 голос
/ 11 мая 2016

Используя phantomjs , вы можете очень легко конвертировать HTML в PDF:

import org.openqa.selenium.phantomjs.PhantomJSDriver;
import org.openqa.selenium.phantomjs.PhantomJSDriverService;
import org.openqa.selenium.remote.DesiredCapabilities;

public class Screenshot {

  public static final String SCRIPT = "var page = require('webpage').create();\n" +
          "page.open('@@URL@@', function() {\n" +
          "  page.render('@@FILE@@');\n" +
          "});\n";

  public static void main(String[] args) {

    final String url = args[0];
    final String file = args[1];
    final String script = SCRIPT.replace("@@URL@@", url).replace("@@FILE@@", file);

    final DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY,
                               "/path/to/phantomjs/bin/phantomjs");
    try {
      PhantomJSDriver phantomJSDriver = new PhantomJSDriver(capabilities);
      phantomJSDriver.executePhantomJS(script);
    } finally {
      phantomJSDriver.close();
    }
  }

}

Если имя file оканчивается на .pdf, веб-страница будет сохранена в формате PDF. Phantomjs также поддерживает вывод PNG, JPG и GIF.

Это очень простой пример, в целом процесс скриншота очень настраиваемый (установить размер области просмотра, включить / отключить JavaScript и т. Д.). Посмотрите на страницу PhantomJS на экране захвата для получения дополнительной информации.

1 голос
/ 04 декабря 2014

Я могу порекомендовать JodConverter, он использует OpenOffice в режиме без головы

1 установка openoffice (для linux "zypper install libreoffice")

2 WIN поместил его в переменную пути, чтобы "soffice" мог запускаться везде, для меня это был "C: \ Program Files (x86) \ LibreOffice 4 \ program"

3 LINUX убедитесь, что пользователь, который запускает процесс Java, владеет своим домашним каталогом, потому что openoffice должен хранить там конфиги, для меня tomcat запустил процесс, но его домашний каталог принадлежал root

4 добавьте jodconverter-lib в ваш проект java

<dependency>
    <groupId>com.artofsolving</groupId>
    <artifactId>jodconverter</artifactId>
    <version>2.2.1</version>
</dependency>

1012 * новообращенный *

// ensure open office is running
String[] commands = new String[] {"soffice","--headless","--accept=socket,host=localhost,port=8100;urp;"};
Runtime.getRuntime().exec(commands);

// convert
String html = "<div>hey there</div>";
ByteArrayOutputStream pdfOutputStream = new ByteArrayOutputStream();
DefaultDocumentFormatRegistry defaultDocumentFormatRegistry = new DefaultDocumentFormatRegistry();
OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
connection.connect();
DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
converter.convert(IOUtils.toInputStream(html, Charset.forName("UTF-8")), defaultDocumentFormatRegistry.getFormatByFileExtension("html"), pdfOutputStream, defaultDocumentFormatRegistry.getFormatByFileExtension("pdf"));
connection.disconnect();
byte[] pdfBytes = pdfOutputStream.toByteArray();
0 голосов
/ 29 декабря 2014

Браузер JavaFx WebKit можно использовать для преобразования html в pdf. Для Windows установите pdf24 драйвер принтера, а для Linux используйте cups-pdf . После установки используйте print метод WebEngine.

Если вам подходит внешняя библиотека, вы можете легко использовать ui4j для печати веб-страницы в pdf.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...