2016-01-29 18 views
8

私はフッターのように左下に行を追加する必要があるPDFファイルを作成する必要があります。PDFの下部(フッター)に複数の行を追加するにはどうすればよいですか?

次のコードが働いている:

import StringIO 
from reportlab.pdfgen import canvas 
import uuid 

def test(pdf_file_name="abc.pdf", pdf_size=(432, 648), font_details=("Times-Roman", 9)): 
    # create a new PDF with Reportla 
    text_to_add = "I am writing here.." 
    new_pdf = "test_%s.pdf"%(str(uuid.uuid4())) 

    packet = StringIO.StringIO() 
    packet.seek(0) 

    c = canvas.Canvas(pdf_file_name, pagesize = pdf_size) 
    #- Get the length of text in a PDF. 
    text_len = c.stringWidth(text_to_add, font_details[0], font_details[1]) 
    #- take margin 20 and 20 in both axis 
    #- Adjust starting point on x axis according to text_len 
    x = pdf_size[0]-20 - text_len 
    y = 20 
    #- set font. 
    c.setFont(font_details[0], font_details[1]) 
    #- write text, 
    c.drawString(x, y, text_to_add) 

    c.showPage() 
    c.save() 
    return pdf_file_name 

今、テキストはテキストの長さがページサイズの幅よりも大きいので、これは動作していない複数の行を持っている場合。理解しています。私はFrameparagraphと試みるが、まだ続いPDFで

を正しい位置にテキストを書き込むことができません

はコードです:私は設定しているため

from reportlab.lib.pagesizes import letter 
from reportlab.lib.styles import getSampleStyleSheet 
from reportlab.platypus import BaseDocTemplate, Frame, PageTemplate, Paragraph 

styles = getSampleStyleSheet() 
styleN = styles['Normal'] 
styleH = styles['Heading1'] 

def footer(canvas, doc): 
    canvas.saveState() 
    P = Paragraph("This is a multi-line footer. It goes on every page. " * 10, styleN) 
    w, h = P.wrap(doc.width, doc.bottomMargin) 
    print "w, h:", w, h 
    print "doc.leftMargin:", doc.leftMargin 
    P.drawOn(canvas, 10, 30) 
    canvas.restoreState() 

def test(): 
    doc = BaseDocTemplate('test.pdf', pagesize=(432, 648)) 
    print "doc.leftMargin:", doc.leftMargin 
    print "doc.bottomMargin:", doc.bottomMargin 
    print "doc.width:", doc.width 
    print "doc.height:", doc.height 
    frame = Frame(10, 50, 432, 648, id='normal') 
    template = PageTemplate(id='test', frames=frame, onPage=footer) 
    doc.addPageTemplates([template]) 

    text = [] 
    for i in range(1): 
     text.append(Paragraph("", styleN)) 

    doc.build(text) 

は、ページ変更の理由大きさを理解していません(432, 648)しかし(288.0, 504.0)

doc.leftMargin: 72.0 
doc.bottomMargin: 72.0 
doc.width: 288.0 
doc.height: 504.0 

を示していますまた、フレームサイズ:

w, h: 288.0 96 
doc.leftMargin: 72.0 

この問題を解決する方法がわかりません。 thisリンク

答えて

関連する問題