2012-07-21 112 views
2

我正在使用Rails 3.2.6編寫一個網站,它需要能夠在網站上顯示數學格式。爲了完成這項工作,我使用了完美渲染數學的mathjax-rails gem,例如questions/1。但是,我希望用戶能夠將包含數學內容的問題下載爲PDF。我已經做了大量的搜索和擺弄我的應用程序,最接近的解決方案是wkhtmltopdf和wicked_pdf gem。這起作用,因爲創建了一個保存到用戶計算機的PDF。但是,數學不能正確渲染,因爲我認爲mathjax實際上並沒有處理它。使用MathJax和wkhtmltopdf在Rails中生成PDF

已經做了一些閱讀,我想我找到了答案其他地方它說的延遲添加到控制器給mathjax機會做它的神奇:

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

儘管如此,這並不或者我最終得到的PDF包含在如下內容中:

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

而不是格式化的數學。有沒有人有任何線索,我如何才能得到這個工作?

在此先感謝。

+0

嘿,這個問題的任何更新? – Nenotlep 2013-11-04 08:44:50

回答

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

我終於解決了它這樣的,唯一的事情是我用cdn代替了寶石:

這是我的show動作控制器:

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 /視圖/佈局/應用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模板,在我的情況「考試/ show.pdf .erb「在爲你的pdf設計的應用程序佈局中,cdn被加載到佈局中,你只需要給wickedpdf一個延遲javascript處理的選項,以便mathjax有足夠的時間來處理頁面。

希望它有幫助。

UPDATE

彼得Krautzberger提到,cdn.mathjax.org被關閉,由於預算的問題。解決方案將保持不變,您只需從您的項目內部加載mathjax或使用另一個cdn。你可以在這裏找到一些cdn選項:https://www.mathjax.org/cdn-shutting-down/

+0

未來的注意事項:cdn.mathjax.org即將結束其生命週期,請查看https://www.mathjax.org/cdn-shutting-down/獲取遷移提示。 – 2017-04-11 15:40:35

+0

很高興知道,非常感謝!我想我們將不得不下載腳本或使用其他cdn,無論如何,我認爲解決方案將保持幾乎相同 – Dazt 2017-04-12 15:55:12

+0

對。但是,也許你可以更新答案,以便其他人在以後重用它,將來不會失敗。 – 2017-04-12 16:15:34