我正在使用rails插件acts_as_flying_saucer生成pdf,但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(我可以保存好),当我尝试打开它时,我从这篇文章的顶部收到错误消息。< / p>
转到页面的标准网页版本(/ help / all)可以正常工作。我想也许我的java vm没有设置但似乎没问题:
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)
我现在没有想法......感谢任何建议!最大
编辑:刚刚注意到我的mongrel运行选项卡中有一堆错误输出:
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:这是我正在尝试转换的HTML
<!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 :(得分:1)
您是否solve this problem a year ago将x_sendfile
设为false?
答案 1 :(得分:1)
我解决了这个问题,结果证明这很简单(而且很愚蠢)。问题是这样的:我指的是我想以正常的方式使用的布局,
:layout => "help_pdf",
但是,看起来你必须拼出完整的文件名:当我把它改成这个时,它起作用了:
:layout => "help_pdf.html.erb",
ARRRGGHHH !!!!!!好吧,至少它现在正在运作。非常感谢约翰看了。
最大