diff --git a/src/calibre/ebooks/pdf/render/common.py b/src/calibre/ebooks/pdf/render/common.py index 347c680238..d5f4b6a66b 100644 --- a/src/calibre/ebooks/pdf/render/common.py +++ b/src/calibre/ebooks/pdf/render/common.py @@ -9,6 +9,7 @@ __docformat__ = 'restructuredtext en' import codecs, zlib from io import BytesIO +from datetime import datetime from calibre.constants import plugins, ispy3 @@ -74,6 +75,11 @@ def serialize(o, stream): o.pdf_serialize(stream) elif o is None: stream.write_raw(b'null') + elif isinstance(o, datetime): + val = o.strftime("D:%Y%m%d%H%M%%02d%z")%min(59, o.second) + if datetime.tzinfo is not None: + val = "(%s'%s')"%(val[:-2], val[-2:]) + stream.write(val.encode('ascii')) else: raise ValueError('Unknown object: %r'%o) diff --git a/src/calibre/ebooks/pdf/render/serialize.py b/src/calibre/ebooks/pdf/render/serialize.py index 3ef07eebc1..936cb5f156 100644 --- a/src/calibre/ebooks/pdf/render/serialize.py +++ b/src/calibre/ebooks/pdf/render/serialize.py @@ -18,6 +18,7 @@ from calibre.ebooks.pdf.render.common import ( fmtnum) from calibre.ebooks.pdf.render.fonts import FontManager from calibre.ebooks.pdf.render.links import Links +from calibre.utils.date import utcnow PDFVER = b'%PDF-1.3' @@ -259,8 +260,11 @@ class PDFStream(object): self.objects.add(PageTree(page_size)) self.objects.add(Catalog(self.page_tree)) self.current_page = Page(self.page_tree, compress=self.compress) - self.info = Dictionary({'Creator':String(creator), - 'Producer':String(creator)}) + self.info = Dictionary({ + 'Creator':String(creator), + 'Producer':String(creator), + 'CreationDate': utcnow(), + }) self.stroke_opacities, self.fill_opacities = {}, {} self.font_manager = FontManager(self.objects, self.compress) self.image_cache = {}