Конвертировать HTML, содержащий разметки mathjax, в pdf
Я сталкивался с инструментом princexml, который может красиво конвертировать html+css в pdf ( см. Это видео). При этом можно даже написать кандидатскую диссертацию, используя полностью html+css, и в итоге получить хороший вывод в формате PDF. Но, похоже, он плохо справляется с матемаксом. Я предполагаю, что это потому, что часть mathjax будет отображаться в браузере в первую очередь.
Итак, у меня есть простой файл HTML, как это:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>test math</title>
<style type="text/css">
</style>
<script src='http://cdn.mathjax.org/mathjax/latest/MathJax.js' type='text/javascript'>
MathJax.Hub.Config({
HTML: ["input/TeX","output/HTML-CSS"],
TeX: { extensions: ["AMSmath.js","AMSsymbols.js"],
equationNumbers: { autoNumber: "AMS" } },
extensions: ["tex2jax.js"],
jax: ["input/TeX","output/HTML-CSS"],
tex2jax: { inlineMath: [ ['$','$'], ["\\(","\\)"] ],
displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
processEscapes: true },
"HTML-CSS": { availableFonts: ["TeX"],
linebreaks: { automatic: true } }
});
</script>
</head>
<body>
$x^2 + y^2 = 1$
</body>
</html>
После преобразования с помощью princexml:
prince --javascript x.html -o x.pdf
Уравнение отображается дословно в формате PDF.
Есть ли способ сделать эту работу?
1 ответ
Это потому, что princexml еще не поддерживает метод setTimeout, который Mathjax использует для своих асинхронных функций. Есть два обходных пути:
- Сначала визуализируйте ваш HTML в браузере, например, в Chrome. Получите весь документ (не исходный, а фактически обработанный документ), сохраненный в html-файле, а затем используйте его в качестве входных данных для принца. Вы можете получить весь визуализированный документ из консоли браузера javascript.
- Второй способ заключается в использовании браузера без заголовка, как phantomjs. Смотрите также http://www.lelesys.com/en/media/technology/phantomjs-as-screen-capture-to-generate-image-pdf-files.html