2011-09-28 144 views
3

我试图在Django中将HTML转换为PDF文档并且没有成功。使用Python将HTML转换为PDF

我尝试过使用wkhtmltopdf 0.9.9,但是Apache会抛出wkhtmltopdf无法连接到服务器的错误。当我直接使用wkhtmltopdf时,它运行得非常好,并将HTML转换为PDF文档。

我也尝试过使用unoconv,但是呈现的PDF文件没有应用任何CSS。我也尝试使用xhtml2pdf。我又一次面临同样的问题;呈现的PDF文件没有应用任何CSS样式。我已经花了更多的时间和昨天晚上试图解决这个问题,我仍然没有接近解决问题。

让我知道如果你需要更多的信息

回答

4

为Django配置Pisa不应该是too hard

有在网络上真正的几个例子,告诉你如何做到这一点和 解释如何在你的模板链接到外部资源:

你的情况,你应该尝试的第一篇博客文章中提到的链接回调函数:

def fetch_resources(uri, rel): 
    """ 
    Callback to allow pisa/reportlab to retrieve Images,Stylesheets, etc. 
    `uri` is the href attribute from the html link element. 
    `rel` gives a relative path, but it's not used here. 

    """ 
    path = os.path.join(settings.MEDIA_ROOT, uri.replace(settings.MEDIA_URL, "")) 
    return path 

对于较新的Django的版本你应该使用STATIC_ROOT代替MEDIA_ROOT

然后在使用fetch resources相应的渲染方法:

pdf = pisa.pisaDocument(StringIO.StringIO(
     html.encode("UTF-8")), 
     result, 
     link_callback=fetch_resources, 
     encoding="utf-8") 
0

我建议你使用比萨,pypdf和html5lib组合,它为我工作。

+0

javascript调用如何?我无法做到这一点。 – Mutant

0

一种可能的,但并非如此优雅的解决方案,是运行一个小的脚本,其经由无头浏览器组件呈现HTML(在Linux的webkit/xvfb的)的然后将其保存为pdf。

+0

这不是wkhtmltopdf? – dfrankow