Fixed utf bugs in pdf generation, deleted unnecessary files, some other minor tweaks.

This commit is contained in:
mihasinkec 2021-02-21 15:16:40 +01:00
parent c1d6cbbb70
commit fd4bad4afe
7 changed files with 19 additions and 52 deletions

View File

@ -7,9 +7,9 @@ COPY static /usr/src/portal-webapp/static
COPY contract/ /usr/src/portal-webapp/contract COPY contract/ /usr/src/portal-webapp/contract
WORKDIR /usr/src/portal-webapp WORKDIR /usr/src/portal-webapp
RUN apt-get update && apt-get -y install wkhtmltopdf python3-pdfkit && \ RUN apt-get update && apt-get -y install wkhtmltopdf && \
rm -rf /var/lib/apt/lists/* rm -rf /var/lib/apt/lists/*
RUN pip3 install --no-cache-dir flask flask-dropzone gunicorn pdfkit RUN pip3 install --no-cache-dir pdfkit flask flask-dropzone gunicorn pdfkit
CMD ["gunicorn", "--bind", "0.0.0.0:80", "-w", "1", "--access-logfile", "-", "app:app"] CMD ["gunicorn", "--bind", "0.0.0.0:80", "-w", "1", "--access-logfile", "-", "app:app"]

16
app.py
View File

@ -71,6 +71,10 @@ if 'BASE_DIR' in config:
BASE_DIR = Path(config['BASE_DIR']) BASE_DIR = Path(config['BASE_DIR'])
else: else:
BASE_DIR = Path(__file__).resolve().parent BASE_DIR = Path(__file__).resolve().parent
if 'URL_ROOT' in config:
URL_ROOT = config['URL_ROOT']
else:
URL_ROOT = '/'
# Override configs with environment variables, if set # Override configs with environment variables, if set
if 'PORTALDS4DS1_MAIL_HOST' in os.environ: if 'PORTALDS4DS1_MAIL_HOST' in os.environ:
@ -87,6 +91,8 @@ if 'PORTALDS4DS1_MAX_UPLOAD_SIZE' in os.environ:
MAX_UPLOAD_SIZE = int(os.environ['PORTALDS4DS1_MAX_UPLOAD_SIZE']) MAX_UPLOAD_SIZE = int(os.environ['PORTALDS4DS1_MAX_UPLOAD_SIZE'])
if 'PORTALDS4DS1_CONTRACT_CLIENT_CONTACT' in os.environ: if 'PORTALDS4DS1_CONTRACT_CLIENT_CONTACT' in os.environ:
CONTRACT_CLIENT_CONTACT = os.environ['PORTALDS4DS1_CONTRACT_CLIENT_CONTACT'] CONTRACT_CLIENT_CONTACT = os.environ['PORTALDS4DS1_CONTRACT_CLIENT_CONTACT']
if 'PORTALDS4DS1_URL_ROOT' in os.environ:
URL_ROOT = os.environ['PORTALDS4DS1_URL_ROOT']
UPLOAD_DIR = BASE_DIR / 'uploads' UPLOAD_DIR = BASE_DIR / 'uploads'
if not UPLOAD_DIR.exists: if not UPLOAD_DIR.exists:
@ -107,12 +113,12 @@ dropzone = Dropzone(app)
contract_creator = ContractCreator() contract_creator = ContractCreator()
@app.route('/') @app.route(URL_ROOT)
def index(): def index():
return render_template('index.html') return render_template('index.html')
@app.route('/upload', methods=['POST']) @app.route(URL_ROOT + '/upload', methods=['POST'])
def handle_upload(): def handle_upload():
files = request.files files = request.files
if len(files) > 20: if len(files) > 20:
@ -259,8 +265,10 @@ def store_metadata(upload_metadata):
f.write('\nnaslov=' + form_data['naslov']) f.write('\nnaslov=' + form_data['naslov'])
f.write('\nposta=' + form_data['posta']) f.write('\nposta=' + form_data['posta'])
f.write('\nemail=' + form_data['email']) f.write('\nemail=' + form_data['email'])
f.write('\ndatoteke=' + str(sorted_f_hashes)) f.write('\ntelefon=' + form_data['telefon'])
f.write('\npogodba=' + contract) f.write('\nupload_time=' + str(upload_metadata['timestamp']))
f.write('\nupload_files=' + str(sorted_f_hashes))
f.write('\ncontract_file=' + contract)
def store_datafiles(files, upload_metadata): def store_datafiles(files, upload_metadata):

Binary file not shown.

View File

@ -1,43 +0,0 @@
import pdfkit
from jinja2 import Environment, FileSystemLoader
class ContractCreator:
def __init__(self):
template_loader = FileSystemLoader(searchpath="./")
template_env = Environment(loader=template_loader)
self.template = template_env.get_template('template.html')
self.pdfkit_options = {
'page-size': 'A4',
'margin-top': '0.75in',
'margin-right': '0.75in',
'margin-bottom': '0.75in',
'margin-left': '0.75in',
'encoding': "UTF-8",
'custom-header' : [
('Accept-Encoding', 'gzip')
]
}
def fill_template(self, **kwargs):
return self.template.render(**kwargs)
def create_pdf(self, out_f, fields_dict):
html_str = self.fill_template(**fields_dict)
pdfkit.from_string(html_str, out_f, options=self.pdfkit_options)
if __name__ == '__main__':
test_data = {
'ime_priimek': 'Testko Tester',
'naslov': 'Testovci 10',
'posta': '1123',
'kontakt_narocnik': 'Testica Testkovič',
'kontakt_imetnikpravic': 'Testko Tester',
'date': '16.2.2021'
}
contract_creator = ContractCreator()
contract_creator.create_pdf('out.pdf', test_data)

View File

@ -1,6 +1,8 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<meta charset="UTF-8">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style> <style>
table, th, td { table, th, td {
border: 1px solid black; border: 1px solid black;

View File

@ -1,4 +1,4 @@
@import url(http://fonts.googleapis.com/css?family=Roboto:400,400italic,500,500italic,700,700italic,900,900italic,300italic,300,100italic,100); @import url(https://fonts.googleapis.com/css?family=Roboto:400,400italic,500,500italic,700,700italic,900,900italic,300italic,300,100italic,100);
label, label,
input { input {

View File

@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="sl">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>Portal za oddajanje besedil za DS4 in DS1</title> <title>Portal za oddajanje besedil za DS4 in DS1</title>
@ -237,7 +237,7 @@ zagotovili vse potrebne informacije v skladu s predpisi o varstvu osebnih podatk
const reEmail = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; const reEmail = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
Dropzone.options.myDropzone = { // The camelized version of the ID of the form element Dropzone.options.myDropzone = { // The camelized version of the ID of the form element
url: "/upload", url: "./upload",
autoProcessQueue: false, autoProcessQueue: false,
uploadMultiple: true, uploadMultiple: true,
parallelUploads: 20, parallelUploads: 20,