Metadata reading and writing for TXT/PDF input/output.

This commit is contained in:
John Schember 2009-04-05 09:08:43 -04:00
parent c1a37749a6
commit 011e2811d2
5 changed files with 25 additions and 14 deletions

View File

@ -10,8 +10,7 @@ import os
from calibre.customize.conversion import InputFormatPlugin from calibre.customize.conversion import InputFormatPlugin
from calibre.ebooks.pdf.pdftohtml import pdftohtml from calibre.ebooks.pdf.pdftohtml import pdftohtml
from calibre.ebooks.metadata.opf import OPFCreator from calibre.ebooks.metadata.opf import OPFCreator
from calibre.ebooks.metadata import MetaInformation from calibre.customize.builtins import PDFMetadataReader
#from calibre.ebooks.metadata.meta import metadata_from_formats
class PDFInput(InputFormatPlugin): class PDFInput(InputFormatPlugin):
@ -27,8 +26,7 @@ class PDFInput(InputFormatPlugin):
with open('index.html', 'wb') as index: with open('index.html', 'wb') as index:
index.write(html) index.write(html)
#mi = metadata_from_formats([stream.name]) mi = PDFMetadataReader(None).get_metadata(stream, 'pdf')
mi = MetaInformation(_('Unknown'), _('Unknown'))
opf = OPFCreator(os.getcwd(), mi) opf = OPFCreator(os.getcwd(), mi)
opf.create_manifest([('index.html', None)]) opf.create_manifest([('index.html', None)])
opf.create_spine(['index.html']) opf.create_spine(['index.html'])

View File

@ -17,7 +17,7 @@ from calibre.customize.conversion import OutputFormatPlugin, \
OptionRecommendation OptionRecommendation
from calibre.ebooks.oeb.output import OEBOutput from calibre.ebooks.oeb.output import OEBOutput
from calibre.ptempfile import TemporaryDirectory 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, \ from calibre.ebooks.pdf.pageoptions import UNITS, unit, PAPER_SIZES, \
paper_size, ORIENTATIONS, orientation, PageOptions paper_size, ORIENTATIONS, orientation, PageOptions
@ -88,7 +88,7 @@ class PDFOutput(OutputFormatPlugin):
out_stream.seek(0) out_stream.seek(0)
out_stream.truncate() out_stream.truncate()
writer.dump(opf, out_stream) writer.dump(opf, out_stream, PDFMetadata(oeb_book.metadata))
if close: if close:
out_stream.close() out_stream.close()

View File

@ -13,6 +13,7 @@ import os, shutil, sys
from calibre.ptempfile import PersistentTemporaryDirectory from calibre.ptempfile import PersistentTemporaryDirectory
from calibre.ebooks.pdf.pageoptions import PageOptions from calibre.ebooks.pdf.pageoptions import PageOptions
from calibre.ebooks.metadata import authors_to_string
from calibre.ebooks.metadata.opf2 import OPF from calibre.ebooks.metadata.opf2 import OPF
from PyQt4 import QtCore from PyQt4 import QtCore
@ -22,6 +23,18 @@ from PyQt4.QtWebKit import QWebView
from pyPdf import PdfFileWriter, PdfFileReader 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): class PDFWriter(QObject):
def __init__(self, log, popts=PageOptions()): def __init__(self, log, popts=PageOptions()):
if QApplication.instance() is None: if QApplication.instance() is None:
@ -38,7 +51,8 @@ class PDFWriter(QObject):
self.tmp_path = PersistentTemporaryDirectory('_any2pdf_parts') self.tmp_path = PersistentTemporaryDirectory('_any2pdf_parts')
self.popts = popts self.popts = popts
def dump(self, opfpath, out_stream): def dump(self, opfpath, out_stream, pdf_metadata):
self.metadata = pdf_metadata
self._delete_tmpdir() self._delete_tmpdir()
opf = OPF(opfpath, os.path.dirname(opfpath)) opf = OPF(opfpath, os.path.dirname(opfpath))
@ -88,7 +102,7 @@ class PDFWriter(QObject):
self.logger.info('Combining individual PDF parts...') self.logger.info('Combining individual PDF parts...')
try: try:
outPDF = PdfFileWriter() outPDF = PdfFileWriter(title=self.metadata.title, author=self.metadata.author)
for item in self.combine_queue: for item in self.combine_queue:
inputPDF = PdfFileReader(file(item, 'rb')) inputPDF = PdfFileReader(file(item, 'rb'))
for page in inputPDF.pages: for page in inputPDF.pages:

View File

@ -10,7 +10,7 @@ import os
from calibre.customize.conversion import InputFormatPlugin from calibre.customize.conversion import InputFormatPlugin
from calibre.ebooks.markdown import markdown from calibre.ebooks.markdown import markdown
from calibre.ebooks.metadata.opf import OPFCreator 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): class TXTInput(InputFormatPlugin):
@ -26,12 +26,11 @@ class TXTInput(InputFormatPlugin):
md = markdown.Markdown( md = markdown.Markdown(
extensions=['footnotes', 'tables', 'toc'], extensions=['footnotes', 'tables', 'toc'],
safe_mode=False,) safe_mode=False,)
html = '<html><body>'+md.convert(txt)+'</body></html>' html = '<html><head><title /></head><body>'+md.convert(txt)+'</body></html>'
with open('index.html', 'wb') as index: with open('index.html', 'wb') as index:
index.write(html.encode('utf-8')) index.write(html.encode('utf-8'))
#mi = metadata_from_formats([stream.name]) mi = TXTMetadataReader(None).get_metadata(stream, 'txt')
mi = None
opf = OPFCreator(os.getcwd(), mi) opf = OPFCreator(os.getcwd(), mi)
opf.create_manifest([('index.html', None)]) opf.create_manifest([('index.html', None)])
opf.create_spine(['index.html']) opf.create_spine(['index.html'])

View File

@ -34,7 +34,7 @@ class TXTOutput(OutputFormatPlugin):
def convert(self, oeb_book, output_path, input_plugin, opts, log): def convert(self, oeb_book, output_path, input_plugin, opts, log):
metadata = TxtMetadata() metadata = TxtMetadata()
if opts.prepend_metadata.lower() == 'true': if opts.prepend_metadata.lower() == 'true':
metadata.author = opts.authors if opts.authors else authors_to_string(oeb_book.metadata.authors.value) if oeb_book.metadata.authors != [] else _('Unknown') metadata.author = opts.authors if opts.authors else authors_to_string([x.value for x in oeb_book.metadata.creator]) if oeb_book.metadata.creator != [] else _('Unknown')
metadata.title = opts.title if opts.title else oeb_book.metadata.title[0].value if oeb_book.metadata.title != [] else _('Unknown') metadata.title = opts.title if opts.title else oeb_book.metadata.title[0].value if oeb_book.metadata.title != [] else _('Unknown')
writer = TxtWriter(TxtNewlines(opts.newline).newline, log) writer = TxtWriter(TxtNewlines(opts.newline).newline, log)