有没有可能在使用鸭嘴兽报告?

2024-10-03 06:29:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我的主要目标是让页面上所有的图像流动,使它们看起来像是可点击的链接。为了做到这一点,我会创建一个画布.linkRect()并将其放置在渲染图像上。下面是我如何使用画布.linkRect():

canvas.linkURL(
    url='url_goes_here',
    rect=(x1, y1, x2, y2), #(x1, y1) is the bottom left coordinate of the rectangle, (x2, y2) is the top right
    thickness=0, relative=1
)

在查看了BaseDocTemplate类之后,我发现了一个名为afterFlowable(self,flowable)的方法。我重写了该方法,并对传入的flowable调用了dir(),结果是:

^{pr2}$

它有一个width和height属性,我可以用它来确定linkRect()应该有多大(x2和y2应该是什么),但是没有关于流从哪里开始的信息(x1和y1应该是什么?)。在

如果其他方法都失败了,我会考虑以某种方式将一个帧与一个可流动的图像配对,因为一个帧包含我要创建linkRect()的信息。然而,这似乎是一个麻烦,知道什么时候和如何订购一个帧的列表,它各自的流动列表,除了必须知道这些帧的图像到底放在哪里。有没有别的方法可以达到这个目的呢?还是不可能?在

谢谢!在


Tags: the方法图像信息url列表is画布
1条回答
网友
1楼 · 发布于 2024-10-03 06:29:16

今天工作了一天之后,我终于想出了一个好办法!下面是我如何为其他人谁想这一功能的超链接图像流动在他们的PDF。在

基本上,reportlab.platypus.flowables有一个名为Flowable的类,Image继承自该类。Flowable有一个名为drawOn(self, canvas, x, y, _sW=0)的方法,我在我创建的名为HyperlinkedImage的新类中重写了该方法。在

from reportlab.platypus import Image

class HyperlinkedImage(Image, object):

    # The only variable I added to __init__() is hyperlink. I default it to None for the if statement I use later.
    def __init__(self, filename, hyperlink=None, width=None, height=None, kind='direct', mask='auto', lazy=1):
        super(HyperlinkedImage, self).__init__(filename, width, height, kind, mask, lazy)
        self.hyperlink = hyperlink

    def drawOn(self, canvas, x, y, _sW=0):
        if self.hyperlink: # If a hyperlink is given, create a canvas.linkURL()
            x1 = self.hAlignAdjust(x, _sW) # This is basically adjusting the x coordinate according to the alignment given to the flowable (RIGHT, LEFT, CENTER)
            y1 = y
            x2 = x1 + self._width
            y2 = y1 + self._height
            canvas.linkURL(url=self.hyperlink, rect=(x1, y1, x2, y2), thickness=0, relative=1)
        super(HyperlinkedImage, self).drawOn(canvas, x, y, _sW)

而不是创建一个reportlab.platypus.Image由于您的图像可以流动,请改用新的HyperlinkedImage:)

相关问题 更多 >