2

わかりました、私は何年も助けを求めてここに来ていましたが、ついにカバーされていない質問があります. AS/400 印刷キューから .txt ファイルを取得して (ここでは問題ありません)、各「ページ」を PDF として出力しようとしています (次のステップでは、それらを 1 つのファイルにマージします)。書式設定の部分を下ろすと、1 ページのドキュメントを問題なく正しく作成できます。

単一のページを生成するコードを使用して、adobe Writer で「印刷」したときに複数のページを含むファイルを処理できるように拡張しました。以下のコードは、特定の場所で python (エラーを Windows に報告) をクラッシュさせます。その理由を説明したいと思います。私の現在のコードは非常にずさんです。主に最初に機能を探しています。これのほとんどを書き直す予定です。

input() と print() があるので、エラーが発生した場所を確認できます

クラッシュを引き起こすセクション:

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() から、繰り返しごとにリストが正しいデータに設定されていることがわかります。

python:ファイルを開き、リストに行を送り、リストデータを処理する

FWIW 私は Windows XP を使用しています。

ありがとう。

4

0 に答える 0