This repository has been archived on 2023-03-26. You can view files and clone it, but cannot push or open issues or pull requests.
md-pdf/md_pdf/build/pdf.py

55 lines
1.7 KiB
Python
Raw Normal View History

2017-03-27 09:17:49 +01:00
import pdfkit
2017-04-05 14:44:22 +01:00
from md_pdf.consts import TEMPLATES_DIR, STATIC_DIR
2017-05-17 17:52:57 +01:00
from md_pdf.build.templates import FILE_NAME_FORMAT
2017-03-28 21:59:11 +01:00
import os
2017-04-01 16:12:03 +01:00
import logging
2017-04-01 16:12:03 +01:00
logger = logging.getLogger(__file__)
2017-03-27 09:17:49 +01:00
2017-03-28 21:59:11 +01:00
DEFAULT_MARGIN_VERTICAL = '1.5cm'
DEFAULT_MARGIN_HORIZONTAL = '2.5cm'
2017-04-05 14:44:22 +01:00
STYLE_FILE = os.path.join(STATIC_DIR, 'style.css')
HEADER_FILE = os.path.join(TEMPLATES_DIR, 'header.html')
FOOTER_FILE = os.path.join(TEMPLATES_DIR, 'footer.html')
2017-05-17 14:46:11 +01:00
TOC_OPTIONS = {
2017-05-17 17:52:57 +01:00
'xsl-style-sheet': os.path.join(TEMPLATES_DIR, 'toc.xsl')
2017-05-17 14:46:11 +01:00
}
2017-03-28 21:59:11 +01:00
PDF_OPTIONS = {
2017-03-27 09:17:49 +01:00
"no-pdf-compression": "",
2017-05-10 21:42:03 +01:00
"enable-internal-links": "",
2017-03-27 09:17:49 +01:00
2017-03-28 21:59:11 +01:00
"header-html": HEADER_FILE,
"footer-html": FOOTER_FILE,
2017-03-27 09:17:49 +01:00
"footer-spacing": 5,
"header-spacing": 5,
2017-05-03 13:30:38 +01:00
"user-style-sheet": STYLE_FILE
2017-03-27 09:17:49 +01:00
}
2017-03-30 08:52:35 +01:00
def export_pdf(content, config):
if logger.getEffectiveLevel() > logging.DEBUG:
PDF_OPTIONS['quiet'] = ""
2017-03-30 18:26:06 +01:00
PDF_OPTIONS['title'] = config.get('title', 'Output')
2017-03-31 18:12:11 +01:00
PDF_OPTIONS['replace'] = [(key, str(value)) for key, value in config['context'].items()]
PDF_OPTIONS['margin-top'] = config['context'].get('margin_vertical', DEFAULT_MARGIN_VERTICAL)
PDF_OPTIONS['margin-bottom'] = config['context'].get('margin_vertical', DEFAULT_MARGIN_VERTICAL)
PDF_OPTIONS['margin-left'] = config['context'].get('margin_horizontal', DEFAULT_MARGIN_HORIZONTAL)
PDF_OPTIONS['margin-right'] = config['context'].get('margin_horizontal', DEFAULT_MARGIN_HORIZONTAL)
2017-04-01 16:12:03 +01:00
logger.info("Rendering PDF...")
2017-03-27 09:17:49 +01:00
return pdfkit.from_string(
content,
2017-03-30 18:26:06 +01:00
os.path.join(os.path.abspath(config['output_dir']), 'output.pdf'),
2017-03-28 21:59:11 +01:00
options=PDF_OPTIONS,
2017-05-17 17:52:57 +01:00
cover=FILE_NAME_FORMAT.format('cover'),
2017-05-17 20:49:58 +01:00
toc=TOC_OPTIONS if config['toc'] else {},
2017-05-17 14:54:40 +01:00
cover_first=True
2017-03-27 09:17:49 +01:00
)