44 lines
1.3 KiB
Python
Executable file
44 lines
1.3 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
|
|
import os
|
|
import re
|
|
from argparse import ArgumentParser
|
|
|
|
# PDF conversion backends
|
|
import pdfkit
|
|
import weasyprint
|
|
|
|
|
|
# CLI arguments
|
|
parser = ArgumentParser()
|
|
parser.add_argument('--backend', '-b', help = 'change the download backend', default = 'pdfkit', choices = ['pdfkit', 'weasyprint'])
|
|
parser.add_argument('--force', '-f', help = 'force download all links', action='store_false')
|
|
args = parser.parse_args()
|
|
|
|
|
|
for filename in os.listdir('Links'):
|
|
print('Examining: ' + filename)
|
|
os.makedirs(filename, exists_ok=True)
|
|
|
|
section = ''
|
|
for link in open(os.path.join('Links', filename), 'r').readlines():
|
|
if link[0:2] == '# ':
|
|
section = link[2:]
|
|
if link[0] == '#' or link[0] == '\n':
|
|
continue
|
|
|
|
name = section + ' - ' + re.sub(r'(?u)[^-\w.]', '', link[5:]) + '.pdf'
|
|
if not os.path.exists(os.path.join('Links', name)) or args.force:
|
|
print('Downloading: ' + link[:-1])
|
|
print('Destination: ' + name)
|
|
|
|
# Time to print!
|
|
try:
|
|
if args.backend == 'pdfkit':
|
|
pdfkit.from_url(link, name)
|
|
else:
|
|
pdf = weasyprint.HTML(link).write_pdf()
|
|
open(name, 'wb').write(pdf)
|
|
except:
|
|
print('Error when printing 😱')
|