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.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'])

View File

@ -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()

View File

@ -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:

View File

@ -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 = '<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:
index.write(html.encode('utf-8'))
#mi = metadata_from_formats([stream.name])
mi = None
mi = TXTMetadataReader(None).get_metadata(stream, 'txt')
opf = OPFCreator(os.getcwd(), mi)
opf.create_manifest([('index.html', None)])
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):
metadata = TxtMetadata()
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')
writer = TxtWriter(TxtNewlines(opts.newline).newline, log)