diff --git a/src/calibre/ebooks/conversion/plugins/pdf_output.py b/src/calibre/ebooks/conversion/plugins/pdf_output.py index 9f35284f28..0e42f77588 100644 --- a/src/calibre/ebooks/conversion/plugins/pdf_output.py +++ b/src/calibre/ebooks/conversion/plugins/pdf_output.py @@ -126,6 +126,10 @@ class PDFOutput(OutputFormatPlugin): help=_('Adjust page numbers, as needed. Syntax is a JavaScript expression for the page number.' ' For example, "if (n < 3) 0; else n - 3;", where n is current page number.') ), + OptionRecommendation(name='uncompressed_pdf', + recommended_value=False, help=_( + 'Generate an uncompressed PDF, useful for debugging.') + ), } def specialize_options(self, log, opts, input_fmt): diff --git a/src/calibre/ebooks/pdf/html_writer.py b/src/calibre/ebooks/pdf/html_writer.py index b848ba4b40..3c10500167 100644 --- a/src/calibre/ebooks/pdf/html_writer.py +++ b/src/calibre/ebooks/pdf/html_writer.py @@ -852,6 +852,9 @@ def convert(opf_path, opts, metadata=None, output_path=None, log=default_log, co update_metadata(pdf_doc, PDFMetadata(metadata)) report_progress(1, _('Updated metadata in PDF')) + if opts.uncompressed_pdf: + pdf_doc.uncompress() + pdf_data = pdf_doc.write() if output_path is None: return pdf_data diff --git a/src/calibre/utils/podofo/doc.cpp b/src/calibre/utils/podofo/doc.cpp index 058fba489a..4b27df370e 100644 --- a/src/calibre/utils/podofo/doc.cpp +++ b/src/calibre/utils/podofo/doc.cpp @@ -128,6 +128,18 @@ PDFDoc_save_to_fileobj(PDFDoc *self, PyObject *args) { return write_doc(self->doc, f); } +static PyObject * +PDFDoc_uncompress_pdf(PDFDoc *self, PyObject *args) { + for (TIVecObjects it = self->doc->GetObjects().begin(); it != self->doc->GetObjects().end(); it++) { + if((*it)->HasStream()) { + PdfMemStream* stream = dynamic_cast((*it)->GetStream()); + stream->Uncompress(); + } + } + Py_RETURN_NONE; +} + + // }}} // extract_first_page() {{{ @@ -714,6 +726,9 @@ static PyMethodDef PDFDoc_methods[] = { {"save_to_fileobj", (PyCFunction)PDFDoc_save_to_fileobj, METH_VARARGS, "Write the PDF document to the soecified file-like object." }, + {"uncompress", (PyCFunction)PDFDoc_uncompress_pdf, METH_NOARGS, + "Uncompress the PDF" + }, {"extract_first_page", (PyCFunction)PDFDoc_extract_first_page, METH_VARARGS, "extract_first_page() -> Remove all but the first page." },