diff --git a/src/calibre/ebooks/pdf/input.py b/src/calibre/ebooks/pdf/input.py index 6f55b71dd5..edbc2d6b30 100644 --- a/src/calibre/ebooks/pdf/input.py +++ b/src/calibre/ebooks/pdf/input.py @@ -10,8 +10,7 @@ import os from calibre.customize.conversion import InputFormatPlugin from calibre.ebooks.pdf.pdftohtml import pdftohtml from calibre.ebooks.metadata.opf import OPFCreator -from calibre.ebooks.metadata import MetaInformation -#from calibre.ebooks.metadata.meta import metadata_from_formats +from calibre.customize.builtins import PDFMetadataReader class PDFInput(InputFormatPlugin): @@ -27,8 +26,7 @@ class PDFInput(InputFormatPlugin): with open('index.html', 'wb') as index: index.write(html) - #mi = metadata_from_formats([stream.name]) - mi = MetaInformation(_('Unknown'), _('Unknown')) + mi = PDFMetadataReader(None).get_metadata(stream, 'pdf') opf = OPFCreator(os.getcwd(), mi) opf.create_manifest([('index.html', None)]) opf.create_spine(['index.html']) diff --git a/src/calibre/ebooks/pdf/output.py b/src/calibre/ebooks/pdf/output.py index 230beed9ae..65af40dc51 100644 --- a/src/calibre/ebooks/pdf/output.py +++ b/src/calibre/ebooks/pdf/output.py @@ -17,7 +17,7 @@ from calibre.customize.conversion import OutputFormatPlugin, \ OptionRecommendation from calibre.ebooks.oeb.output import OEBOutput from calibre.ptempfile import TemporaryDirectory -from calibre.ebooks.pdf.writer import PDFWriter +from calibre.ebooks.pdf.writer import PDFWriter, PDFMetadata from calibre.ebooks.pdf.pageoptions import UNITS, unit, PAPER_SIZES, \ paper_size, ORIENTATIONS, orientation, PageOptions @@ -88,7 +88,7 @@ class PDFOutput(OutputFormatPlugin): out_stream.seek(0) out_stream.truncate() - writer.dump(opf, out_stream) + writer.dump(opf, out_stream, PDFMetadata(oeb_book.metadata)) if close: out_stream.close() diff --git a/src/calibre/ebooks/pdf/writer.py b/src/calibre/ebooks/pdf/writer.py index 2aebd7322c..7d0a690856 100644 --- a/src/calibre/ebooks/pdf/writer.py +++ b/src/calibre/ebooks/pdf/writer.py @@ -13,6 +13,7 @@ import os, shutil, sys from calibre.ptempfile import PersistentTemporaryDirectory from calibre.ebooks.pdf.pageoptions import PageOptions +from calibre.ebooks.metadata import authors_to_string from calibre.ebooks.metadata.opf2 import OPF from PyQt4 import QtCore @@ -22,6 +23,18 @@ from PyQt4.QtWebKit import QWebView from pyPdf import PdfFileWriter, PdfFileReader +class PDFMetadata(object): + def __init__(self, oeb_metadata=None): + self.title = _('Unknown') + self.author = _('Unknown') + + if oeb_metadata != None: + if len(oeb_metadata.title) >= 1: + self.title = oeb_metadata.title[0].value + if len(oeb_metadata.creator) >= 1: + self.author = authors_to_string([x.value for x in oeb_metadata.creator]) + + class PDFWriter(QObject): def __init__(self, log, popts=PageOptions()): if QApplication.instance() is None: @@ -37,8 +50,9 @@ class PDFWriter(QObject): self.combine_queue = [] self.tmp_path = PersistentTemporaryDirectory('_any2pdf_parts') self.popts = popts - - def dump(self, opfpath, out_stream): + + def dump(self, opfpath, out_stream, pdf_metadata): + self.metadata = pdf_metadata self._delete_tmpdir() opf = OPF(opfpath, os.path.dirname(opfpath)) @@ -88,7 +102,7 @@ class PDFWriter(QObject): self.logger.info('Combining individual PDF parts...') try: - outPDF = PdfFileWriter() + outPDF = PdfFileWriter(title=self.metadata.title, author=self.metadata.author) for item in self.combine_queue: inputPDF = PdfFileReader(file(item, 'rb')) for page in inputPDF.pages: diff --git a/src/calibre/ebooks/txt/input.py b/src/calibre/ebooks/txt/input.py index fdc2851342..69d9c09da5 100644 --- a/src/calibre/ebooks/txt/input.py +++ b/src/calibre/ebooks/txt/input.py @@ -10,7 +10,7 @@ import os from calibre.customize.conversion import InputFormatPlugin from calibre.ebooks.markdown import markdown from calibre.ebooks.metadata.opf import OPFCreator -#from calibre.ebooks.metadata.meta import metadata_from_formats +from calibre.customize.builtins import TXTMetadataReader class TXTInput(InputFormatPlugin): @@ -26,12 +26,11 @@ class TXTInput(InputFormatPlugin): md = markdown.Markdown( extensions=['footnotes', 'tables', 'toc'], safe_mode=False,) - html = '
'+md.convert(txt)+'' + html = '