Devo creare un file PDF in cui è necessario aggiungere righe in basso a sinistra come il piè di pagina.Come aggiungere più righe nella parte inferiore (piè di pagina) del PDF?
seguito il codice sta lavorando:
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
Ora, se il testo dispone di più linee, allora questo non funziona perché la lunghezza del testo è superiore alla larghezza del formato pagina. Inteso.
provo con Frame
e paragraph
, ma ancora non è possibile scrivere il testo in posizione corretta in un PDF
seguito riporta il codice:
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)
non capisco perché dimensione della pagina cambiano, perché ho impostato (432, 648)
ma è mostrare (288.0, 504.0)
doc.leftMargin: 72.0
doc.bottomMargin: 72.0
doc.width: 288.0
doc.height: 504.0
Anche dimensione frame:
w, h: 288.0 96
doc.leftMargin: 72.0
Non so come risolvere questo problema. Mi riferisco this collegamento
ok controllerò e ti farò sapere. L'ho fatto per fotogramma funziona. ma se ci sono 5 linee e come trovare la posizione di partenza è il mio problema ora. –
La posizione iniziale del 'paragrafo 'è in basso a sinistra come sempre nel laboratorio di report. Quando aggiungi più linee, il 'paragrafo 'inizierà a crescere verticalmente ma rimarrà attaccato all'angolo in basso a sinistra. Se hai bisogno di conoscere l'angolo in alto a destra puoi usare 'P.height' in combinazione con la posizione di partenza in questo caso 10. – B8vrede
@VivekSable Lo hai chiarito? Posso aggiungerlo alla risposta, se vuoi. – B8vrede