2

我正在使用 Rails 3.2.6 编写一个网站,它需要能够在网站上显示数学格式。为了完成这项工作,我使用了 mathjax-rails gem,它可以完美地渲染数学,例如,questions/1。但是,我希望用户能够以 PDF 格式下载包含数学内容的问题。我已经对我的应用程序进行了大量搜索和摆弄,最接近解决方案的是 wkhtmltopdf 和 wicked_pdf gem。这是可行的,因为创建了一个 PDF 并将其保存到用户的计算机上。但是,数学没有正确呈现,因为我认为 mathjax 实际上并没有处理它。

做了一些阅读后,我想我在其他地方找到了答案,它说要向控制器添加延迟,让 mathjax 有机会发挥它的魔力:

format.pdf do
    render :pdf => 'filename',
          :javascript_delay=>5000
  end

但是,这也不起作用,我最终得到了一个包含以下内容的 PDF:

[itex]3H_{2~(g)} + 2N_{2~(g)} ⇌ NH_{3~(g)}[/itex]

而不是格式化的数学。有没有人知道我如何才能让它工作?

提前致谢。

4

2 回答 2

2

这甚至有点傻,但是您尝试过更长的延迟吗?

使用 wkhtmltopdf 这有效:

wkhtmltopdf.exe --javascript-delay 15000 http://www.mathjax.org/demos/mathml-samples/ MML.pdf && MML.pdf

这不起作用

wkhtmltopdf.exe --javascript-delay 5000 http://www.mathjax.org/demos/mathml-samples/ MML.pdf && MML.pdf

TeX 样本也一样

于 2012-10-01T09:43:24.757 回答
1

我终于这样解决了,唯一的问题是我使用了cdn而不是gem:

这是我在控制器中的显示操作:

def show
  @example = Exam.find(params[:id])
  respond_to do |format|
    format.html
    format.pdf do
      render pdf: @exam.name,
                  template: "exams/show.pdf.erb", // The template that you want to convert to pdf
                  :javascript_delay=>5000,
                  locals: {:exam => @exam},
                  layout: "application-pdf.html.erb"
    end
  end
end

在 app/views/layouts/application-pdf.html.erb 内部:

<!DOCTYPE html>
<html>
<head>
  <title>MathTest</title>
  <meta charset='utf-8' />
  <%= stylesheet_link_tag "https://fonts.googleapis.com/icon?family=Material+Icons" %>
  <script type="text/x-mathjax-config">
    MathJax.Hub.Config({
      extensions: ["tex2jax.js"],
      jax: ["input/TeX", "output/HTML-CSS"],
      tex2jax: {
        inlineMath: [ ['$','$'], ["\\(","\\)"] ],
        displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
        processEscapes: true
      },
      "HTML-CSS": { availableFonts: ["TeX"] }
    });
  </script>
  <script type="text/javascript" async
          src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-MML-AM_CHTML">
  </script>
</head>
<body>

<%= yield %>

</body>
</html>

关键是包装你的pdf模板,在我的例子中,“exams/show.pdf.erb”在为你的pdf设计的应用程序布局中,cdn被加载到布局中,你只需要给wickedpdf选项来延迟javascript处理,因此 mathjax 有足够的时间来处理页面。

希望能帮助到你。

更新

正如 Peter Krautzberger 所说,cdn.mathjax.org 由于预算问题正在关闭。解决方案将保持不变,您只需在内部从项目中加载 mathjax 或使用另一个 cdn。你可以在这里找到一些cdn替代品:https ://www.mathjax.org/cdn-shutting-down/

于 2016-11-07T03:49:19.817 回答