1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
#!/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 😱')
|