~ubuntu-branches/debian/sid/calibre/sid

« back to all changes in this revision

Viewing changes to src/calibre/ebooks/pdf/render/serialize.py

  • Committer: Package Import Robot
  • Author(s): Martin Pitt
  • Date: 2014-02-27 07:48:06 UTC
  • mto: This revision was merged to the branch mainline in revision 74.
  • Revision ID: package-import@ubuntu.com-20140227074806-64wdebb3ptosxhhx
Tags: upstream-1.25.0+dfsg
ImportĀ upstreamĀ versionĀ 1.25.0+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
from calibre.ebooks.pdf.render.links import Links
21
21
from calibre.utils.date import utcnow
22
22
 
23
 
PDFVER = b'%PDF-1.3'
 
23
PDFVER = b'%PDF-1.4'  # 1.4 is needed for XMP metadata
24
24
 
25
25
class IndirectObjects(object):
26
26
 
239
239
        if self.soft_mask is not None:
240
240
            d['SMask'] = self.soft_mask
241
241
 
 
242
class Metadata(Stream):
 
243
 
 
244
    def __init__(self, mi):
 
245
        Stream.__init__(self)
 
246
        from calibre.ebooks.metadata.xmp import metadata_to_xmp_packet
 
247
        self.write(metadata_to_xmp_packet(mi))
 
248
 
 
249
    def add_extra_keys(self, d):
 
250
        d['Type'] = Name('Metadata')
 
251
        d['Subtype'] = Name('XML')
 
252
 
242
253
class PDFStream(object):
243
254
 
244
255
    PATH_OPS = {
292
303
    def get_pageref(self, pagenum):
293
304
        return self.page_tree.obj.get_ref(pagenum)
294
305
 
295
 
    def set_metadata(self, title=None, author=None, tags=None):
 
306
    def set_metadata(self, title=None, author=None, tags=None, mi=None):
296
307
        if title:
297
308
            self.info['Title'] = String(title)
298
309
        if author:
299
310
            self.info['Author'] = String(author)
300
311
        if tags:
301
312
            self.info['Keywords'] = String(tags)
 
313
        if mi is not None:
 
314
            self.metadata = self.objects.add(Metadata(mi))
 
315
            self.catalog.obj['Metadata'] = self.metadata
302
316
 
303
317
    def write_line(self, byts=b''):
304
318
        byts = byts if isinstance(byts, bytes) else byts.encode('ascii')