标签: reportlab

Python ReportLab使用splitfirst/splitlast

我正在尝试使用Python和ReportLab 2.2来创建PDF报告.
根据用户指南,

特殊TableStyle Indeces [原文如此]

在任何样式命令中,第一行索引可以设置为特殊字符串'splitlast'或'splitfirst'之一,以指示该样式应仅用于拆分表的最后一行或延续的第一行.这允许在分割周围分割具有更好效果的表.

我尝试过使用多种样式元素,包括:

('TEXTCOLOR', (0, 'splitfirst'), (1, 'splitfirst'), colors.black) 
('TEXTCOLOR', (0, 'splitfirst'), (1, 0), colors.black) 
('TEXTCOLOR', (0, 'splitfirst'), (1, -1), colors.black) 
Run Code Online (Sandbox Code Playgroud)

这些似乎都不起作用.第一个生成带有消息的TypeError:

TypeError: cannot concatenate 'str' and 'int' objects
Run Code Online (Sandbox Code Playgroud)

后两个生成TypeErrors并带有以下消息:

TypeError: an integer is required
Run Code Online (Sandbox Code Playgroud)

这个功能是完全破坏还是我做错了什么?如果是后者,我做错了什么?

python reportlab

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

IOError:在Linux上的ReportLab中使用matplotlib PNG"解码器zip不可用",适用于Windows

我正在使用ReportLab打印matplotlib生成的图表.

我能够在我的Windows开发机器上做到这一点没有问题.但是,当我部署到Ubuntu服务器时,渲染失败并显示错误.我假设我错过了一个Python模块,但我不知道哪个模块.我相信我的开发机器和服务器上的Python,matplotlib,ReportLab和PIL的版本是相同的.

将matplotlib图(称为图表)转换为PNG并返回的代码:

img_stream = StringIO.StringIO()
chart.savefig(img_stream, format = 'png')
img_stream.seek(0)

return img_stream
Run Code Online (Sandbox Code Playgroud)

使用图片的代码:

    res_img = charts.CreateProjectionChart(doc.fund) #calls above code
    if res_img:
        img = ImageReader(res_img)
        canvas.drawImage(img, FromLeft(first_col), FromTop(3.5, 2), width - (.1 * inch), 1.75 * inch, preserveAspectRatio=True, anchor='c')
Run Code Online (Sandbox Code Playgroud)

在Windows上运行时,这是有效的.在Linux上运行时会产生以下错误:

  File "/home/web-server/reports.py", line 913, in FirstPageSetup
    canvas.drawImage(img, FromLeft(first_col), FromTop(3.5, 2), width - (.1 * inch), 1.75 * inch, preserveAspectRatio=True, anchor='c')
  File "/usr/local/lib/python2.7/dist-packages/reportlab-2.5-py2.7-linux-x86_64.egg/reportlab/pdfgen/canvas.py", line 840, in drawImage
    rawdata = image.getRGBData()
  File "/usr/local/lib/python2.7/dist-packages/reportlab-2.5-py2.7-linux-x86_64.egg/reportlab/lib/utils.py", line 658, in getRGBData
    annotateException('\nidentity=%s'%self.identity())
  File "/usr/local/lib/python2.7/dist-packages/reportlab-2.5-py2.7-linux-x86_64.egg/reportlab/lib/utils.py", line 648, …
Run Code Online (Sandbox Code Playgroud)

python png reportlab python-imaging-library

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

如何使用Reportlab将生成的PDF保存到App Engine Python中的数据存储区

我有一个使用Reportlab库生成PDF文件的方法:

def obtenerPDFNuevoPedido(self, handler,rsUsuarioPedido, rsPedido):
    handler.response.headers['Content-Type'] = 'application/pdf'
    handler.response.headers['Content-Disposition'] = 'attachment; filename=output.pdf'
    story = []
    story.append(Paragraph('CHIPAS', ParagraphStyle(name="centeredStyle", alignment=TA_CENTER, fontSize=20)))
    story.append(Paragraph('____________ENLANUBE', ParagraphStyle(name="centeredStyle", alignment=TA_CENTER, fontSize=20)))
    story.append(Spacer(6, 22))
    story.append(Table([[Paragraph(str(strftime("%Y-%m-%d", gmtime())), ParagraphStyle(name="centeredStyle", alignment=TA_LEFT, fontSize=7)), 
    Paragraph(str(strftime("%H:%M:%S", gmtime())), ParagraphStyle(name="centeredStyle", alignment=TA_RIGHT, fontSize=7))]],colWidths=[5.05 * cm, 3.1 * cm]))
    story.append(Paragraph("DEVELOPED AT ROSHKA-LABS", ParagraphStyle(name="centeredStyle", alignment=TA_CENTER, fontSize=6)))
    story.append(Paragraph('-'*50, styleCentered))
    #...
    #...
    doc = SimpleDocTemplate(handler.response.out, pagesize=letter)
    doc.build(story) 
Run Code Online (Sandbox Code Playgroud)

当我调用该方法时,它会打开一个保存对话框,我可以在其中指定文件的保存位置.

我怎么做才能将生成的pdf文件保存在数据存储区中?

提前致谢!

python pdf google-app-engine reportlab google-cloud-datastore

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

Python:如何使Reportlab移动到PDF输出中的下一页

我在Windows上使用开源版Reportlab和Python.我的代码循环遍历多个PNG文件并将它们组合成一个PDF.每个PNG都被拉伸到完整的LETTER规范(8.5x11).

问题是,保存到output.pdf的所有图像都夹在彼此的顶部,只有最后添加的图像是可见的.我需要在每个之间添加一些内容drawImage()以抵消新页面吗?这是我正在做的简单线性视图 -

WIDTH,HEIGHT = LETTER                                            
canv = canvas.Canvas('output.pdf',pagesize=LETTER)               
canv.setPageCompression(0)                                       

page = Image.open('one.png')                                     
canv.drawImage(ImageReader(page),0,0,WIDTH,HEIGHT)

page = Image.open('two.png')                                     
canv.drawImage(ImageReader(page),0,0,WIDTH,HEIGHT)

page = Image.open('three.png')                                   
canv.drawImage(ImageReader(page),0,0,WIDTH,HEIGHT)

canv.save()                                                      
Run Code Online (Sandbox Code Playgroud)

python pdf png reportlab

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

如何找出我正在运行的reportlab版本?

我需要知道我正在运行什么版本的reportlab.

以下似乎不起作用.

import reportlab
print reportlab.__version__
Run Code Online (Sandbox Code Playgroud)

python reportlab

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

通过flowable将现有PDF合并到新的ReportLab PDF中

我有一个reportlab SimpleDocTemplate并将其作为动态PDF返回.我基于一些Django模型元数据生成它的内容.这是我的模板设置:

buff = StringIO()
doc = SimpleDocTemplate(buff, pagesize=letter,
                        rightMargin=72,leftMargin=72,
                        topMargin=72,bottomMargin=18)
Story = []
Run Code Online (Sandbox Code Playgroud)

我可以轻松地将Entry模型中的文本元数据添加Story到稍后要构建的列表中:

    ptext = '<font size=20>%s</font>' % entry.title.title()
    paragraph = Paragraph(ptext, custom_styles["Custom"])
    Story.append(paragraph)
Run Code Online (Sandbox Code Playgroud)

然后通过调用以下build内容生成要在响应中返回的PDF SimpleDocTemplate:

doc.build(Story, onFirstPage=entry_page_template, onLaterPages=entry_page_template)

pdf = buff.getvalue()
resp = HttpResponse(mimetype='application/x-download')    
resp['Content-Disposition'] = 'attachment;filename=logbook.pdf'
resp.write(pdf)
return resp
Run Code Online (Sandbox Code Playgroud)

模型上的一个元数据字段是文件附件.当这些文件附件是PDF时,我想将它们合并到我正在生成的故事中; IE表示reportlab"flowable"类型的PDF.

我试图这样做pdfrw,但没有运气.理想情况下,我很乐意打电话:

from pdfrw import PdfReader
pdf = pPdfReader(entry.document.file.path)
Story.append(pdf)
Run Code Online (Sandbox Code Playgroud)

并将pdf附加到现有的故事列表中,以包含在最终文档的生成中,如上所述.

有人有主意吗?我尝试使用pagexobj创建类似的东西,尝试按照这个例子:

http://code.google.com/p/pdfrw/source/browse/trunk/examples/rl1/subset.py

from pdfrw.buildxobj import pagexobj
from pdfrw.toreportlab import makerl

pdf = pagexobj(PdfReader(entry.document.file.path))
Run Code Online (Sandbox Code Playgroud)

但也没有任何运气.有人可以向我解释将现有PDF文件合并到reportlab可流动的最佳方法吗?我对这些东西并不擅长,并且几天来一直在敲打pdf一代.:)任何方向非常感谢!

python pdf django pdf-generation reportlab

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

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(以前pisa,或反之亦然?:))从django模板生成PDF.模板呈现正常,但是我从该模板获得的PDF以非常奇怪的方式被破坏:表格单元格中的文本被提升到单元格的顶部,因此大写字母触及单元格的上边框:

在此输入图像描述

在浏览器中它看起来像这样:

在此输入图像描述

我试过了:

  1. 应用vertical-align- 看起来它只是被忽略了,至少我没有注意到pdf的任何变化,即使它们是在生成的html中
  2. 应用padding-top- 它会向下移动文本,但也会增加单元格高度.
  3. 文本换行到spanmargin-top-因为同样的效果padding-top

我认为原因是文本由xhtml2pdf在最顶部呈现,而浏览器倾向于将其呈现在块的中间某处.换句话说,文本块在pdf和html中占据相同的位置,但块内的文本被移位.但这只是我的猜测.

那么,有没有人面临同样的问题?难道我做错了什么?有可能的解决方法吗?

代码片段:

python django reportlab xhtml2pdf

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

使用ReportLab批量生成条形码

昨天,我问了一个可能过于宽泛的问题.

今天,我已经采取行动,努力实施解决方案.

使用ReportLab,pdfqueryPyPDF2,我正在尝试自动化在PDF文档中的数百页上生成条形码的过程.

每个页面都需要一个条形码.但是,如果页面右上角有一个字母('A'到'E'),那么它需要使用与上一页相同的条形码.右上角带有字母的文件是具有类似信息的重复表单.

如果没有字母存在,则应在该页面上使用唯一的条形码编号(加1加罚款).

我的代码似乎有用,但我有两个问题:

  1. 条形码移动得如此轻微(小问题).
  2. 条形码值不会改变(主要问题).仅在所有页面上设置第一个条形码编号.

我似乎无法分辨为什么价值不会改变.有没有人有线索?

代码在这里:

import pdfquery
import os
from io import BytesIO
from PyPDF2 import PdfFileWriter, PdfFileReader
from reportlab.graphics.barcode import eanbc
from reportlab.graphics.shapes import Drawing 
from reportlab.lib.pagesizes import letter
from reportlab.lib.units import mm
from reportlab.pdfgen import canvas
from reportlab.graphics import renderPDF

pdf = pdfquery.PDFQuery("letters-test.pdf")

total_pages = pdf.doc.catalog['Pages'].resolve()['Count']
print("Total pages", total_pages)

barcode_value = 12345670

output = PdfFileWriter()

for i in range(0, total_pages):
    pdf.load(i) # Load page i into memory …
Run Code Online (Sandbox Code Playgroud)

python pdf reportlab python-3.x

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

带有ReportLab的旋转文档(垂直文本)

我试图得到类似下面的代码片段来实际绘制这个文件旋转90度.pagesize已经是我最终想要它的方式,但文本仍然是水平的.如何旋转文本使其垂直?

style = getSampleStyleSheet()
normal = style["Normal"]
normal.alignment = TA_CENTER
normal.fontName = "Helvetica"
normal.fontSize = 15

pdf = SimpleDocTemplate("testplatypus.pdf", pagesize = (80, 250), rightMargin=10, leftMargin=10, topMargin=20,bottomMargin=20)
story = []
text = "I really need this to be wrapped and vertical!"

para = Paragraph(text, normal)
story.append(para)
pdf.build(story)
Run Code Online (Sandbox Code Playgroud)

python reportlab

6
推荐指数
2
解决办法
4581
查看次数