标签: reportlab

如何在python中的reportlab Canvas中设置任何字体?

我正在使用reportlab来创建pdfs.当我尝试使用以下方法设置字体时,我得到一个KeyError:

pdf = Canvas('test.pdf')
pdf.setFont('Tahoma', 16)
Run Code Online (Sandbox Code Playgroud)

但如果我使用'Courier'而不是'Tahoma'没有问题.我怎么用Tahoma?

python reportlab

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

使用reportlab 2.3在PNG中实现透明度

我有两个PNG,我试图在Python 2.5上使用ReportLab 2.3将其组合成PDF.当我使用canvas.drawImage(ImageReader)将PNG写入画布并保存时,透明度变为黑色.如果我使用PIL(1.1.6)生成一个新的图像,然后将(或)PNG粘贴到PIL图像上,它就可以很好地合成.我在Gimp中进行了双重检查,两张图像都有正常的Alpha通道并正确保存.我没有收到错误,似乎没有任何东西我的google-fu可以出现.

有没有人在ReportLab画布上合成一个透明的PNG,透明度是否正常工作?谢谢!

python reportlab python-imaging-library

23
推荐指数
1
解决办法
7389
查看次数

dict_items对象没有属性'sort'Replace Min

首先,我是Python新手.我正在使用PTVS http://pytools.codeplex.com/.接下来我安装了reportlab.然后我在https://github.com/nakagami/reportlab/blob/master/demos/colors/colortest.py#L68上运行一个示例演示但是在线,

all_colors = reportlab.lib.colors.getAllNamedColors().items()
all_colors.sort() # alpha order by name
Run Code Online (Sandbox Code Playgroud)

我收到了错误, dict_items object has no attribute sort

python reportlab ptvs

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

从PIL图像或StringIO将图像插入到Reportlab中

我正在尝试将条形码图像插入到Reportlab中.我知道有很多问题要问这个,但是他们都认为你已经在目录或文件系统中有了图像文件.

由于Reportlab存在EAN13条形码问题,我决定使用另一个名为pyBarcode的包来为我生成图像.

最初我将图像保存在StringIO实例中并直接传递给它,reportlab.platypus.flowables.Image但似乎没有用.然后我阅读了文档:

支持PIL/Java 1.4(Python/Java Imaging Library)支持的格式.

这是否意味着如果我传递PIL图像,这应该有用吗?我尝试以下操作时遇到异常:

>>> import PIL
>>> from reportlab.platypus.flowables import Image
>>> fp = StringIO(the_barcode.getvalue())
>>> barcode_image = PIL.Image.open(fp)
>>> doc = SimpleDocTemplate('barcode.pdf')
>>> story = [Image(barcode_image)]
>>> Traceback (most recent call last):
  File "create.py", line 57, in <module>
    main()
  File "create.py", line 24, in main
    save_pdf(fp, STYLE, ART, COLOR, SIZE)
  File "create.py", line 28, in save_pdf
    fp = StringIO(fp.getvalue())
  File "/home/mark/.virtualenvs/barcode/local/lib/python2.7/site-packages/reportlab-2.6-py2.7-linux-i686.egg/reportlab/platypus/flowables.py", line 402, in __init__
    if not fp and os.path.splitext(filename)[1] …
Run Code Online (Sandbox Code Playgroud)

python reportlab python-imaging-library

21
推荐指数
2
解决办法
1万
查看次数

Reportlab:如何在人像和风景之间切换?

我正在使用reportlab从动态数据中自动生成pdf报告.由于内容有时太大而无法以纵向显示,因此我尝试切换到大型内容的横向.

以下是我的报告生成方式:

主功能 :

doc = DocTemplate(...)           //Doctemplate is a customed BaseDocTemplate class
array = []
some_data= "Here is some data displayed in portrait" 

array.append(Paragraph(some_data))

large_data = "this data is too large to be displayed in portrait"
array.append(Paragraph(large_data))

... // Some more data is added after this

doc.build(array, canvasmaker=NumberedCanvas)
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是一种能够在每一步从纵向切换到横向的方法,因为我不知道显示它所需的页数.我仍然是reportlab的新手,甚至还有一些python,所以我不知道如何正确地使用reportlab(PageTemplates,flowables)提供的解决方案,因为我在最后构建整个文档.

以下是本案例的其他有用类:

class DocTemplate(BaseDocTemplate, ):
def __init__(self, filename, **kw):
    apply(BaseDocTemplate.__init__, (self, filename), kw)
    f = Frame(2.6*cm, 2.8*cm, 16*cm, 22.7*cm, id='f')
    pt = PageTemplate('RectPage', [f], onPage=beforeDrawPage, onPageEnd=afterDrawPage)
    //beforeDrawPage and afterDrawPage fill the …
Run Code Online (Sandbox Code Playgroud)

python reportlab

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

使用Reportlab的多个页面 - Django

我在使用Django的网站上工作,我使用Repotlab打印.pdf文件.

现在,我希望文件有多个页面,我该怎么办?

我的代码:

from reportlab.pdfgen import canvas
from django.http import HttpResponse

def Print_PDF(request):
    response = HttpResponse(content_type='application/pdf')
    response['Content-Disposition'] = 'attachment; filename="resume.pdf"'

    p = canvas.Canvas(response)

    p.drawString(100, 100, "Some text in first page.")
    p.drawString(200, 100, "Some text in second page.")
    p.drawString(300, 100, "Some text in third page")

    p.showPage()
    p.save()
    return response
Run Code Online (Sandbox Code Playgroud)

提前致谢.

python django reportlab

19
推荐指数
1
解决办法
9394
查看次数

ReportLab:使用中文/ Unicode字符

TL; DR: 是否有某种方法告诉ReportLab使用特定字体,如果某些字符的字形丢失,则回退到另一个字体?另外,您知道一个精简的TrueType字体,其中包含所有欧洲语言,希伯来语,俄语,中文,日语和阿拉伯语的字形吗?

我一直在使用ReportLab创建报表,并且在渲染包含中文字符的字符串时遇到了问题.我一直使用的字体是DejaVu Sans Condensed,它不包含中文的字形(但是,它确实包含西里尔语,希伯来语,阿拉伯语和各种用于欧洲语言支持的变音符号 - 这使得它非常通用,我需要他们不时)

但是,字体不支持中文,我无法找到支持所有语言的TrueType字体,并且符合我们的图形设计要求.作为一个临时的解决方法,我做了这样的事情,以便中国客户的报告使用完全不同的字体,只包含英文和中文字形,希望其他语言的字符不会出现在字符串中.然而,由于显而易见的原因,这是笨重的并打破了平面设计,因为它不是DejaVu Sans,围绕它设计了整个外观和感觉.

所以问题是,您将如何处理在一个文档中支持多种语言的需要,并维护每种语言的指定字体的使用.由于有时字符串包含多种语言,因此确定每个字符串应使用哪种ONE字体不是一种选择.

是否有某种方法告诉ReportLab使用特定字体,如果某些字符的字形丢失,则回退到另一种字体?我在文档中发现了应该可能的模糊提示,尽管我可能不正确地理解它.

另外,您知道一个精简的TrueType字体,其中包含所有欧洲语言,希伯来语,俄语,中文,日语和阿拉伯语的字形吗?

谢谢.

python unicode fonts reportlab chinese-locale

19
推荐指数
1
解决办法
2617
查看次数

在表reportlab中换行文本?

我使用一个表但是,我在画布中绘制来控制flowables的位置,这是因为我在pdf中有一个模板,我与pyPDF合并.

换行是在一张桌子上完成的,但是文字上升了,而不是我希望的那样.

c是画布

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.platypus import Paragraph, Table
from reportlab.lib.units cm

width, height = A4
styles = getSampleStyleSheet()

def coord(x, y, unit=1):
    x, y = x * unit, height -  y * unit
    return x, y

descrpcion = Paragraph('long paragraph', styles["Normal"])
partida = Paragraph('1', styles["Center"])
candidad = Paragraph('120', styles["Center"])
precio_unitario = Paragraph('$52.00', styles["right"])
precio_total = Paragraph('$6240.00', styles["right"])

data= [[partida, candidad, descrpcion, precio_unitario, precio_total]]
table = Table(data, colWidths=[2.05 …
Run Code Online (Sandbox Code Playgroud)

python reportlab

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

如何在reportlab.pdfgen中更改文本/字体颜色

我想在自动生成的PDF中使用不同颜色的文本.

根据reportlab文档,我需要做的是:

self.canvas.setFillColorRGB(255,0,0)
self.canvas.drawCentredString(...)
Run Code Online (Sandbox Code Playgroud)

但这没有任何作用.无论如何,文字都是黑色的.

python reportlab

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

reportlab中的多行(段落)页脚和标题

在reportlab中有一个页脚和页眉的最佳方法是什么,而不仅仅是一行,可以在onPage函数中使用canvas.drawString绘制.没有找到一种方法将类似Paragraph的东西放入onPage函数的页眉/页脚中.处理这个问题的最佳方法是什么?有没有办法将段落放入页脚?

python pdf pdf-generation reportlab

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