我正在用Reportlab platypus创建PDF表格.我不知道,因为动态内容页面已满.如果我在页面的末尾,我该如何查看?
鸭嘴兽有没有方法检查页面末尾?
我有公司名单,每家公司都有多个业务部门负责.
companies = [('company1', 'businessunit1', 500),
('company1', 'businessunit2',400),
('company2', 'businessunit3',200),
('company2', 'businessunit4', 700),
('company3', 'businessunit5', 800)
]
Run Code Online (Sandbox Code Playgroud)
上面的列表应该为一个公司生成3个表,但是如果这个列表有多个公司将生成多个表,并且如果任何表到达页面末尾将会中断.
fields = ['company name', 'business unit name', 'charge']
for i, comp in enumerate(companies):
charges = []
document.append(Paragraph("<b>%s</b>" %comp[i][0], STYLES['COMPANY_NAME']))
document.append(Spacer(1, 5))
charges.append(comp[i][0])
charges.append(comp[i][1])
charges.append(comp[i][2])
charges_table = LongTable([fields] + charges, colWidths=(30,150,100))
charges_table.setStyle(TableStyle([
('BACKGROUND', (0, 0), (-1, 0), colors.gray),
('FONTSIZE', (0, 0), (-1, 0), 6),
('GRID', (0, 0), (-1, -1), 1, colors.gray),
('FONTSIZE', (0, 0), (-1, -1), 7),
('TEXTCOLOR',(0,-1),(-1,-1),'#FF4500'),
])
) …Run Code Online (Sandbox Code Playgroud) 我正在使用django并根据此示例生成报告,我需要生成最后一页但没有页眉或页脚和不同的内容.
我正在尝试这样做:
def print_example(self):
buffer = self.buffer
doc = SimpleDocTemplate(buffer,
rightMargin=72,
leftMargin=72,
topMargin=72,
bottomMargin=72,
pagesize=self.pagesize)
elements = []
elements.append(Paragraph('Content for all pages'), my_custom_style)
# ...
doc.build(elements, onFirstPage=self._header_footer, onLaterPages=self._header_footer,
canvasmaker=NumberedCanvas)
doc2 = SimpleDocTemplate(buffer,
rightMargin=72,
leftMargin=72,
topMargin=72,
bottomMargin=72,
pagesize=self.pagesize)
elements2 = []
elements2.append(Paragraph('Content for the last page only'), my_custom_style)
doc2.build(elements2, canvasmaker=NumberedCanvas)
# Get the value of the BytesIO buffer and write it to the response.
pdf = buffer.getvalue()
buffer.close()
return pdf
Run Code Online (Sandbox Code Playgroud)
然后只显示最后一个内容,之前的内容消失.
如何生成包含不同内容的最后一页?
我在将表格对象与框架底部对齐时遇到问题,hAlign“RIGHT”和“LEFT”有效,但它似乎卡在“TOP”中,如何将表格向下对齐到“MIDDLE”或“框架的底部?下面是一个完整且可运行的示例。请注意,框架内的表格应位于底部,这意味着表格位于右下角(现在,下面的表格位于框架的顶部)。
from reportlab.lib.pagesizes import letter
from reportlab.lib import colors
from reportlab.platypus import Frame, PageTemplate
from reportlab.lib.units import cm
from reportlab.platypus import (Table, TableStyle, BaseDocTemplate)
########################################################################
def create_pdf():
"""
Create a pdf
"""
# Create a frame
CatBox_frame = Frame(
x1=14.00 * cm, # From left
y1=1.5 * cm, # From bottom
height=9.60 * cm,
width=5.90 * cm,
leftPadding=0 * cm,
bottomPadding=0 * cm,
rightPadding=0 * cm,
topPadding=0 * cm,
showBoundary=1,
id='CatBox_frame')
# Create a table
CatBox = Table([
['', '', …Run Code Online (Sandbox Code Playgroud) 升级到 MacOS Big Sur 后,我试图重新安装我的虚拟环境。
但出现错误:
4 warnings generated.
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX11.0.sdk -I/Library/Developer/CommandLineTools/SDKs/MacOSX11.0.sdk/usr/include -I/Library/Developer/CommandLineTools/SDKs/MacOSX11.0.sdk/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -Qunused-arguments -Qunused-arguments -DRENDERPM_FT -DLIBART_COMPILATION -DLIBART_VERSION=2.3.21 -Isrc/rl_addons/renderPM -Isrc/rl_addons/renderPM/libart_lgpl -Isrc/rl_addons/renderPM/gt1 -I/usr/local/include/freetype2 -I/usr/local/include -I/usr/local/opt/openssl@1.1/include -I/usr/local/opt/sqlite/include -I/Users/zulfugar/PycharmProjects/AppForm/.venv/include -I/usr/local/Cellar/python@3.8/3.8.6_1/Frameworks/Python.framework/Versions/3.8/include/python3.8 -c src/rl_addons/renderPM/gt1/gt1-parset1.c -o build/temp.macosx-11.0-x86_64-3.8/src/rl_addons/renderPM/gt1/gt1-parset1.o
src/rl_addons/renderPM/gt1/gt1-parset1.c:604:28: warning: for loop has empty body [-Wempty-body]
for (i = 0; i < size; i++);
^
src/rl_addons/renderPM/gt1/gt1-parset1.c:604:28: note: put the semicolon on a separate line to silence this warning
src/rl_addons/renderPM/gt1/gt1-parset1.c:1907:16: warning: comparison of integers of different signs: …Run Code Online (Sandbox Code Playgroud) 我试图将页眉和页脚包含在单个页面上。我在reportlab中引用了A multiline(paragraph) footer and header,并使用了Jochen和NateB80所述的方法。但只生成页眉,而不生成页脚。
def header(canvas, doc, content):
canvas.saveState()
w, h = content.wrap(doc.width, doc.topMargin)
content.drawOn(canvas, doc.leftMargin, doc.height + doc.topMargin - h)
canvas.restoreState()
def footer(canvas, doc, content):
canvas.saveState()
w, h = content.wrap(doc.width, doc.bottomMargin)
content.drawOn(canvas, doc.leftMargin, h)
canvas.restoreState()
styles = getSampleStyleSheet()
PAGESIZE = pagesizes.portrait(pagesizes.A4)
# PAGESIZE = letter
pdf = SimpleDocTemplate(filename, pagesize=PAGESIZE, leftMargin=2.2*cm, rightMargin=2.2*cm,
topMargin=1.5*cm,bottomMargin=2.5*cm)
frameh = Frame(pdf.leftMargin, pdf.bottomMargin, pdf.width, pdf.height - 2 * cm, id='normal')
header_content = Paragraph("This is a header. testing testing testing ", styles['Normal'])
templateh = …Run Code Online (Sandbox Code Playgroud) 我有一个 Django 项目,使用 easy-thumbnail 作为依赖项。
使用 pip 安装所有软件包按预期工作,但是当我尝试运行我的应用程序时,出现此错误:
Invalid template library specified. ImportError raised when trying to load 'backend.templatetags.get_thumbnail': dlopen(/opt/homebrew/lib/python3.9/site-packages/reportlab/graphics/_renderPM.cpython-39-darwin.so, 0x0002): symbol not found in flat namespace '_FT_Done_Face'
Run Code Online (Sandbox Code Playgroud)
该错误是从 reportlab 引发的,它是 easy-thumbnail 的依赖项。据我了解,reportlab 无法找到 freetype。但恕我直言,它安装正确。
我使用的是 macOS 12.0.1
我通过 Homebrew 安装了 Python 和 freetype。pkg-config 表示,freetype2 在预期路径中可用。
我究竟做错了什么?我怎样才能解决这个问题?
编辑
我otool -l对失败的 .so 文件做了处理,这就是我得到的(这里我在 venv 中再次运行它):
/Users/markusgerards/.pyenv/versions/myapp/lib/python3.9/site-packages/reportlab/graphics/_renderPM.cpython-39-darwin.so:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1292.60.1)
Run Code Online (Sandbox Code Playgroud)
我怀疑 freetype 应该列在那里......对吧?
PyPDF我正在尝试使用和编辑现有的 pdf 文件ReportLab。当我尝试放置红色圆圈和红色文本时,它似乎隐藏在白色容器或其他东西后面。如果我把它放在其他地方,它就可以正常工作。是什么原因造成的?
WHAT THE ERROR IS:
WHAT THE FINAL RESULT SHOULD BE:
from PyPDF2 import PdfWriter, PdfReader
import io
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
from reportlab.lib.colors import red
def main():
packet = io.BytesIO()
can = canvas.Canvas(packet, pagesize=letter)
can.setFillColorRGB(1, 0, 0)
can.circle(370,780,20,fill=1)
can.setFillColor(red)
can.setFont("Times-Roman", 14)
can.drawString(352, 785, "Customer Group #22")
can.save()
packet.seek(0)
new_pdf = PdfReader(packet)
existing_pdf = PdfReader(open("samplePDF.pdf", "rb"))
output = PdfWriter()
page = existing_pdf.pages[1]
page.merge_page(new_pdf.pages[0])
output.add_page(page)
outputStream = …Run Code Online (Sandbox Code Playgroud) 我正在使用 Reportlab 的 Platypus 在 python 中制作动态生成的报告。
我生成了多个表,大多数只有 10 到 20 行。现在,它们会在我的页面末尾自动拆分,但我更希望它们在同一页面上保持在一起。
我曾尝试在表实例化时将 splitByRow 设置为 False,但这会引发“未实现”错误。
此外,我不允许对 reportLab python 文件进行任何更改,尽管我可以看到代码。也许我可以子类化 Table 并以某种方式禁用拆分?
禁用可流动拆分的最简单方法是什么?
首先,我是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)
我希望你理解我想说的话.
我想知道自己是否有任何模板代码用pdf与reportlab输出生成发票,我在Django开发平台销售,我需要输出一些带发票的数据,我尝试了进一步,但我没有找到任何东西谁知道一些资源?我不在乎我是否需要使用另一个库,当然,对于python.
问候!
编辑:
最后我找到了这个软件包的解决方案:https://pypi.python.org/pypi/django-invoice如果有人有兴趣的话.
问候!