将包含mathjax标记的html转换为pdf

时间:2014-09-15 20:20:40

标签: html pdf princexml

我遇到了一个名为princexml的工具,它可以将html + css精美地转换为pdf(see this video)。有了这个,甚至可以使用完全html + css编写博士论文,最后获得一个不错的pdf输出。但似乎它不能很好地处理mathjax。我想这是因为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 个答案:

答案 0 :(得分:5)

这是因为princexml还不支持Mathjax用于其异步函数的setTimeout方法。有两种解决方法:

  1. 首先在浏览器中渲染您的HTML,例如Chrome。获取保存到html文件中的整个文档(不是源文件但是实际呈现的文档),然后将其用作prince的输入。您可以从浏览器javascript控制台获取整个呈现的文档。
  2. 第二种方法是使用像phantomjs这样的无头浏览器。也可以看看 https://web.archive.org/web/20150503191319/http://www.lelesys.com/en/media/technology/phantomjs-as-screen-capture-to-generate-image-pdf-files.html