2010-08-02 82 views
1

我正在使用rails插件acts_as_flying_saucer生成pdf,但pdf不起作用:我可以保存它,但是當我嘗試打開它時,我收到以下錯誤消息:使用acts_as_flying_saucer生成pdf的問題

Unable to open document 
File type SOR File (text/plain) is not supported 

這是我的設置。我使用rails 2.3.4和acts_as_flying_saucer插件的最新版本。我有這樣的路線:

map.all_help '/help/all.:format', :controller => "help", :action => "all" 

都到這個控制器動作:

class HelpController < ApplicationController 
    acts_as_flying_saucer  

    def all 
    respond_to do |format| 
     format.html { 
     render :action => "all", :layout => "help_pdf" 
     } 
     format.js 
     format.pdf { 
     render_pdf :template => 'help/all.html.erb', 
        :layout => "help_pdf", 
       :send_file => { :filename => "my-filename.pdf", :type => "application/pdf"}  
     } 
    end  
    end 

end 

,我也定義了該MIME類型:當我去的網頁

Mime::Type.register "application/pdf", :pdf 

,/ help/all.pdf,它會生成一個0字節的pdf(我可以保存),並且當我嘗試打開它時,我會從這篇文章的頂部收到錯誤消息。

轉到頁面的標準網頁版本(/ help/all)正常工作。我想,也許我的Java虛擬機不成立,但它似乎是罰款:

max-laptop:millionaire[subjects]$ java -version 
java version "1.6.0_20" 
Java(TM) SE Runtime Environment (build 1.6.0_20-b02) 
Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode, sharing) 

我的想法在這一點...感謝您的任何建議!最大

編輯:只注意到了一堆錯誤輸出的是我的雜種運行標籤:

ERROR: 'Premature end of file.' 
Exception in thread "main" org.xhtmlrenderer.util.XRRuntimeException: Can't load the XML resource (using TRaX transformer). org.xml.sax.SAXParseException: Premature end of file. 
    at org.xhtmlrenderer.resource.XMLResource$XMLResourceBuilder.createXMLResource(XMLResource.java:191) 
    at org.xhtmlrenderer.resource.XMLResource.load(XMLResource.java:71) 
    at org.xhtmlrenderer.swing.NaiveUserAgent.getXMLResource(NaiveUserAgent.java:205) 
    at org.xhtmlrenderer.pdf.ITextRenderer.loadDocument(ITextRenderer.java:102) 
    at org.xhtmlrenderer.pdf.ITextRenderer.setDocument(ITextRenderer.java:106) 
    at Xhtml2Pdf.main(Xhtml2Pdf.java:19) 
Caused by: javax.xml.transform.TransformerException: org.xml.sax.SAXParseException: Premature end of file. 
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:719) 
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:313) 
    at org.xhtmlrenderer.resource.XMLResource$XMLResourceBuilder.createXMLResource(XMLResource.java:189) 
    ... 5 more 
Caused by: org.xml.sax.SAXParseException: Premature end of file. 
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1231) 
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:636) 
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:707) 
    ... 7 more 

我現在想知道如果有什麼問題的頁面我試圖轉換爲PDF 。我通過w3c驗證器運行了html版本的頁面,頁面驗證成功。所以,現在我又難倒...

編輯2:我想我越來越近,現在:在尋找我的日誌,我看到

Rendering help/all.html.erb 
html file: /tmp/ff4c8ff01d544500ea4bfea43e6108c1.html 
Sending X-Sendfile header /tmp/ff4c8ff01d544500ea4bfea43e6108c1.pdf 

所以,我期望的/ tmp/ff4c8ff01d544500ea4bfea43e6108c1 .html將其中的頁面的html版本,但它只是一個四行的空文本文件。難怪飛碟不能轉換它。我不知道它爲什麼保存一個空的html文件。

編輯3:這裏是我目前正試圖轉換設置x_sendfile

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
     <title>Help for Millionaire For Schools</title> 
    </head> 

    <body class="pdf"> 
     <div id="bgeffect"></div>   

    <div id="pageWrapper" class="mainHelpPages"> 

     <div id="helpContent"> 
     <div id="helpPane"> 
      <div class="inner"> 
      <p>Welcome to my pdf</p> 
      </div> 
     </div> 
     </div>  
    </div> 

    </body> 

</html> 
+0

你可以發佈你試圖轉換爲PDF的頁面生成的XHTML嗎? – 2010-08-02 16:28:54

+0

已添加編輯3.乾杯 – 2010-08-02 16:43:10

回答

1

你不是solve this problem a year ago的HTML?

+0

很好Google搜索john :)是的,然後工作,但現在不工作。這是與一個不同的應用程序和一個不同的系統,我似乎無法得到它的工作,無論我設置x_sendfile。 – 2010-08-02 15:59:48

+0

我能看到的唯一的另一個區別是,你的工作版本有':disposition =>'inline' - 你試過嗎? – 2010-08-02 16:09:36

+0

是的,試過了。我已經盡了各種辦法想辦法讓它和我之前的做法完全一樣(相同的佈局,相同的文檔類型),但都無濟於事。 – 2010-08-02 16:28:13

1

我解決了這個問題,結果真的很簡單(和啞巴)。問題是這樣的:我指着我想在正常railsy方式使用的佈局,

:layout => "help_pdf", 

但是,它看起來像你必須拼寫出完整的文件名:當我把它改成這樣,它的工作:

:layout => "help_pdf.html.erb", 

ARRRGGHHH !!!!!!至少現在它正在工作。感謝John看了一眼。

max