Ich wollte einen gewissen Platz zwischen jeder Zeichenfolge haben, sodass ich eine Funktion wie unten machte und String zeichnete.

from io import BytesIO
from reportlab.pdfgen import canvas
from reportlab.lib.units import mm
from reportlab.lib.pagesizes import A4, landscape

bytes = BytesIO()
c = canvas.Canvas(bytes, pagesize=landscape(A4))

def map_each(text,x,y,w):
    for moji in text:
        c.drawString((x+w*text.index(moji))*mm,y*mm,str(moji))

fontname="Times-Roman"
p2="299"
p4="1950"
cha="261"
classification="抹"
               
c.setFont(fontname,12)
# c.drawString(58*mm,160*mm,p2)
map_each(p2, 58, 160, 6)
map_each(p4, 94, 160, 6)
map_each(cha, 124, 160, 6)
if classification=="抹":
    syubetsu="11"
elif classification=="車":
    syubetsu=" 3"
map_each(syubetsu,43,190,7)

c.save()

with open("output.pdf", "wb") as f:
    f.write(bytes.getbuffer())

Und dann bekomme ich das.

"1 1" ist "1" und "2 9 9" ist "2 9", während "1 9 5 0" oder "2 6 1" sind, sind "1 9 5 0" und "2 6 1" einfach gut

Wenn ich nur Kordelzug wie das, wie ich, den habe ich jeden Buchstaben in einer Schleife kommentiert oder drucke, um sicherzustellen, dass "1 1" und "2 9 9" dort sind.

Ist es möglich, dass ReportLab manchmal nicht zuzüglich der nächsten Zeichnung ziehen kann? Nur manchmal???

0
Kantumrobot 3 Juni 2021 im 01:21

1 Antwort

Beste Antwort

text.index Gibt das erste Ereignis in der Zeichenfolge zurück, versuchen Sie dies stattdessen:

for index, moji in enumerate(text):
    c.drawString((x+w*index)*mm, y*mm, moji)
0
Androbin 2 Juni 2021 im 22:39