From 9a51fc37c875afbe9ebf58e0242ffb0f51c9b2cd Mon Sep 17 00:00:00 2001 From: Ping-uu Date: Mon, 11 Jan 2021 00:53:09 +0100 Subject: [PATCH] Pdf engine rewrited using xhtml2pdf --- .gitignore | 1 + maigret/report.py | 19 ++- maigret/resources/simple_report_pdf.css | 154 ++++++------------------ maigret/resources/simple_report_pdf.tpl | 91 +++++++------- requirements.txt | 27 ++--- 5 files changed, 107 insertions(+), 185 deletions(-) diff --git a/.gitignore b/.gitignore index 3bf7f81..919b269 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,4 @@ tests/.excluded_sites # MacOS Folder Metadata File .DS_Store +/reports/ diff --git a/maigret/report.py b/maigret/report.py index 75e7769..6211995 100644 --- a/maigret/report.py +++ b/maigret/report.py @@ -3,9 +3,10 @@ from datetime import datetime import logging import os import xmind +import io +from xhtml2pdf import pisa from jinja2 import Template -from weasyprint import HTML, CSS import pycountry @@ -177,8 +178,20 @@ def save_html_pdf_report(username_results: list, filename:str=None, filenamepdf: supposed_data=filtered_supposed_data, generated_at=datetime.now().strftime('%Y-%m-%d %H:%M:%S'), ) - HTML(string=filled_template).write_pdf(filenamepdf, stylesheets=[CSS(filename=os.path.join(os.path.dirname(os.path.realpath(__file__)), - "resources/simple_report_pdf.css"))]) + csstext = "" + with open(os.path.join(os.path.dirname(os.path.realpath(__file__)), + "resources/simple_report_pdf.css"), "r") as cssfile: + cssline = cssfile.readline() + csstext += cssline + while cssline: + cssline = cssfile.readline() + csstext += cssline + cssfile.close() + + pdffile = open(filenamepdf, "w+b") + pisa.pisaDocument(io.StringIO(filled_template), dest=pdffile, default_css=csstext) + pdffile.close() + def save_csv_report_to_file(username: str, results: dict, csvfile): print(results) diff --git a/maigret/resources/simple_report_pdf.css b/maigret/resources/simple_report_pdf.css index 291df93..9fda1b4 100644 --- a/maigret/resources/simple_report_pdf.css +++ b/maigret/resources/simple_report_pdf.css @@ -1,123 +1,41 @@ -/* -------------------------------------------------------------- - - typography.css - * Sets up some sensible default typography. - --------------------------------------------------------------- */ - -/* Default font settings. - The font-size percentage is of 16px. (0.75 * 16px = 12px) */ -html { font-size:100.01%; } -body { - font-size: 75%; - color: #222; - background: #fff; - font-family: "Helvetica Neue", Arial, Helvetica, sans-serif; +h2 { + font-size: 30px; + width: 100%; + display:block; +} +h3 { + font-size: 25px; + width: 100%; + display:block; +} +h4 { + font-size: 20px; + width: 100%; + display:block; +} +p { + margin: 0 0 5px; + display: block; } -/* Headings --------------------------------------------------------------- */ - -h1,h2,h3,h4,h5,h6 { font-weight: normal; color: #111; } - -h1 { font-size: 3em; line-height: 1; margin-bottom: 0.5em; } -h2 { font-size: 2em; margin-bottom: 0.75em; } -h3 { font-size: 1.5em; line-height: 1; margin-bottom: 1em; } -h4 { font-size: 1.2em; line-height: 1.25; margin-bottom: 1.25em; } -h5 { font-size: 1em; font-weight: bold; margin-bottom: 1.5em; } -h6 { font-size: 1em; font-weight: bold; } - -h1 img, h2 img, h3 img, -h4 img, h5 img, h6 img { - margin: 0; +table { + margin-bottom: 10px; + width:100%; +} +th { + font-weight: bold; +} +th,td,caption { + padding: 4px 10px 4px 5px; +} +table tr:nth-child(even) td, +table tr.even td { + background-color: #e5ecf9; } - -/* Text elements --------------------------------------------------------------- */ - -p { margin: 0 0 1.5em; } -/* - These can be used to pull an image at the start of a paragraph, so - that the text flows around it (usage:

Text

) - */ -.left { float: left !important; } -p .left { margin: 1.5em 1.5em 1.5em 0; padding: 0; } -.right { float: right !important; } -p .right { margin: 1.5em 0 1.5em 1.5em; padding: 0; } - -a:focus, -a:hover { color: #09f; } -a { color: #06c; text-decoration: underline; } - -blockquote { margin: 1.5em; color: #666; font-style: italic; } -strong,dfn { font-weight: bold; } -em,dfn { font-style: italic; } -sup, sub { line-height: 0; } - -abbr, -acronym { border-bottom: 1px dotted #666; } -address { margin: 0 0 1.5em; font-style: italic; } -del { color:#666; } - -pre { margin: 1.5em 0; white-space: pre; } -pre,code,tt { font: 1em 'andale mono', 'lucida console', monospace; line-height: 1.5; } - - -/* Lists --------------------------------------------------------------- */ - -li ul, -li ol { margin: 0; } -ul, ol { margin: 0 1.5em 1.5em 0; padding-left: 1.5em; } - -ul { list-style-type: disc; } -ol { list-style-type: decimal; } - -dl { margin: 0 0 1.5em 0; } -dl dt { font-weight: bold; } -dd { margin-left: 1.5em;} - - -/* Tables --------------------------------------------------------------- */ - -/* - Because of the need for padding on TH and TD, the vertical rhythm - on table cells has to be 27px, instead of the standard 18px or 36px - of other elements. - */ -table { margin-bottom: 1.4em; width:100%; } -th { font-weight: bold; } -thead th { background: #c3d9ff; } -th,td,caption { padding: 4px 10px 4px 5px; } -/* - You can zebra-stripe your tables in outdated browsers by adding - the class "even" to every other table row. - */ -tbody tr:nth-child(even) td, -tbody tr.even td { - background: #e5ecf9; -} -tfoot { font-style: italic; } -caption { background: #eee; } - - -/* Misc classes --------------------------------------------------------------- */ - -.small { font-size: .8em; margin-bottom: 1.875em; line-height: 1.875em; } -.large { font-size: 1.2em; line-height: 2.5em; margin-bottom: 1.25em; } -.hide { display: none; } - -.quiet { color: #b7b7b7; } -.loud { color: #000; } -.highlight { background:#ff0; } -.added { background:#060; color: #fff; } -.removed { background:#900; color: #fff; } - -.first { margin-left:0; padding-left:0; } -.last { margin-right:0; padding-right:0; } -.top { margin-top:0; padding-top:0; } -.bottom { margin-bottom:0; padding-bottom:0; } \ No newline at end of file +div { + border-bottom-color: #3e3e3e; + border-bottom-width: 1px; + border-bottom-style: solid; +} \ No newline at end of file diff --git a/maigret/resources/simple_report_pdf.tpl b/maigret/resources/simple_report_pdf.tpl index ae57e29..aa58ae5 100644 --- a/maigret/resources/simple_report_pdf.tpl +++ b/maigret/resources/simple_report_pdf.tpl @@ -1,17 +1,9 @@ - +type="text/css" {{ username }} -- Maigret username search report -
@@ -22,41 +14,41 @@ Generated at {{ generated_at }}
-
-
-
-
+
+
+
+

Supposed personal data

{% for k, v in supposed_data.items() %} - +

{{ k }}: {{ v }} - +

{% endfor %} {% if countries_tuple_list %} - +

Geo: {% for k, v in countries_tuple_list %}{{ k }} ({{ v }}){{ ", " if not loop.last }}{% endfor %} - +

{% endif %}{% if interests_tuple_list %} - +

Interests: {% for k, v in interests_tuple_list %}{{ k }} ({{ v }}){{ ", " if not loop.last }}{% endfor %} - +

{% endif %}{% if first_seen %} - +

First seen: {{ first_seen }} - +

{% endif %}
-
-
-
-
+
+
+
+

Brief

- +

{{ brief }} - +

@@ -64,26 +56,37 @@ {% for u, t, data in results %} {% for k, v in data.items() %} {% if v.found and not v.is_similar %} -
-
-
-
- Photo -
-

- {{ k }} -

- {% if v.status.tags %} -
Tags: {{ v.status.tags | join(', ') }}
- {% endif %} -

- {{ v.url_user }} -

+ +
+
+
+
+ + + + + + +
+ Photo + +
+

+ {{ k }} +

+ {% if v.status.tags %} +
Tags: {{ v.status.tags | join(', ') }}
+ {% endif %} +

+ {{ v.url_user }} +

+
+
{% if v.ids_data %} -
-

Details

+
+

Details

{% for k1, v1 in v.ids_data.items() %} diff --git a/requirements.txt b/requirements.txt index 6bf22a8..4dd59b2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,52 +1,39 @@ aiohttp==3.7.3 aiohttp-socks==0.5.5 +arabic-reshaper==2.1.1 async-timeout==3.0.1 attrs==20.3.0 -backports.functools-lru-cache==1.6.1 beautifulsoup4==4.9.3 bs4==0.0.1 -cairocffi==1.2.0 -CairoSVG==2.5.1 certifi==2020.12.5 -cffi==1.14.4 chardet==3.0.4 colorama==0.4.4 -cssselect2==0.4.1 -defusedxml==0.6.0 +future==0.18.2 html5lib==1.1 idna==2.10 -importlib-metadata==3.3.0 Jinja2==2.11.2 lxml==4.6.2 -Markdown==3.3.3 MarkupSafe==1.1.1 mock==4.0.2 multidict==5.1.0 -numpy==1.19.5 -pandas==1.2.0 -pdf-reports==0.3.2 Pillow==8.1.0 pycountry==20.7.3 -pycparser==2.20 -Pyphen==0.10.0 -pypugjs==5.9.8 +PyPDF2==1.26.0 PySocks==1.7.1 -python-dateutil==2.8.1 +python-bidi==0.4.2 python-socks==1.1.2 -pytz==2020.5 +reportlab==3.5.59 requests==2.25.1 requests-futures==1.0.0 six==1.15.0 socid-extractor==0.0.2 soupsieve==2.1 stem==1.8.0 -tinycss2==1.1.0 torrequest==0.1.0 -tqdm==4.55.1 +tqdm==4.55.0 typing-extensions==3.7.4.3 urllib3==1.26.2 -WeasyPrint==52.2 webencodings==0.5.1 +xhtml2pdf==0.2.5 XMind==1.2.0 yarl==1.6.3 -zipp==3.4.0