如何将 python Reportlab 表定位在位置 10,100 并使用drawString

2023-12-30

我是一个Python爱好者和reportlab新手。
我知道如何使用drawString将文本放置在页面上的特定位置,例如: c.drawString(10,100,"欢迎来到Reportlab!")

但我不知道如何放置一个表格(只有几行长),以便该表格从与 c.drawString(10,100,"Welcome to Reportlab!") 相同的位置开始,我将如果我学会如何把桌子放在那里的话,可以放在其他地方。

我也无法弄清楚如何在同一脚本中使用drawString,因为使用画布是我知道如何使用drawString功能的唯一方法。我的 4 行画布代码(本段之后)将关闭画布/文件并创建 PDF。表代码(下文)还关闭文件并构建 PDF,并且我不知道如何使用“doc.build(elements)”行来关闭用于 drawString 操作的画布。

c = canvas.Canvas(r"e:\hellonu.pdf", pagesize=letter)
c.setFont("Courier", 9) #choose your font type and font size
c.drawString(10,60,"Welcome to Reportlab!")
c.save()

如果您能给我任何指导,我将不胜感激:(1) 如何放置表格,使其从 10,100 开始,以及 (2) 如何在同一脚本中使用 drawString。如果我的某些代码没有任何用处,请不要认为我是故意把它放在那里的;我尝试从示例中复制足够的内容,以便我的表格具有自动换行功能。

这是我一直在玩的代码:

# http://zewaren.net/site/node/139
from reportlab.lib import colors
from reportlab.lib.pagesizes import LETTER, inch, portrait
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph
from reportlab.lib.styles import getSampleStyleSheet


doc = SimpleDocTemplate(r"e:\test_report_lab.pdf", pagesize=LETTER, rightMargin=30,leftMargin=30, topMargin=30,bottomMargin=18)
doc.pagesize = portrait(LETTER)
elements = []


data = [
["Directory"],
["AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA "],
]


style = TableStyle([('ALIGN',(1,1),(-2,-2),'RIGHT'),
                       ('TEXTCOLOR',(1,1),(-2,-2),colors.red),
                       ('VALIGN',(0,0),(0,-1),'TOP'),
                       ('INNERGRID', (0,0), (-1,-1), 0.25, colors.black),
                       ('BOX', (0,0), (-1,-1), 0.25, colors.black),
                       ])

#Configure style and word wrap
s = getSampleStyleSheet()
s = s["BodyText"]
s.wordWrap = 'CJK'
data2 = [[Paragraph(cell, s) for cell in row] for row in data]
t=Table(data2)
t.setStyle(style)


#Send the data and build the file
elements.append(t)
doc.build(elements)

最近,我偶然发现了同样的问题。这里的问题是,在reportlab中,表格是所谓的“可流动的”,而drawString命令是“固定的”。

感谢 Mike Driscoll 编写的这篇精彩教程,我找到了解决方案:“Reportlab:混合固定内容和可流动内容” https://www.blog.pythonlibrary.org/2012/06/27/reportlab-mixing-fixed-content-and-flowables/.

这是一个稍微修改过的版本,它构成了一个工作片段:

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

c = canvas.Canvas('example.pdf', pagesize=A4)  # alternatively use bottomup=False
width, height = A4

data = [[1, 2, 3], [2, 1, 3], [3, 2, 1]]

table = Table(data, colWidths=10*mm)
table.setStyle([("VALIGN", (0,0), (-1,-1), "MIDDLE"),
                ("ALIGN", (0,0), (-1,-1), "CENTER"),
                ('INNERGRID', (0,0), (-1,-1), 0.25, colors.black)])

table.wrapOn(c, width, height)
table.drawOn(c, 0*mm, 5*mm)

styles = getSampleStyleSheet()    
ptext = "This is an example."
p = Paragraph(ptext, style=styles["Normal"])
p.wrapOn(c, 50*mm, 50*mm)  # size of 'textbox' for linebreaks etc.
p.drawOn(c, 0*mm, 0*mm)    # position of text / where to draw

c.save()

我还可以再推荐两本 Mike Driscoll 的教程,它们让我快速熟悉了 reportlab。

  • 简单的分步 Reportlab 教程 https://www.blog.pythonlibrary.org/2010/03/08/a-simple-step-by-step-reportlab-tutorial/
  • Reportlab 表 – 使用 Python 在 PDF 中创建表格 https://www.blog.pythonlibrary.org/2010/09/21/reportlab-tables-creating-tables-in-pdfs-with-python/

非常感谢,迈克!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 python Reportlab 表定位在位置 10,100 并使用drawString 的相关文章

  • Python:Tkinter Treeview 可搜索

    相当直接的问题 尽管我用了最好的谷歌搜索 但我找不到任何相关内容 我有一个 Python 应用程序 它使用 Tkinter Treeview 小部件作为表格 这对于我需要使用它的用途来说效果很好 但最终会在一些树中出现几百个项目 无论如何
  • 使用 python 从 hive 读取数据时的性能问题

    我在 hive 中有一个表 其中包含 351 837 110 MB 大小 记录 我正在使用 python 读取该表并写入 sql server 在此过程中 从 hive 读取数据到 pandas dataframe 需要很长时间 当我加载整
  • 如何在 Pandas 中叠加“一天”内的数据进行绘图

    我有一个数据框 里面有一些 更有意义 数据格式如下 In 67 df Out 67 latency timestamp 2016 09 15 00 00 00 000000 0 042731 2016 09 15 00 16 24 3769
  • Django FileResponse PDF - 前端的 pdf 字体更改 - (Django DRF 和 React.js)

    我在我的应用程序中使用 Django Rest Framework 和 React js 作为应用程序的一部分 我在后端生成 pdf 然后将它们发送到前端进行显示 这个功能是有效的 如果不是因为我的前端 pdf 中的字体看起来不同的话 在我
  • chrome_options.binary_location() TypeError: 'str' 对象不可调用

    我希望每个人都好 我是 python 新手 我尝试运行这段代码 但我不明白问题是什么以及如何解决这个问题 我的代码是 from selenium import webdriver from time import sleep url raw
  • Seaborn 箱线图框从 Python 列表中分配自定义边缘颜色

    我正在尝试更改 Seaborn 箱线图中盒子的外观 我希望所有框都是透明的 并从列表中指定框边框 这是我正在使用的代码 import numpy as np import pandas as pd import seaborn as sns
  • 在 python 中使用 graphviz 从 DOT 文件绘制有向图

    这是API参考 http graphviz readthedocs io en latest api html for graphviz 我找不到任何从现有的生成有向图的方法dot源文件 方法如render and view保存在新文件中
  • 通过端点 API 将图像读入 protorpc 消息

    将用户的图片接收到我的 endpoints method我用吗messages BytesField as in image messages BytesField 1 stuff messages StringField 2 是的 这是正
  • python执行列表和函数列表[重复]

    这个问题在这里已经有答案了 我正在将 Python 2 7 与 Autodesk Maya 结合使用 这是我的问题的一个例子 import maya cmds as m def a passedString print this passe
  • Matplotlib导入错误ft2font

    我在 64 位 Mac 上的 Canopy 下安装了 Python 2 7 6 Ipython 版本为 2 1 0 这是一个非常奇怪的问题 我不确定这是否是路径文件问题 每当我导入 matplotlib pyplot 不仅仅是 matplo
  • Python PIL 由于某种原因无法打开 PDF

    所以我的程序能够打开 PNG 但不能打开 PDF 所以我这样做只是为了测试 但它仍然无法打开 甚至是一个简单的 PDF 我不知道为什么 from PIL import Image with Image open r Adams K a pd
  • 重命名多索引数据框中的索引值

    创建我的数据框 from pandas import arrays bar bar baz baz foo foo qux qux one two one two one two one two tuples zip arrays inde
  • 如果包含字符串,pandas 重命名列

    我想遍历数据框中的所有列 并重命名 或映射 列 如果它们包含某些字符串 例如 将包含 agriculture 的所有列重命名为字符串 agri 我正在考虑使用rename and str contains但不知道如何将它们结合起来以实现我想
  • 如何将one-hot向量转换为多标签?

    我有一项多分类任务 并且我得到了像这样的单热类型预测 0 1 1 0 1 0 1 0 1 我希望将这个单热向量转换为标签 例如 1 2 1 0 2 我已经尝试过 tf argmax 但它不起作用 那么我该如何处理呢 使用列表理解 oheLi
  • AWS Lambda python API 调用方法不返回 JSON - 不可序列化?

    我有一个 Lambda 函数 它是对 API 的基本 Python GET 调用 它在本地运行良好 但是当我上传到 Lambda 以及请求库 时 它不会从 API 调用返回 JSON 响应 我只是希望它将整个 JSON 对象返回给调用者 我
  • scrapy python 请求未定义

    我在这里找到了答案 code for site in sites Link site xpath a href extract CompleteLink urlparse urljoin response url Link yield Re
  • 在将字符串传递给 int() 之前,如何检查它是否为负数?

    我正在尝试编写一些内容来检查字符串是数字还是负数 如果它是一个数字 正数或负数 它将通过 int 传递 不幸的是 当包含 时 isdigit 不会将其识别为数字 这是我到目前为止所拥有的 def contestTest Neutral po
  • 在我的代码中使用 python 单词“type”安全吗?

    我可以用这个词吗type在我自己的代码中还是保留的 我的函数头 def get self region Delhi city Delhi category Apartments type For sale limit 60 PAGESIZE
  • 使用一次递归调用实现递归

    给定一个函数如下 f n f n 1 f n 3 f n 4 f 0 1 f 1 2 f 2 3 f 3 4 我知道使用递归来实现它 并在一个函数内进行三个递归调用 但我想在函数内仅使用一次递归调用来完成此操作 怎样才能做到呢 要实现使用
  • 更换壳牌管道[重复]

    这个问题在这里已经有答案了 在 subprocess 模块的 Python 2 7 文档中 我找到了以下片段 p1 Popen dmesg stdout PIPE p2 Popen grep hda stdin p1 stdout stdo

随机推荐