Amélioration de la génération de PDF
- Mise à jour automatique du nombre de pages dans le CSS - Intégration des bookmarks dans le PDF final
This commit is contained in:
parent
69e29917de
commit
ca4d9a1518
3 changed files with 60 additions and 2 deletions
24
sphinx-tools/count_pdf_pages.py
Normal file
24
sphinx-tools/count_pdf_pages.py
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
import subprocess
|
||||
import re
|
||||
|
||||
pdf_filename = 'build/weasyprint/index.pdf'
|
||||
css_filename = 'source/css/print-theme.css'
|
||||
additional_pages = 2
|
||||
|
||||
# count pages in index.pdf
|
||||
pdfinfo = subprocess.run(['pdfinfo', pdf_filename], stdout=subprocess.PIPE)
|
||||
pages_match = re.search('\\nPages:\s+([0-9]+)\\n', pdfinfo.stdout.decode())
|
||||
num_pages = int(pages_match.group(1))
|
||||
print('index.pdf: ' + str(num_pages) + ' pages')
|
||||
|
||||
num_pages = num_pages + additional_pages # account for table of content that will be added later
|
||||
|
||||
# update the CSS file with the correct number of pages
|
||||
|
||||
with open(css_filename) as css_file:
|
||||
css = css_file.read()
|
||||
|
||||
css = re.sub('content: counter\(page\) "/[0-9]+";', 'content: counter(page) "/'+str(num_pages)+'";', css)
|
||||
|
||||
with open(css_filename, 'w') as css_file:
|
||||
css_file.write(css)
|
||||
28
sphinx-tools/update_pdf_bookmarks.py
Normal file
28
sphinx-tools/update_pdf_bookmarks.py
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
import sys
|
||||
import subprocess
|
||||
import re
|
||||
|
||||
extract_bookmarks_from = sys.argv[1]
|
||||
source_pdf_filename = sys.argv[2]
|
||||
output_filename = sys.argv[3]
|
||||
|
||||
bookmarks_filename = extract_bookmarks_from.replace('.pdf', '.txt')
|
||||
assert(bookmarks_filename != extract_bookmarks_from)
|
||||
|
||||
# extract PDF metadata into a text file
|
||||
subprocess.run(['pdftk', extract_bookmarks_from, 'dump_data', 'output', bookmarks_filename])
|
||||
|
||||
with open(bookmarks_filename) as bookmarks_file:
|
||||
metadata = bookmarks_file.read()
|
||||
|
||||
# Offset page numbers
|
||||
def replaceBookmarkPageNumber(match):
|
||||
initial_page = int(match.group(1))
|
||||
return 'BookmarkPageNumber: ' + str(initial_page + 2)
|
||||
metadata = re.sub('BookmarkPageNumber:\s+([0-9]+)', replaceBookmarkPageNumber, metadata)
|
||||
|
||||
with open(bookmarks_filename, 'w') as bookmarks_file:
|
||||
bookmarks_file.write(metadata)
|
||||
|
||||
# generate the output PDF
|
||||
subprocess.run(['pdftk', source_pdf_filename, 'update_info', bookmarks_filename, 'output', output_filename])
|
||||
Loading…
Add table
Add a link
Reference in a new issue