是否可以获取reportLab中渲染文本的大小/范围?
我需要计算相对于页面上其他元素的一些位置。
可流动的系统不是我想要的。我不介意在必要时使用它来获取尺寸,但它不适合我的整体布局。我尝试创建一个Paragraph调用wrap,但它始终返回可用宽度,而不是测量的扩展。
我正在尝试使用App Engine Python上的reportlab生成PDF报告.
但我不知道如何正确附加图像.
图像是静态的.
这是我项目的目录树.

这就是我所做的(在' chipas.py ' 里面)来获取图像:
im = Image('../static/logo.png',1*inch, 1*inch)
story.append(im)
...
Run Code Online (Sandbox Code Playgroud)
我得到的堆栈跟踪:
回溯(最近一次调用最后一次):文件"C:\ Users\Lucas\Dropbox\Desarrollo\Python\windows\AppEngine\google\appengine\ext\webapp_webapp25.py",第701行,在call handler.get(*groups)中文件"C:\ Users\Lucas\Dropbox\Desarrollo\workspace\python\chipas-windows\src\chipas.py",第1035行,在获取doc.build(story)文件"C:\ Users\Lucas\Dropbox\Desarrollo\workspace\python\chipas-windows\src\reportlab\platypus\doctemplate.py",第1117行,在构建BaseDocTemplate.build(self,flowables,canvasmaker = canvasmaker)文件"C:\ Users\Lucas\Dropbox\Desarrollo\workspace\python\chipas-windows\src\reportlab\platypus\doctemplate.py",第880行,在构建self.handle_flowable(flowables)文件"C:\ Users\Lucas\Dropbox\Desarrollo\workspace\python\chipas- windows\src\reportlab\platypus\doctemplate.py",第763行,如果是frame.add,则在handle_flowable中(f,canv,trySplit = self.allowSplitting):文件"C:\ Users\Lucas\Dropbox\Desarrollo\workspace\python\chipas-windows\src\reportlab\platypus\frames.py",第159行,在_add w中,h = flowable.wra p(aW,h)文件"C:\ Users\Lucas\Dropbox\Desarrollo\workspace\python\chipas-windows\src\reportlab\platypus\flowables.py",第408行,在wrap中返回self.drawWidth,self. drawHeight文件"C:\ Users\Lucas\Dropbox\Desarrollo\workspace\python\chipas-windows\src\reportlab\platypus\ flowables.py ",第402行,在getattr self._setup_inner()文件"C:\ Users\Lucas\Dropbox\Desarrollo\workspace\python\chipas-windows\src\reportlab\platypus\flowables.py",第368行,在_setup_inner中img = self._img文件"C:\ Users\Lucas\Dropbox\Desarrollo\workspace\python\chipas-windows\src\reportlab\platypus\ flowables.py ",第398行,在getattr self._img = ImageReader(self._file)文件"C:\ Users\Lucas\Dropbox\Desarrollo\workspace\python\chipas -windows\src\reportlab\lib\utils.py",第541行,在init中, 如果_isPILImage(fileName):文件"C:\ Users\Lucas\Dropbox\Desarrollo\workspace\python\chipas-windows\src\reportlab\lib\utils.py",第521行,在_isPILImage中返回isinstance(im,Image.Image)AttributeError:'NoneType'对象没有attribut e'Image'INFO 2012-02-29 19:54:37,276 dev_appserver.py:4247]"GET/pdf?pedido = ahVkZXZ-Y2hpcGFzLWludGhlY2xvdWRyLwsSBlBlZGlkbyIjMjAxMi0wMi0yOSAxOTo1NDoxOHRlc3RAZXhhbXBsZS5jb20M HTTP/1.1"500 -
在使用reportlab生成的pdf文档中添加图像文件的正确方法是什么?提前谢谢了!
我正在使用ReportLab生成pdf.但是,当我试图在其中附加图像时,它会给出错误.如果我不包括图像,那么一切都很好.代码运行成功.
我有以下目录结构.
parentDir\
main.py
childDir\
__init__.py
first.py
second.py
image.jpg
Run Code Online (Sandbox Code Playgroud)
main.py
from childDir.first import methodOfFirst
#using methodOfFirst
Run Code Online (Sandbox Code Playgroud)
first.py
from second import methodOfSecond
#using methodOfSecond
Run Code Online (Sandbox Code Playgroud)
second.py
#this second.py file have **ReportLab** Code
.............
canvas.drawImage('image.jpg', 0.2*inch, 11.12*inch, width=w*scale, height=h*scale)
.............
Run Code Online (Sandbox Code Playgroud)
这是我的代码的基本框架.但是当我执行时,它会生成错误:
raise IOError('Cannot open resource "%s"' % name)
IOError: Cannot open resource "tjsservices.jpg"
handle_pageBegin args=()
Run Code Online (Sandbox Code Playgroud)
我是python和reportLab的新手,所以不知道导入这种层次结构的正确方法是什么.如果所有文件都在同一目录中,那么它可以正常工作.但是当我使用这种目录结构时,它会失败.
为了简单起见,我提供了这个骨架.如果需要更多代码,请告诉我.
所以问题是.为什么我收到此错误以及如何解决?这是ReportLab的问题(即reportLab不支持这种导入)或者我导入的文件方式错误?任何帮助将不胜感激.
我正在使用reportlab将一些大型库(俄语纯文本)转换为pdf格式.当原始文件足够小(例如,大约10-50 kB)时,它工作正常.但是,如果我试图转换大文本(500kB以上),则需要花费大量时间来报告.有谁知道可能是什么问题?
BYTES_TO_READ = 10000
def go(text):
doc = SimpleDocTemplate("output.pdf")
Story = [Spacer(1, 2*inch)]
style = styles["Normal"]
p = Paragraph(text, style)
Story.append(p)
doc.build(Story)
def get_text_from_file():
source_file = open("book.txt", "r")
text = source_file.read(BYTES_TO_READ)
source_file.close()
return text
go(get_text_from_file())
Run Code Online (Sandbox Code Playgroud)
因此,当我尝试将BYTES_TO_READ变量设置为超过200-300千(即,只是为了看看发生了什么,而不是阅读完整的书,只是它的一部分) - 需要花费大量的时间
我在reportlab画布上画了一张桌子.绘图时,我们需要将表格的左下角线传递给drawOn方法.我的表的高度是动态的,因此它重叠在表格上方的元素上.我找不到任何返回要绘制的表的高度的方法.有没有其他方法可以做到这一点?
这是使用Reportlab为我生成pdf的代码.
现在,它只是在浏览器中显示pdf,并且在resonse.header ['Content-Disposition']中包含'attachment'后,它会下载pdf.
但我想要的是浏览器中的rint选项,它甚至允许您选择打印机.可能吗 ?
data = "raghav"
p = canvas.Canvas(self.response.out)
p.drawString(50, 700, data)
p.showPage()
self.response.headers['Content-Type'] = 'application/pdf'
self.response.headers['Content-Disposition'] = 'attachment;filename=testpdf.pdf'
p.save()
Run Code Online (Sandbox Code Playgroud) 我无法在谷歌应用引擎下正确导入reportlab.根据以下指南(以及网络上的其他几个地方):
"您所要做的就是下载它并将'reportab'目录复制到您应用的根目录中."
当我这样做时(我从这里下载reportlab-3.0.zip )并将其解压缩到我的应用程序的根目录中,因为我尝试使用以下行导入reportlab:
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
Run Code Online (Sandbox Code Playgroud)
我收到导入错误
ImportError: No module named reportlab.pdfgen
Run Code Online (Sandbox Code Playgroud)
我试过谷歌搜索但无济于事.任何有关这方面的帮助将不胜感激,因为我不确定我还能尝试什么.非常感谢!
我尝试的另一件事是复制我的应用程序的根目录下的下载zip的src目录中的内容,但这也无效.我使用它的错误是:
ImportError: Cannot re-init internal module __main__
Run Code Online (Sandbox Code Playgroud)
似乎版本2.7导入没问题,只有3.0问题
我正在创建一个简单的脚本,它使用Reportlab pdf生成模块将图像列表作为输入并输出pdf文件.该脚本采用如上所示的文件名:
from reportlab.pdfgen import canvas
filename = raw_input("Enter pdf filename: ")
c = canvas.Canvas(filename + ".pdf")
c.save()
Run Code Online (Sandbox Code Playgroud)
一切都很棒,直到用户输入非英语文件名(希伯来语,阿拉伯语),导致代码抛出以下异常:
UnicodeDecodeError: 'utf8' codec can't decode byte 0xf9 in position 0: invalid start byte
Run Code Online (Sandbox Code Playgroud)
所以,我决定使用unicode,但是当我使用unicode()它时会抛出另一个例外:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xf9 in position 0: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
但是,当我解码字符串编码时,它就像一个魅力(希伯来语示例):
from reportlab.pdfgen import canvas
filename = raw_input("Enter pdf filename: ")
filename = filename.decode("windows-1255")
c = canvas.Canvas(filename + ".pdf")
c.save()
Run Code Online (Sandbox Code Playgroud)
我继续尝试另一种方法,并发现如果我u在上面的例子中写字符串之前,它可以用任何语言工作:
from reportlab.pdfgen import canvas
filename …Run Code Online (Sandbox Code Playgroud) 我需要一个新行,所以我可以在PFD中看到一种格式,我尝试添加页面宽度,但它没有工作,我使用/ n的其他东西,它不起作用.这是我的代码.我可以手动添加一个格式,因为我需要显示从数据库获取的信息,并在一个长行中获取信息.
def PdfReportView(request):
print id
# Create the HttpResponse object with the appropriate PDF headers.
response = HttpResponse(content_type='application/pdf')
response['Content-Disposition'] = 'filename="PatientReport.pdf"'
c = canvas.Canvas(response, pagesize=letter)
t = c.beginText()
t.setFont('Helvetica-Bold', 10)
t.setCharSpace(3)
t.setTextOrigin(50, 700)
t.textLine("Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.")
c.drawText(t)
c.showPage()
c.save() …Run Code Online (Sandbox Code Playgroud) 我有一个python脚本,可以使用reportlab platypus将.csv文件中的文本消息数据写入PDF中的表中。它仅将表的最后一行写入单元格。在此之前,它将忽略所有其他行。它写入PDF的唯一一行是用黄色突出显示的excel片段中显示的最后一行。如图所示,还包含了将其写入PDF时的外观的摘要。
它还在三页或四页中创建PDF,这表明它试图为整个表腾出空间,但不会编写它。到目前为止,这是我一直在使用的代码。我想以Excel片段中所示的相同格式将其写入PDF文档。我应该如何重构我的代码来做到这一点?
# Script to generate a PDF report after data has been parsed into smsInfo.csv file
# import statements
import requests
from reportlab.lib import colors
from reportlab.lib.pagesizes import *
from reportlab.platypus import *
from reportlab.lib.styles import getSampleStyleSheet
import csv
import os
import datetime
now = datetime.datetime.now()
# Get de work directory
cwd = os.getcwd()
# Introduction text
line1 = 'LYIT MOBILE FORENSICS DIVISION'
line2 = 'Date: ' + now.strftime("%d-%m-%y")
line3 = 'Case Number: 10'
line4 = 'This forensic …Run Code Online (Sandbox Code Playgroud) python ×10
reportlab ×10
pdf ×5
encoding ×1
http-headers ×1
image ×1
io ×1
newline ×1
python-2.7 ×1
python-3.x ×1
unicode ×1