mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Metadata reading and writing for TXT/PDF input/output.
This commit is contained in:
parent
c1a37749a6
commit
011e2811d2
@ -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'])
|
||||||
|
@ -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()
|
||||||
|
@ -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:
|
||||||
|
@ -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'])
|
||||||
|
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user