好吧,我多年来一直在这里寻求帮助,现在我终于有一个未涵盖的问题。我正在尝试从我的 AS/400 打印队列中获取一个 .txt 文件(这里没有问题),并将每个“页面”输出为 PDF(下一步是将它们合并到一个文件中)。我已经完成了格式化部分,我可以正确地创建一个单页文档而没有任何问题。
我采用了生成单页的代码,并将其扩展为在使用 adobe writer“打印”时处理包含多页的文件。下面的代码在特定位置使 python 崩溃(向 Windows 报告错误),我只是在寻找有关原因的说明。我当前的代码非常草率,我主要是首先寻找功能,并且我确实计划重写其中的大部分内容。
输入()和打印()在那里,所以我可以看到发生任何错误的地方
导致崩溃的部分:
for line in lineDict[x]:
context.show_text(line)
yPos += 14
context.move_to(10, yPos)
context.show_page()
surface.finish()
print(line) #Testing where crash occurs
以下是完整程序
import cairo
width, height = 792,612
myText=open("QSYSPRT120972.txt","r")
yPos = 10
lineList=[]
lineDict=dict()
x=0
surface = cairo.PDFSurface(outPDF+".pdf", width, height)
context = cairo.Context(surface)
context.set_source_rgb( 1, 1, 1)
context.rectangle(0, 0, width, height)
context.fill()
context.set_font_size(8)
context.select_font_face( "Courier")
context.move_to(10, yPos)
context.set_source_rgb(0, 0, 0)
lineList=[str(line.replace('\x00', '').encode("ascii", "ignore")).lstrip('b\'').replace('\\n','').rstrip("'").replace(' ',' ') for line in myText]
outPDF=lineList[0]
outPDF=outPDF[0:6]#Get the file name from the first line on each page
input("Press Enter to continue")
print(lineList[0])
while '' in lineList:
lineList.remove('')
ll=';'.join(lineList)
#print(ll)
LoL=ll.split(outPDF)
LoL.remove('')
input("Press enter")
for pages in LoL:
yPos = 10
outPDF=lineList[0]
outPDF=outPDF[0:6]
LoL[x]=outPDF+lol[x]
LoL[x].split(";;")
outPDF=outPDF+str(x)# Not the best way to do this, but its okay for now
tempLOL=LoL[x]
tempLOL=tempLOL.split(";")
while '' in tempLOL:
tempLOL.remove('')
print(tempLOL) #More testing
lineDict[x]=tempLOL
for line in lineDict[x]: #Crash happens here. Works fine if I just print each line to console
context.show_text(line)
yPos += 14
context.move_to(10, yPos)
context.show_page()
surface.finish()
print(line) #Testing where crash occurs
x+=1
print("File: "+outPDF+".pdf Created!")
#print(lineDict)
input()
仅输出单页 PDF 的版本
import cairo
width, height = 792,612
myText=open("QSYSPRT120972.txt","r")
yPos = 10
lineList=[]
lineList=[str(line.replace('\x00', '').encode("ascii", "ignore")).lstrip('b\'').replace('\\n','').rstrip("'").replace(' ',' ') for line in myText]
outPDF=lineList[0]
outPDF=outPDF[0:6]
surface = cairo.PDFSurface( outPDF+".pdf", width, height)
context = cairo.Context( surface)
context.set_source_rgb( 1, 1, 1)
context.rectangle( 0, 0, width, height)
context.fill()
context.set_font_size(8)
context.select_font_face( "Arial")
context.move_to( 10, yPos)
context.set_source_rgb( 0, 0, 0)
while '' in lineList:
lineList.remove('')
for line in lineList:
context.show_text(line)
yPos += 14
context.move_to(10, yPos)
context.show_page()
surface.finish()
print("File: "+outPDF+".pdf Created!")
这确实是我发现的关于这个问题的唯一相关问题,但是从我正在做的所有 print() 中,我知道我的列表每次迭代都设置为正确的数据。
FWIW 我在 Windows XP 上。
谢谢。