aboutsummaryrefslogtreecommitdiff
path: root/annotation-summary.py
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)