我正在使用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
然而,这也不起作用,我最终得到的内容包括:
[itex] 3H_ {2~(g)} + 2N_ {2~(g)}⇌NH_{3~(g)} [/ itex]
而不是格式化数学。有没有人知道如何让这个工作起来?
提前致谢。
答案 0 :(得分: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样本也是如此
答案 1 :(得分:1)
我终于解决了这个问题,唯一的问题是我使用的是cdn而不是gem:
这是我在控制器中的show动作:
import * as AWS from 'aws-sdk';
//constant
import DefaultValue from '../../Constants/DefaultValue';
AWS.config.update({
region: DefaultValue.REGION,
credentials: new AWS.Credentials(DefaultValue.ACCESS_KEY_ID, DefaultValue.SECRET_KEY)
});
class UploadFile extends React.Component<any,any> {
s3: any;
constructor() {
super();
this.s3 = new AWS.S3({apiVersion: '2016-11-07'});
}
}
在app / views / layouts / application-pdf.html.erb:
中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
关键是要包装你的pdf模板,在我的情况下&#34; exams / show.pdf.erb&#34;在为你的pdf设计的应用程序布局中,cdn被加载到布局中,你只需要为wickedpdf提供延迟javascript处理的选项,这样mathjax就有足够的时间来处理页面。
希望它有所帮助。
<强>更新强>
正如Peter Krautzberger所说,由于预算问题,cdn.mathjax.org正在关闭。解决方案将保持不变,您只需在内部从项目加载mathjax或使用另一个cdn。你可以在这里找到一些cdn替代品:https://www.mathjax.org/cdn-shutting-down/