标签: xhtml2pdf

Django/Python:用适当的语言生成pdf

我在我的Django应用程序中使用Pisa/xhtml2pdf从HTML源生成pdf.那是:

  1. 我生成格式化所有'打印'东西的HTML文件(例如分页符,页眉,页脚等)
  2. 我使用Pisa将此HTML转换为pdf

这个过程还可以,但速度很慢(特别是在处理长表时),我必须根据Pisa功能/限制使用HTML/CSS.

问题是:这是从Web应用程序生成pdf的正确方法(即创建HTML然后将其转换为pdf)还是有更直接的方法,即用更合适的语言"编写"pdf?

python django pdf-generation pisa xhtml2pdf

18
推荐指数
2
解决办法
3067
查看次数

使用Python/Flask将html转换为pdf

我想使用Python + Flask从html生成pdf文件.为此,我使用xhtml2pdf.这是我的代码:

def main():
    pdf = StringIO()
    pdf = create_pdf(render_template('cvTemplate.html', user=user))
    pdf_out = pdf.getvalue()
    response = make_response(pdf_out)
    return response

def create_pdf(pdf_data):
    pdf = StringIO()
    pisa.CreatePDF(StringIO(pdf_data.encode('utf-8')), pdf)
    return pdf
Run Code Online (Sandbox Code Playgroud)

在这个代码文件中即时生成.但!xhtml2pdf不支持CSS中的许多样式,因为正确标记页面存在这个大问题.我发现了另一种乐器(wkhtmltopdf).但是当我写下这样的话:

pdf = StringIO()
data = render_template('cvTemplate1.html', user=user)
WKhtmlToPdf(data.encode('utf-8'), pdf)
return pdf
Run Code Online (Sandbox Code Playgroud)

被引发的错误:

AttributeError: 'cStringIO.StringO' object has no attribute 'rfind'
Run Code Online (Sandbox Code Playgroud)

我的问题是如何在Flask中使用wkhtmltopdf(在运行中生成文件)将html转换为pdf?

提前感谢您的回答.

python pdf wkhtmltopdf flask xhtml2pdf

12
推荐指数
3
解决办法
2万
查看次数

xhtml2pdf ImportError - Django

我安装xhtml2pdf使用pip与Django的使用.我收到以下ImportError:

Reportlab Toolkit Version 2.2 or higher needed
Run Code Online (Sandbox Code Playgroud)

但我有reportlab 3.0

>>> import reportlab
>>> print reportlab.Version                                                                                                                                                                                                                 
3.0
Run Code Online (Sandbox Code Playgroud)

我发现这个try catch块中__init__.pyxhtml2pdf:

REQUIRED_INFO = """
****************************************************
IMPORT ERROR!
%s
****************************************************

The following Python packages are required for PISA:
- Reportlab Toolkit >= 2.2 <http://www.reportlab.org/>
- HTML5lib >= 0.11.1 <http://code.google.com/p/html5lib/>

Optional packages:
- pyPDF <http://pybrary.net/pyPdf/>
- PIL <http://www.pythonware.com/products/pil/>

""".lstrip()

log = logging.getLogger(__name__)

try:
    from xhtml2pdf.util import REPORTLAB22

    if not REPORTLAB22:
        raise ImportError, "Reportlab Toolkit Version 2.2 …
Run Code Online (Sandbox Code Playgroud)

python django pip reportlab xhtml2pdf

10
推荐指数
1
解决办法
6976
查看次数

比萨pdf转换器使用大型表格非常慢

我正在使用Pisa将HTML转换为PDF(在Django项目中).处理跨越多个页面的表时,它非常慢:

一个200行的表需要150秒才能转换,而如果我把它分成更小的表需要15秒.

是否有建议由比萨处理的HTML表的提示或最佳实践?

django pdf-generation html-table pisa xhtml2pdf

8
推荐指数
1
解决办法
1994
查看次数

AttributeError:'NoneType'对象没有属性'app'

以下代码给出错误:

Traceback (most recent call last):
  File "pdf.py", line 14, in <module>
    create_pdf(render_template('templates.htm'))
  File "/usr/local/lib/python2.7/dist-packages/flask/templating.py", line 123, in render_template
    ctx.app.update_template_context(context)
AttributeError: 'NoneType' object has no attribute 'app'
Run Code Online (Sandbox Code Playgroud)

码:

from xhtml2pdf import pisa
from StringIO import StringIO
from flask import render_template,Flask

app=Flask(__name__)
app.debug=True

@app.route("/")
def create_pdf(pdf_data):
        filename= "file.pdf"
        pdf=pisa.CreatePDF( StringIO(pdf_data),file(filename, "wb"))

if __name__ == "__main__":
        create_pdf(render_template('templates.htm'))
Run Code Online (Sandbox Code Playgroud)

python flask xhtml2pdf

8
推荐指数
4
解决办法
1万
查看次数

ReportLab的.浮动带有两列的文本

首先,我是python,reportlab,xhtml2pdf的新手.我已经用reportlab完成了我的第一个pdf文件,但是我遇到了以下问题.

我需要两列中的大文本.

首先,我创建我的画布,创建我的故事,将我的大文本作为一个段落添加到故事中,创建我的框架,最后将故事添加到框架中.

c = Canvas("local.pdf")
storyExample = []
textExample = (""" This is a very large text Lorem Ipsum ... """)
storyExample.append(Paragraph(textExample, styleText))
frameExample = Frame(0, 0, 50, 50,showBoundary=0)
frameExample.addFromList(storyExample,c)
c.showPage()
c.save()
Run Code Online (Sandbox Code Playgroud)

奇迹般有效.但我需要在两列represantation中显示文本.

现在文本只是流动我的框架像:

|aaaaaaaaaaaaaaaaaaaa|
|bbbbbbbbbbbbbbbbbbbb|
|cccccccccccccccccccc|
|dddddddddddddddddddd|
Run Code Online (Sandbox Code Playgroud)

但我需要这样:

|aaaaaaaaa  bbbbbbbbbb|
|aaaaaaaaa  cccccccccc|
|bbbbbbbbb  cccccccccc|
|bbbbbbbbb  dddddddddd|
Run Code Online (Sandbox Code Playgroud)

我希望你理解我想说的话.

python reportlab pisa xhtml2pdf

7
推荐指数
2
解决办法
6697
查看次数

xhtml2pdf 不检测 div 宽度

我正在使用 xhtml2pdf 将 html 转换为 pdf。

出于某种原因,它没有检测到任何 div 的宽度。我试过使用样式给宽度它仍然不起作用。我做错了什么?

    <html>
<head>

</head>
<body>
<style>
    div{
        width:100pt;
        height:100pt;
        border:Solid red 1pt;
    }
</style>
<div>
    WOw a pdf
</div>
</body>

</html>
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,div 没有 100px 或 100pt 的宽度。

def myview(request):
    options1 = ReportPropertyOption.objects.all()
    for option in options1:
        option.exterior_images = ReportExteriorImages.objects.filter(report = option)  
        option.interior_images = ReportInteriorImages.objects.filter(report = option)
        option.floorplan_images = ReportFloorPlanImages.objects.filter(report = option)

    html  = render_to_string('report/export.html', { 'pagesize' : 'A4', }, context_instance=RequestContext(request,{'options1':options1}))
    result = StringIO.StringIO()

    pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("UTF-8")), dest=result, link_callback=fetch_resources )
    if not pdf.err: …
Run Code Online (Sandbox Code Playgroud)

python django xhtml2pdf

7
推荐指数
0
解决办法
1207
查看次数

使用 xhtml2pdf pisa.CreatePDF() 创建 pdf 时出现 CSS 解析错误

我正在关注 xhtml2pdf 指南

我使用了示例 html 文件之一并保存为 test.html:

<html>
<head>
<style>
    @page {
        size: a4 portrait;
        @frame header_frame {           # Static Frame
            -pdf-frame-content: header_content;
            left: 50pt; width: 512pt; top: 50pt; height: 40pt;
        }
        @frame content_frame {          # Content Frame
            left: 50pt; width: 512pt; top: 90pt; height: 632pt;
        }
        @frame footer_frame {           # Another static Frame
            -pdf-frame-content: footer_content;
            left: 50pt; width: 512pt; top: 772pt; height: 20pt;
        }
    }
</style>
</head>

<body>
    <!-- Content for Static Frame 'header_frame' -->
    <div id="header_content">Lyrics-R-Us</div>

    <!-- …
Run Code Online (Sandbox Code Playgroud)

html css python pdf xhtml2pdf

7
推荐指数
2
解决办法
7081
查看次数

xhtml2pdf比萨css打破无功能

我正在使用Djang +使用xhtml2pdf.pisa使用html + css生成PDF.但是,我遇到了CSS的各种奇怪问题.

以下是我的代码:

from django.template.loader import render_to_string
import cStringIO as StringIO
import xhtml2pdf.pisa as pisa
import cgi, os
def fetch_resources(uri, rel):
    path = os.path.join(settings.STATIC_ROOT, uri.replace(settings.STATIC_URL, ""))
    return path
def test_pdf(request):
    html = render_to_string('pdf/quote_sheet.html', { 'pagesize':'A4', }, context_instance=RequestContext(request))
    result = StringIO.StringIO()
    pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("UTF-8")), dest=result, link_callback=fetch_resources)
    if not pdf.err:
        return HttpResponse(result.getvalue(), mimetype='application/pdf')
    return HttpResponse('Gremlins ate your pdf! %s' % cgi.escape(html))
Run Code Online (Sandbox Code Playgroud)

我的模板:

<!DOCTYPE HTML PUBLIC "-//W3C/DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
    {% load static from staticfiles %}
    {% load i18n …
Run Code Online (Sandbox Code Playgroud)

python django pisa xhtml2pdf

7
推荐指数
1
解决办法
3731
查看次数

“需要一个有效的文件名!” xhtml2pdf 与 Django

我的问题是:我正在使用 xhtml2pdf 库从 html 创建 pdf 文件。创建 pdf 文件后,我使用 sendgrid API 通过电子邮件将该文件发送给用户。但是,我无法在 pdf 文件中保留嵌入的图像,因为应用程序返回给我“需要有效的文件名!” 信息。我在几个地方进行了研究,但找不到解决方案。使用的代码如下。

HTML 代码:

<img src="/static/media/logo.jpg" alt="Image">
Run Code Online (Sandbox Code Playgroud)

python代码(将html转换为pdf):

def link_callback(uri, rel):
"""
Convert HTML URIs to absolute system paths so xhtml2pdf can access those
resources
"""
# use short variable names
sUrl = settings.STATIC_URL
mUrl = settings.MEDIA_URL
mRoot = settings.MEDIA_ROOT

# convert URIs to absolute system paths
if uri.startswith(mUrl):
    path = os.path.join(mRoot, uri.replace(mUrl, ""))

else:
    return uri  # handle absolute uri (ie: http://some.tld/foo.png)

# make sure that …
Run Code Online (Sandbox Code Playgroud)

django pisa python-3.x xhtml2pdf

7
推荐指数
1
解决办法
6581
查看次数