我终于这样解决了,唯一的问题是我使用了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/