blob: 969874b8802ce21329efaea45c39051d1ecd79dd (
plain)
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
#!/usr/bin/env python3
import argparse
import os
import pdfkit
import popplerqt5
def extract(fn, show=False):
doc = popplerqt5.Poppler.Document.load(fn)
annotations = {}
for i in range(doc.numPages()):
annotations[i] = []
for annot in doc.page(i).annotations():
annotations[i].append(annot)
return annotations
def generate_pdf(annotations, destination="annotations.pdf", pagesize="A4"):
options = {
'page-size': pagesize,
'encoding': "utf-8",
'margin-top': '0.75in',
'margin-right': '0.75in',
'margin-bottom': '0.75in',
'margin-left': '0.75in',
}
blocks = """
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
"""
pages = list(annotations.keys())
pages.sort()
for page in pages:
for annotation in annotations[page]:
content = annotation.contents()
if not content:
continue
author = annotation.author()
if author != "":
header = f"<span>Page: {page + 1}</span> | <span>Author: {author}</span>"
else:
header = f"<span>Page: {page + 1}</span>"
blocks += f"""
<div style="border: 1px solid #300;">
{header}<br/>
<hr/>
<div style="white-space: pre-wrap;">{content}</div>
</div>
<br/>
"""
blocks += """
</body>
</html>
"""
if os.path.exists(destination):
print(f"Error: {destination} already exists. Quitting.")
else:
pdfkit.from_string(blocks, destination, options=options)
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('source')
args = parser.parse_args()
annotations = extract(args.source, show=True)
generate_pdf(annotations)
|