html в pdf, включая преобразование MathJax

Как создать PDF-файл с содержимым html (DOM) с учетом css styles html? HTML содержит формулы MathJax, отображаемые с помощью javascript. Я хотел бы, чтобы в pdf отображались формулы в том виде, в каком они видны в браузере, используя MathJax. Кроме того, HTML содержит мало изображений.
Какая библиотека Java с открытым исходным кодом помогает создать такой PDF-файл из содержимого HTML? Я просмотрел Apache PdfBox, но не нашел решения. Решение должно быть библиотекой с открытым исходным кодом для использования в коммерческих приложениях.

ИЗМЕНИТЬ Содержимое DOM создается динамически на стороне сервера и не передается в браузер.
FlyingSaucer близок к тому, что мне нужно. Однако это не поддерживает java-скрипт, т.е. html с MathJax не может быть (правильно) преобразован в pdf.


person suman j    schedule 02.10.2014    source источник


Ответы (1)


Существуют различные средства визуализации PDF на основе WebKit, которые поддерживают JavaScript. Лучшее, что я нашел, это функция захвата экрана PhantomJS.

http://phantomjs.org/screen-capture.html

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


Обновление
Вот действительно простой пример, который считывает HTML из стандартного ввода и сохраняет файл PDF на диск:

// render.js
var page = new WebPage();
page.content = require("system").stdin.read();

setTimeout( function(){
    page.render( 'export.pdf' );
    phantom.exit(0);
}, 100 ); // <- wait for JS

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

~/bin/phantomjs render.js < sample.html
person Tim    schedule 02.10.2014
comment
Спасибо. Содержимое DOM динамически генерируется на стороне сервера и не передается в браузер. - person suman j; 02.10.2014
comment
Ему не нужен браузер. В этом суть. Вы просто передаете ему HTML, и он возвращает вам PDF - person Tim; 02.10.2014
comment
Прохладный. Я изучу его эквивалент в Java. Мое время выполнения приложения - JVM. (веб-приложение, развернутое на Tomcat) - person suman j; 02.10.2014