12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- # -*- coding: utf-8 -*-
- '''
- PDF Generator
- -------
- The pdf plugin generates PDF files from RST sources.
- '''
- from __future__ import unicode_literals, print_function
- from pelican import signals
- from pelican.generators import Generator
- from rst2pdf.createpdf import RstToPdf
- import os
- import logging
- logger = logging.getLogger(__name__)
- class PdfGenerator(Generator):
- """Generate PDFs on the output dir, for all articles and pages coming from
- rst"""
- def __init__(self, *args, **kwargs):
- super(PdfGenerator, self).__init__(*args, **kwargs)
-
- pdf_style_path = os.path.join(self.settings['PDF_STYLE_PATH'])
- pdf_style = self.settings['PDF_STYLE']
- self.pdfcreator = RstToPdf(breakside=0,
- stylesheets=[pdf_style],
- style_path=[pdf_style_path])
- def _create_pdf(self, obj, output_path):
- if obj.source_path.endswith('.rst'):
- filename = obj.slug + ".pdf"
- output_pdf = os.path.join(output_path, filename)
- # print('Generating pdf for', obj.source_path, 'in', output_pdf)
- with open(obj.source_path) as f:
- self.pdfcreator.createPdf(text=f.read(), output=output_pdf)
- logger.info(' [ok] writing %s' % output_pdf)
- def generate_context(self):
- pass
- def generate_output(self, writer=None):
- # we don't use the writer passed as argument here
- # since we write our own files
- logger.info(' Generating PDF files...')
- pdf_path = os.path.join(self.output_path, 'pdf')
- if not os.path.exists(pdf_path):
- try:
- os.mkdir(pdf_path)
- except OSError:
- logger.error("Couldn't create the pdf output folder in " +
- pdf_path)
- for article in self.context['articles']:
- self._create_pdf(article, pdf_path)
- for page in self.context['pages']:
- self._create_pdf(page, pdf_path)
- def get_generators(generators):
- return PdfGenerator
- def register():
- signals.get_generators.connect(get_generators)
|