- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在生成一个 PDF,但我无法为不同的页面提供不同的上边距。
有没有什么方法或者途径可以解决这个问题?
response = HttpResponse(mimetype='application/pdf')
response['Content-Disposition'] = 'attachments;filename='aa.pdf'
doc = SimpleDocTemplate(response)
elements = []
table_data = [["Cash Management -"],
["individuelle Kond-"],
["Cash Mas -"],
["Terms and Condppe"],
]
table_dimension = Table(table_data, colWidths=[19.8 * cm], rowHeights=(.23*inch))
table_dimension.setStyle(TableStyle([
('BACKGROUND',(0,0),(0,3),'0x2E8B57'),
('TEXTCOLOR',(0,0),(0,3),'0xFFFFFF'),
('FONT', (0,0), (0,3), 'Times-Italic'),
('ALIGN',(0,0),(0,3),'CENTER'),
("VALIGN",(0,2),(0,2),"BOTTOM"),
('FONTSIZE',(0,0),(0,1),14)
]))
elements.append(table_dimension)
doc.topMargin=.13* inch
doc.build(elements)
return response
现在在所有页面上,上边距保持不变,但我希望每个页面上的边距不同。
最佳答案
DocTemplate
类(如 SimpleDocTemplate
)由 PageTemplate
填充,然后由 Frame
填充然后用 Flowable
填充它们(就像你的 Table
)。 SimpleDocTemplate
(顾名思义)为您提供最基本的设置来简化购买过程:一个 DocTemplate
已经有一个 PageTemplate
和一个基本的 Frame
只需要用 Flowable
填充。所以这就是问题所在:DocTemplate
边距对于整个文档是固定的,顺便说一句,这是有道理的。您想要调整 Frame
的边距!为此,您可以尝试获取当前使用的框架的句柄,或者开始使用更精细的 BaseDocTemplate
并定义您自己的 PageTemplate
和 Frame
的。我建议您阅读 reportlab user guide 中的相应页面。在第 5 章下搜索一个 BaseDocTemplate
示例,它显示了 Frame
和 PageTemplate
的生成。
另一种选择是不直接使用边距。您可以使用 Spacer()
来添加表格的垂直空间和 colWidths 来调整水平宽度,但这并不是一件很有趣的事情。 SimpleDocTemplate
在构建函数中添加了 PageTemplates
和 Frames
,因此我们不能在此之前修改它们。如果您需要更广泛的示例,您需要发布更多代码,以便我可以看到您真正想要的,因为您的代码只生成一页。
更新
这里是一个关于如何使用 Frame-size 调整不同页面边距的例子。还可以调整 PageTemplates 的大小。我认为您应该能够理解代码,但再次声明:这是 BaseDocTemplate,而不是 SimpleDocTemplate。如果第一页上的表格跨越第一页,则无需添加 PageBreak()
,但 NextPageTemplate()
是必需的!
"""
Example how to adjust the Frame-size in a BaseDocTemplate
"""
from reportlab.platypus import BaseDocTemplate, Frame, Paragraph, NextPageTemplate, PageBreak, PageTemplate
from reportlab.lib.units import inch
from reportlab.lib.styles import getSampleStyleSheet
def on_first_page(canvas,doc):
canvas.saveState()
canvas.setFont('Times-Roman',19)
canvas.drawString(inch, 0.75 * inch, "Page %d" % doc.page)
canvas.restoreState()
def on_remaining_pages(canvas,doc):
canvas.saveState()
canvas.setFont('Times-Roman',9)
canvas.drawString(inch, 0.75 * inch, "Page %d" % doc.page)
canvas.restoreState()
# creation of the BaseDocTempalte. showBoundary=0 to hide the debug borders
doc = BaseDocTemplate('basedoc.pdf',showBoundary=1)
# create the frames. Here you can adjust the margins
frame_first_page = Frame(doc.leftMargin, doc.bottomMargin, doc.width, doc.height, id='first')
frame_remaining_pages = Frame(doc.leftMargin + 1*inch, doc.bottomMargin + 1*inch, doc.width - 2*inch, doc.height - 2*inch, id='remaining')
# add the PageTempaltes to the BaseDocTemplate. You can also modify those to adjust the margin if you need more control over the Frames.
doc.addPageTemplates([PageTemplate(id='first_page',frames=frame_first_page, onPage=on_first_page),
PageTemplate(id='remaining_pages',frames=frame_remaining_pages, onPage=on_remaining_pages),
])
styles=getSampleStyleSheet()
# start the story...
Elements=[]
Elements.append(Paragraph("Frame first page!",styles['Normal']))
Elements.append(NextPageTemplate('remaining_pages')) #This will load the next PageTemplate with the adjusted Frame.
Elements.append(PageBreak()) # This will force a page break so you are guarented to get the next PageTemplate/Frame
Elements.append(Paragraph("Frame remaining pages!, "*500,styles['Normal']))
#start the construction of the pdf
doc.build(Elements)
关于python - 如何使用 reportlab simpledoctemplate 为不同的页面分配 doc.topMargin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21696462/
ReportLab 用户指南中说: The colortest.py script in reportlab/demos/colors demonstrates thedifferent ways i
ReportLab 用户指南中说: The colortest.py script in reportlab/demos/colors demonstrates thedifferent ways i
我正在使用 ReportLab VerticalBarChart 生成条形图。我需要其中一个条(每次都是不同的)与其他条的颜色不同,以指定它是“选择”值。 否则,我需要以与其他栏不同的方式标记它。 知
我正在使用 ReportLab 生成 PDF 报告。 我使用了 SimpleDocTemplate 并设置了 pageSize = A5。但是在构建PDF后,当我打开创建的文件时,页面大小为A4。 d
是否可以在段落样式中设置字母/字符间距?我尝试使用spaceShrinkage但这没有任何区别 最佳答案 根据official documentation ,p。 30: The setCharSpa
我的销售订单模板中有以下 rml: [[ repeatIn(o.order_line, 'l') ]] [[ l.name ]] [[
你好, 我正在使用报告实验室生成 pdf。我想绘制一个文本,它是一个 Paragraph,代表一个标题,因此,如果标题比段落的可用长度长,它将在下一行拆分,如果标题太长适合段落的可用宽度和高度,然后调
如何设置表格的左侧位置? response = HttpResponse(mimetype='application/pdf') response['Content-Disposition'] = '
在报告实验室中 user guide (第 79 页),这是将图像插入表格的方式。 I = Image('../images/replogo.gif') I.drawHeight = 1.25*inc
reportlab文档中有LINEBELOW和LINEABOVE。但我找不到定义右边界或左边界(LINELEFT、LINERIGHT)的方法。 关于如何渲染只有右边框的单元格有什么建议吗? 编辑: 我
有什么方法可以在 reportlab 中获取 Flowable Paragraph 的行数?我有一个很长的字符串,用不同的大小和字体打印。我需要知道要使用 TA_JUSTIFY 对齐打印的整个段落使用
在文档和源代码中,我看到很多对圆角矩形的引用,但是,我似乎无法绘制一个。 我正在绘制一个普通的矩形: canvas.rect(15, 625, 250, 125, fill=0) 我向圆角传递哪些参数
我正在处理发票,我只想在最后一页(也可以是第一页)添加页脚。 由于表的数据是动态的,我无法计算页数。 现在我正在使用 2 个页面模板,第一页(带有 2 个框架和页脚 1)和下一页(带有 1 个框架和页
我知道 LINEABOVE 和 LINEBELOW 样式,我想知道是否有一种方法可以在表格中绘制一条指定宽度的线。 我正在尝试添加一条不“接触”表格边框的线,如果我可以在单元格之间添加一些填充,LIN
我快速浏览了一下网络,但未能找到一种在 Python 中使用 ReportLab 生成 PDF 时设置背景颜色的方法。如何设置背景颜色? 最佳答案 不要使用复杂的方法,而是使用这个简单的技巧: im
我想知道如何将我的脚本保存到桌面。这是我的代码: from reportlab.pdfgen import canvas from reportlab.lib.pagesizes import let
您好,我是报告实验室的新手。我想生成一份包含表格的 pdf 报告。表格中的某些列文本大于列宽,现在我想根据列宽换行文本。 以下是我编写的代码 # Imports from reportlab.pdfg
我正在使用XPreformatted打印一些预格式化的文本,我有一个 换行符的问题。 换行符正确翻译,但另外我得到一个 每行末尾都有“问号”。 这是我的输出: first line? second l
我知道 LINEABOVE 和 LINEBELOW 样式,我想知道是否有一种方法可以在表格中绘制一条指定宽度的线。 我正在尝试添加一条不“接触”表格边框的线,如果我可以在单元格之间添加一些填充,LIN
我快速浏览了一下网络,但未能找到一种在 Python 中使用 ReportLab 生成 PDF 时设置背景颜色的方法。如何设置背景颜色? 最佳答案 不要使用复杂的方法,而是使用这个简单的技巧: im
我是一名优秀的程序员,十分优秀!