当前位置: 首页 > 面试题库 >

Python- Reportlabs-在2个不同的页面中保存2个不同的图形?

孔棋
2023-03-14
问题内容

我有以下代码在PDF内绘制垂直条形图和折线图。

如何将这2个图形保存在PDF的2个不同页面中。我看到可以使用-

c = canvas.Canvas("hello.pdf")
hello(c)
c.showPage()
c.save()

但是,不是使用Canvas,而是使用其中showPage() 不存在方法的Drawing对象。

如何将2个图形保存在PDF的2个不同页面中?第二个图形(折线图)的右边与第一个图形(垂直条形图)重叠,从而阻碍了该条形图。

这是我的 代码。

from reportlab.graphics.shapes import Drawing
from reportlab.graphics.charts.barcharts import VerticalBarChart

drawing = Drawing(400, 200)
data = [
(13, 5, 20, 22, 37, 45, 19, 4),
(14, 6, 21, 23, 38, 46, 20, 5)
]
bc = VerticalBarChart()
bc.x = 50
bc.y = 50
bc.height = 125
bc.width = 300
bc.data = data
#bc.strokeColor = colors.black
bc.valueAxis.valueMin = 0
bc.valueAxis.valueMax = 50
bc.valueAxis.valueStep = 10
bc.categoryAxis.labels.boxAnchor = 'ne'
bc.categoryAxis.labels.dx = 8
bc.categoryAxis.labels.dy = -2
bc.categoryAxis.labels.angle = 30
bc.categoryAxis.categoryNames = ['Jan-99','Feb-99','Mar-99',
'Apr-99','May-99','Jun-99','Jul-99','Aug-99']

drawing.add(bc)
drawing.save()

from reportlab.graphics.charts.lineplots import LinePlot
from reportlab.graphics.widgets.markers import makeMarker

drawing = Drawing(400, 200)
data = [
((1,1), (2,2), (2.5,1), (3,3), (4,5)),
((1,2), (2,3), (2.5,2), (3.5,5), (4,6))
]
lp = LinePlot()
lp.x = 50
lp.y = 50
lp.height = 125
lp.width = 300
lp.data = data
lp.joinedLines = 1
lp.lines[0].symbol = makeMarker('FilledCircle')
lp.lines[1].symbol = makeMarker('Circle')
lp.lineLabelFormat = '%2.0f'
#lp.strokeColor = colors.black
lp.xValueAxis.valueMin = 0
lp.xValueAxis.valueMax = 5
lp.xValueAxis.valueSteps = [1, 2, 2.5, 3, 4, 5]
lp.xValueAxis.labelTextFormat = '%2.1f'
lp.yValueAxis.valueMin = 0
lp.yValueAxis.valueMax = 7
lp.yValueAxis.valueSteps = [1, 2, 3, 5, 6]
drawing.add(lp)
drawing.save()
drawing.save(formats=['pdf'],outDir='.',fnRoot=None)

问题答案:

制作画布并在其上渲染图形:

from reportlab.pdfgen import canvas
from reportlab.graphics import renderPDF

c = canvas.Canvas('hi.pdf')

# your drawing
# drawing = Drawing(400, 200)

x, y = 0, 0 # coordinates (from left bottom)
renderPDF.draw(drawing, c, x, y, showBoundary=False)

c.showPage() # to end a page and start a new one

# extra pages content

c.save() # to save :D the whole document

希望能帮助到你 :)



 类似资料:
  • 问题内容: 我有第一个数据库 (dbA), 具有这样的表,名为 Username : 然后,在另一侧,我有 一个 带有这样的表的 dbB ,名为 PrivateMessage : 现在,如何组合来自2个不同数据库的这两个表,以便输出看起来像这样: 问题答案: 您可以简单地加入不同数据库的表。您需要在子句中指定数据库名称。要使其更短,请在其上添加一个, 但是有些方法却有可能-在其中没有消息。在这种情

  • 问题内容: 通过搜索发现了类似的问题,但我是一位新的(糟糕的)程序员,无法理解答案。 我有一个.txt文件,其中包含多个字符串,以’-‘分隔。我使用拆分将一些字符串分成变量,其中两个相等,但是在if语句中它们不相等。 这将产生以下结果: 瑞典 瑞典 没有 在两个“ Sweden”字符串之前和之后都有一个空格,并且它们都用大写字母“ S”编写,但不相等吗?我在哪里搞砸了? 问题答案: 最后一个元素包

  • 我在MySQL/MariaDB中有两个不同的表,它们有关于计算机系统的不同数据。computer_name有一个公共字段,但同一台计算机的字段内容可能不同。在表A中,computer_name可以是'hostname',而在表B中,computer_name可以是'hostname@dom1.domain'。我需要查看表A中的col1、col2、col3和表B中的col5、col6、col7,其中

  • 问题内容: 我输入的json数据是此数据(无法从外部资源更改): 我有两个结构将始终匹配数组中的数据: 显然,下面的代码不起作用,但是有可能在顶层(或其他方面)声明类似以下内容的代码: 问题答案: 使用两步过程进行编组。首先,解组一个任意JSON的列表,然后将该列表的第一个和第二个元素解组为各自的类型。 您可以在名为UnmarshalJSON的方法中实现该逻辑,从而实现json.Unmarshal

  • 我正在尝试找到一种有效的方法来检测给定的图形 G 是否具有两个不同的最小生成树。我还在尝试找到一种方法来检查它是否有 3 个不同的最小生成树。我所讨论的天真解决方案是运行一次 Kruskal 的算法并找到最小生成树的总权重。稍后,从图中删除一条边并再次运行 Kruskal 算法,并检查新树的权重是否是原始最小生成树的权重,以及图中的每个边的权重。运行时为 O(|五||E|log|V|)这根本不好,

  • 我有一个改型请求,它可以回复两个不同的Json响应,一次一个响应。我想同时抓住这两个案子。所以我所做的就是创建一个BaseResponse类 课内的两个是这样的。 我错过了什么..?