ReportLab:如何将图像集中在画布上



尝试将图像集中在此处。现在,我能够以X轴为中心,但是我无法将实际图像集中在该点上。相反,它在页面中心启动图像。

from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.pagesizes import letter
from reportlab.lib.units import inch
from reportlab.lib.units import mm
from reportlab.platypus import Image
from reportlab.lib.enums import TA_JUSTIFY
from reportlab.lib.utils import ImageReader
from reportlab.pdfgen import canvas
Width, Height = letter
styles = getSampleStyleSheet()
Title = "Comparison Index"
pageinfo = "platypus example"
BTRLogo = 'BTALogo.png'
PartnerLogo = 'PartnerLogo.png'
ClientLogo = 'ClientLogo.png'
Graph1 = 'PlanOffered.jpg'

# Define the fixed features of the first page of the document
def myFirstPage(canvas, doc):
    canvas.saveState()
    canvas.setFillColorCMYK(0.68, 0.44, 0, 0.41)
    canvas.setFontSize(22)
    canvas.setFont('Helvetica-Bold', 36)
    canvas.drawString(40, 670, 'Health & Welfare')
    canvas.setFont('Helvetica-Bold', 24)
    canvas.drawString(40, 625, 'Benchmark Comparison Report')
    canvas.setFont('Helvetica', 16)
    canvas.drawString(40, 550, 'Prepared for:')
    canvas.drawString(40, 400, 'Prepared on:') #INSERY DYNAMIC DATE****
    canvas.drawImage(BTRLogo,480,18,width=100,height=66.62,mask='auto') 
    #Logo is measured and good to go
    canvas.drawImage(PartnerLogo, 10, Height/5, width=Width/1.2, 
    preserveAspectRatio=True, mask='auto') #MAKE SURE IMAGE IS DYNAMIC AND HAS MAX SETS
    canvas.setStrokeColorCMYK(0.68,0.44,0,0.41)
    canvas.setLineWidth(7)
    canvas.line(40,112,570,112)

# Since we want pages after the first to look different from the first we define an alternate layout for
# the fixed features of the other pages.
# Note that the two functions use the pdfgen level canvas operations to paint the annotations for the pages.
def myLaterPages(canvas, doc):
    canvas.saveState()
    canvas.setFont('Times-Roman', 23)
    page_num = canvas.getPageNumber()
    text = "Page #%s" % page_num
    canvas.drawRightString(200 * mm, 20 * mm, text)
    canvas.restoreState()
def myThirdPages(canvas, doc):
    canvas.saveState()
    canvas.setFont('Times-Roman', 9)
    canvas.drawString(inch, 0.75 * inch, "Page %d %s")
    canvas.restoreState()
# Create a story and build the document
def createMultiPage():
    doc = SimpleDocTemplate("Comparison Index.pdf", pagesize=letter, rightMargin=72, leftMargin=72, topMargin=72, bottomMargin=18)
    style = styles["Normal"]
    styles.add(ParagraphStyle(name='Justify', alignment=TA_JUSTIFY))
    Story = [Spacer(1, 2 * inch)]
    doc.build(Story, onFirstPage=myFirstPage, onLaterPages=myLaterPages)
if __name__ == "__main__":
    createMultiPage()

因此,在一天结束时,我需要确保我的图像以X轴为中心。特别是合作伙伴。该徽标需要就在以表面的线上和居中为中心。请帮助!

您在这里有几个选项。如果您只想将图像中心居中,并且该行的位置是固定的,则可以根据行的位置绘制图像:

line_x_start = 40
line_width = 530
line_y = 112
canvas.setStrokeColorCMYK(0.68,0.44,0,0.41)
canvas.setLineWidth(7)
canvas.line(line_x_start, line_y,
            line_x_start+line_width, line_y)
canvas.drawImage(PartnerLogo, line_x_start, line_y, width=line_width, 
                 preserveAspectRatio=True, mask='auto') 

如果您要小于行的全宽度小的徽标,则可以在line_x_start 某些缓冲区处启动图像,并设置width = line_width - some_buffer*2

此外,在绘制文档中,有一个选择将图像固定在边界框的中心,因此您可以做类似的事情:

canvas.drawImage(PartnerLogo, line_x_start, line_y, width=line_width, 
                 preserveAspectRatio=True, mask='auto', anchor='c') 

最新更新