奇怪的行为......只有一些文本无法在循环中用reporlab绘制
Strange Behavior...Only some text cannot be drawn with reporlab in a loop
我想在每个字符串之间有一定的 space 所以我做了一个如下所示的函数并绘制了字符串。
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())
然后我明白了。
"1 1" is "1 " and "2 9 9" is "2 9 " while "1 9 5 0" or "2 6 1" are "1 9 5 0" and "2 6 1" just fine
如果我只是像我注释掉的那样使用 drawString 或循环打印每个字母以确保,
“1 1”和“2 9 9”在那里。
reportlab 有时不能将字符串绘制得离下一个太近吗?
只是有时候???
text.index
returns 字符串中的第一次出现,试试这个:
for index, moji in enumerate(text):
c.drawString((x+w*index)*mm, y*mm, moji)
我想在每个字符串之间有一定的 space 所以我做了一个如下所示的函数并绘制了字符串。
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())
然后我明白了。
"1 1" is "1 " and "2 9 9" is "2 9 " while "1 9 5 0" or "2 6 1" are "1 9 5 0" and "2 6 1" just fine
如果我只是像我注释掉的那样使用 drawString 或循环打印每个字母以确保, “1 1”和“2 9 9”在那里。
reportlab 有时不能将字符串绘制得离下一个太近吗? 只是有时候???
text.index
returns 字符串中的第一次出现,试试这个:
for index, moji in enumerate(text):
c.drawString((x+w*index)*mm, y*mm, moji)