oloturia2pdf/oloturia2special.py
2023-03-27 22:43:48 +02:00

197 lines
5.7 KiB
Python
Executable file

#!/usr/bin/env python3
import json
import os.path
import html2text
import locale
import PyPDF2
import html
locale.setlocale(locale.LC_TIME, 'it_IT.UTF-8')
def copertina(text):
from PyPDF2 import PdfFileWriter, PdfFileReader
import io
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A5
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfbase.pdfmetrics import stringWidth
FONT = 'Roboto'
SIZE = 36
packet = io.BytesIO()
# create a new PDF with Reportlab
pdfmetrics.registerFont(TTFont("Roboto", "template/roboto-regular-webfont.ttf"))
can = canvas.Canvas(packet, pagesize=A5)
can.setFont(FONT, SIZE)
PAGE_WIDTH = A5[0]
text_width = stringWidth(text,FONT, SIZE)
can.drawString((PAGE_WIDTH - text_width) / 2, 100, text)
can.save()
#move to the beginning of the StringIO buffer
packet.seek(0)
new_pdf = PdfFileReader(packet)
# read your existing PDF
existing_pdf = PdfFileReader(open("copertina.pdf", "rb"))
output = PdfFileWriter()
# add the "watermark" (which is the new pdf) on the existing page
page = existing_pdf.getPage(0)
page.mergePage(new_pdf.getPage(0))
output.addPage(page)
return(page)
def indice(text):
# PDF GENERATION LIBRARIES
# import the report lab PDF generation tools
from reportlab.lib.pagesizes import letter
from reportlab.lib.styles import ParagraphStyle
from reportlab.lib.units import inch
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, PageBreak
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.lib.pagesizes import A5
import io
from PyPDF2 import PdfFileWriter, PdfFileReader
parts = []
pdfmetrics.registerFont(TTFont("Roboto", "template/roboto-regular-webfont.ttf"))
style = ParagraphStyle(
name='Normal',
fontName='Roboto',
fontSize=12,
leading = 14,
leftIndent=32,
firstLineIndent=-32,
spaceBefore=5
)
for ro in text.splitlines():
ro = ro.replace(' ',' ')
ro = ro.replace('\t','    ')
parts.append(Paragraph(ro, style = style))
packet = io.BytesIO()
doc = SimpleDocTemplate(packet,
pagesize=A5,
rightMargin=20,
leftMargin=20,
topMargin=40,
bottomMargin=30)
doc.build(parts)
pdfReader = PdfFileReader(packet)
pdfWriter = PdfFileWriter()
for page in pdfReader.pages:
pdfWriter.addPage(page)
pdfWriter.addBlankPage()
return([pdfWriter.getPage(0),pdfWriter.getPage(1)])
def main():
specialbooks = [
["Migliori per anno", "454 558 592 514 446 477 163 297 681 178 201 391 323 140 199 207 200 128 249 552 289 537 436 520 102 231 069 139 059 293 160 172 375 341 244 002 094 318 157 004 515 665 642 700 325 358 363 493 668"],
["Peggiori per anno", "171 014 034 205 277 596 043 584 476 671 132 697 174 485 589 301 137 237 159 185 027 437 284 496 466 644 380 299 676 652 166 229 488 336 210 421 632 609 576 475 360 527"],
]
with open('oloturiadump.json') as json_file:
all_vgos = json.load(json_file)
os.makedirs('media', exist_ok=True)
vgo_dict={}
for vgo in all_vgos:
vgo_num = html2text.html2text(vgo['content']).split(' ')[0]
# print(vgo['content'].split("<br />")[-1])
# print(vgo['content'].split("<p>")[-1])
# vgo_name = os.linesep.join([s for s in html2text.html2text(vgo['content']).splitlines() if s]).splitlines()[-1]
# if len(vgo_name) < 10:
# vgo_name = [s for s in html2text.html2text(vgo['content']).split("\n\n") if s][-1].replace("\n"," ")
vgo_name = vgo['content'].split("<p>")[-1].replace("</p>","")
vgo_name = vgo_name.split("<br />")[-1]
vgo_name = vgo_name.split("</a>")[-1]
vgo_name = html.unescape(vgo_name).strip()
# print(vgo_num + " " + vgo_name)
vgo_dict[vgo_num] = vgo_name
print("Genero i libretti")
os.makedirs('books', exist_ok=True)
for book in specialbooks:
book_title = book[0]
vgo_list = book[1]
book_name = book_title.strip().replace(" ","_").lower()
book_name = os.path.join('books', 'vgo_' + book_name + '.pdf')
# if not os.path.isfile(book_name):
pdfWriter = PyPDF2.PdfFileWriter()
print(book_name)
# aggiungere copertina
pdfWriter.addPage(copertina(book_title))
pdfWriter.addBlankPage()
indtext = ""
for vgo_num in vgo_list.split():
pdf_name = os.path.join('pdf', vgo_num + '.pdf')
try:
#print(vgo_num + " - " + vgo_dict[vgo_num])
indtext = indtext + vgo_num + "\t" + vgo_dict[vgo_num] + "\n"
pdfFileObj = open(pdf_name, 'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
pageObj = pdfReader.getPage(0)
pdfWriter.addPage(pageObj)
except:
pass
for i in range(0, ((8 - (len(vgo_list.split()) + 5)) % 8)):
pdfWriter.addBlankPage()
# aggiungere indice
for indpag in indice(indtext):
pdfWriter.addPage(indpag)
#Aggiungere pagina finale
#pdfWriter.addBlankPage()
pdfFileObj = open("quarta.pdf", 'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
pageObj = pdfReader.getPage(0)
pdfWriter.addPage(pageObj)
with open(book_name, 'wb') as pdfOutput:
pdfWriter.write(pdfOutput)
if __name__ == "__main__":
main()