Die Frage mag einfach erscheinen, aber ich konnte nichts damit zu finden: < /p>
So starten Sie den Seitennummerierungsindex auf einer bestimmten Seite? Wie kann ich die Seitennummerierung im ersten Abschnitt dieses Dokuments beginnen, anstatt sie auf der ersten Seite zu starten?import os
from reportlab.lib.pagesizes import A4
from reportlab.platypus import BaseDocTemplate, PageTemplate, Frame, Paragraph, PageBreak, NextPageTemplate
from reportlab.platypus.tableofcontents import TableOfContents
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import inch # Importing inch unit
class Example(BaseDocTemplate):
def __init__(self, fname, **kwargs):
super().__init__(fname, **kwargs)
frame_example = Frame(self.leftMargin - 0.5*inch,
self.bottomMargin + 0.25*inch,
self.width + 1*inch,
self.height - 0.5*inch,
id='example')
# Define some page templates to display the page number
self.addPageTemplates([PageTemplate(id='front_page', frames=frame_example, onPage=self.doFootingsFrontPage),
PageTemplate(id='other_pages', frames=frame_example, onPage=self.doFootings)])
self.elements = []
# Defining some basic paragrah styles for the example
ps1 = ParagraphStyle(fontName='Helvetica', fontSize=14, name='frontPage_PS',
leftIndent=20, firstLineIndent=-20, spaceBefore=5, leading=16)
ps2 = ParagraphStyle(fontName='Helvetica', fontSize=12, name='header_PS',
leftIndent=20, firstLineIndent=-20, spaceBefore=5, leading=16)
ps3 = ParagraphStyle(fontName='Helvetica', fontSize=10, name='text_PS',
leftIndent=20, firstLineIndent=-20, spaceBefore=5, leading=16)
# Storing the styles into a class attribute so that we can call them later on
self.styleSheet = getSampleStyleSheet()
for style in [ps1, ps2, ps3]:
self.styleSheet.add(style)
# Generate the front page
self.doFrontPage()
# Initialize the TOC
toc = TableOfContents(dotsMinLevel=0)
toc.levelStyles = [self.styleSheet['header_PS']]
# Add the TOC
self.elements.append(toc)
self.elements.append(PageBreak())
for n in range(2):
self.doOtherPage(n)
# Build the document
self.multiBuild(self.elements)
def afterFlowable(self, flowable):
"Registers TOC entries."
if flowable.__class__.__name__ == 'Paragraph':
text = flowable.getPlainText()
style = flowable.style.name
if style == 'header_PS':
self.notify('TOCEntry', (0, text, self.page))
def doFootings(self, canvas, doc):
# Create the footer
x = A4[0]-128
y = 40
canvas.saveState()
txtFooting = "Page {}".format(int(canvas._pageNumber))
canvas.drawString(x, y, txtFooting)
canvas.restoreState()
def doFootingsFrontPage(self, canvas, doc):
# Create the footer
x = 50
y = 40
canvas.saveState()
txtFooting = "I am the front page - I dont want to have a page number"
canvas.drawString(x, y, txtFooting)
canvas.restoreState()
def doFrontPage(self):
txt = 'This is the front page'
self.elements.append(Paragraph(txt, self.styleSheet['frontPage_PS']))
self.elements.append(NextPageTemplate("other_pages"))
self.elements.append(PageBreak())
def doOtherPage(self, n):
txt = 'Header {:.0f}'.format(n+1)
self.elements.append(Paragraph(txt, self.styleSheet['header_PS']))
txt ='Who stole my page number? I should be Page {:.0f}'.format(n+1)
for ii in range(10):
self.elements.append(Paragraph(txt, self.styleSheet['text_PS']))
self.elements.append(PageBreak())
if __name__ == '__main__':
fname = os.path.abspath(os.path.join('.', 'example_reportlab.pdf'))
Report = Example(fname)
< /code>
In diesem Beispiel wird ein PDF mit 4 Seiten generiert, die Titelseite, die Inhaltstabelle und zwei Füllabschnitte für das Beispiel. Ich möchte die Seitennummerierung im ersten Abschnitt des Dokuments (das derzeit die Seite 3 ist) erhalten und in der Inhaltstabelle (d. H. Header 1 würde sich auf Seite 1, Header 2 Seite 2 ...) widerspiegeln lassen. Oder noch besser, in der Lage sein, die ersten Seiten I, II, III ... dann zu einem neuen Nummerierungsschema 1, 2, 3 zu wechseln ... Wenn ein bestimmter Teil des Dokuments erreicht ist. Ich habe dieses Beispiel gefunden, das besagt: < /p>
In Dokumenten in realer Welt gibt es eine weitere Komplikation. Möglicherweise haben Sie eine ausgefallene Abdeckung oder ein schickes Cover oder eine vordere Materie, und die logische Seite Nr. 1, die im Druck verwendet wird, ist möglicherweise nicht tatsächlich Seite 1. Ebenso machen Sie möglicherweise eine Charge von Kundendokumenten in einem RML -Job. In diesem Fall haben wir also einen besseren Ausdruck und verwenden das Evalstring -Tag, um die gewünschte Nummer zu ermitteln. In this example we did this by creating a name for the first page after the cover,
-+1
...
In diesem heißt 'trainieren Sie die Seitennummer des Covers, fügen Sie 1 hinzu, und speichern Sie diese in der Variablen "Seite1" für die zukünftige Verwendung "< /p>
< /blockquote>
, aber ich konnte nichts daraus machen. Ich habe mir auch die von der Bibliothek implementierten Tests angesehen (test_platypus_toc.py für ein Beispiel), fand aber nichts Relevantes für meine Frage. fälschlicherweise).
Ändern des Seitennummerierungsindex in ReportLab ⇐ Python
-
- Similar Topics
- Replies
- Views
- Last post