summaryrefslogtreecommitdiffstats
path: root/pydyf
diff options
context:
space:
mode:
authorDaniel Baumann <mail@daniel-baumann.ch>2022-06-19 07:06:23 +0000
committerDaniel Baumann <mail@daniel-baumann.ch>2022-06-19 07:06:34 +0000
commit5af1e7262d704ec79cc40ecc2f61bcd8d1dd02d7 (patch)
tree5f908593917c99e6f9ea8c65861a51e30dbfa19c /pydyf
parentReleasing debian version 0.1.2-4. (diff)
downloadpydyf-5af1e7262d704ec79cc40ecc2f61bcd8d1dd02d7.tar.xz
pydyf-5af1e7262d704ec79cc40ecc2f61bcd8d1dd02d7.zip
Merging upstream version 0.2.0.
Signed-off-by: Daniel Baumann <mail@daniel-baumann.ch>
Diffstat (limited to 'pydyf')
-rwxr-xr-xpydyf/__init__.py18
1 files changed, 14 insertions, 4 deletions
diff --git a/pydyf/__init__.py b/pydyf/__init__.py
index 05dccf6..a627a13 100755
--- a/pydyf/__init__.py
+++ b/pydyf/__init__.py
@@ -6,8 +6,9 @@ A low-level PDF generator.
import re
import zlib
from codecs import BOM_UTF16_BE
+from hashlib import md5
-VERSION = __version__ = '0.1.2'
+VERSION = __version__ = '0.2.0'
def _to_bytes(item):
@@ -425,7 +426,7 @@ class PDF:
})
self.add_object(self.pages)
- #: PDF :class:`Dictionary` containing the PDF’s metadata.
+ #: PDF :class:`Dictionary` containing the PDF’s metadata.
self.info = Dictionary({})
self.add_object(self.info)
@@ -469,15 +470,17 @@ class PDF:
self.current_position += len(content) + 1
output.write(content + b'\n')
- def write(self, output):
+ def write(self, output, version=b'1.7', identifier=None):
"""Write PDF to output.
:param output: Output stream.
:type output: binary :term:`file object`
+ :param bytes version: PDF version.
+ :param bytes identifier: PDF file identifier.
"""
# Write header
- self.write_line(b'%PDF-1.7', output)
+ self.write_line(b'%PDF-' + version, output)
self.write_line(b'%\xf0\x9f\x96\xa4', output)
# Write all non-free PDF objects
@@ -502,6 +505,13 @@ class PDF:
self.write_line(f'/Size {len(self.objects)}'.encode(), output)
self.write_line(b'/Root ' + self.catalog.reference, output)
self.write_line(b'/Info ' + self.info.reference, output)
+ if identifier is not None:
+ data = b''.join(
+ obj.data for obj in self.objects if obj.free != 'f')
+ data_hash = md5(data).hexdigest().encode()
+ self.write_line(
+ b'/ID [' + String(identifier).data + b' ' +
+ String(data_hash).data + b']', output)
self.write_line(b'>>', output)
self.write_line(b'startxref', output)
self.write_line(f'{self.xref_position}'.encode(), output)