|
|
@ -34,6 +34,14 @@ import logging
|
|
|
|
import struct
|
|
|
|
import struct
|
|
|
|
import platform
|
|
|
|
import platform
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
with_pdfrw = False
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
|
|
|
import pdfrw
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
with_pdfrw = True
|
|
|
|
|
|
|
|
except ImportError:
|
|
|
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
PY3 = sys.version_info[0] >= 3
|
|
|
|
PY3 = sys.version_info[0] >= 3
|
|
|
|
|
|
|
|
|
|
|
|
__version__ = "0.3.4"
|
|
|
|
__version__ = "0.3.4"
|
|
|
@ -631,25 +639,14 @@ class pdfdoc(object):
|
|
|
|
fit_window=False,
|
|
|
|
fit_window=False,
|
|
|
|
center_window=False,
|
|
|
|
center_window=False,
|
|
|
|
fullscreen=False,
|
|
|
|
fullscreen=False,
|
|
|
|
with_pdfrw=True,
|
|
|
|
|
|
|
|
):
|
|
|
|
):
|
|
|
|
if with_pdfrw:
|
|
|
|
if with_pdfrw:
|
|
|
|
try:
|
|
|
|
from pdfrw import PdfWriter, PdfDict, PdfName, PdfString
|
|
|
|
from pdfrw import PdfWriter, PdfDict, PdfName, PdfString
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.with_pdfrw = True
|
|
|
|
|
|
|
|
except ImportError:
|
|
|
|
|
|
|
|
PdfWriter = MyPdfWriter
|
|
|
|
|
|
|
|
PdfDict = MyPdfDict
|
|
|
|
|
|
|
|
PdfName = MyPdfName
|
|
|
|
|
|
|
|
PdfString = MyPdfString
|
|
|
|
|
|
|
|
self.with_pdfrw = False
|
|
|
|
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
PdfWriter = MyPdfWriter
|
|
|
|
PdfWriter = MyPdfWriter
|
|
|
|
PdfDict = MyPdfDict
|
|
|
|
PdfDict = MyPdfDict
|
|
|
|
PdfName = MyPdfName
|
|
|
|
PdfName = MyPdfName
|
|
|
|
PdfString = MyPdfString
|
|
|
|
PdfString = MyPdfString
|
|
|
|
self.with_pdfrw = False
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
now = datetime.now()
|
|
|
|
now = datetime.now()
|
|
|
|
self.info = PdfDict(indirect=True)
|
|
|
|
self.info = PdfDict(indirect=True)
|
|
|
@ -690,7 +687,7 @@ class pdfdoc(object):
|
|
|
|
self.writer.version = version
|
|
|
|
self.writer.version = version
|
|
|
|
# this is done because pdfrw adds info, catalog and pages as the first
|
|
|
|
# this is done because pdfrw adds info, catalog and pages as the first
|
|
|
|
# three objects in this order
|
|
|
|
# three objects in this order
|
|
|
|
if not self.with_pdfrw:
|
|
|
|
if not with_pdfrw:
|
|
|
|
self.writer.addobj(self.info)
|
|
|
|
self.writer.addobj(self.info)
|
|
|
|
self.writer.addobj(self.writer.catalog)
|
|
|
|
self.writer.addobj(self.writer.catalog)
|
|
|
|
self.writer.addobj(self.writer.pages)
|
|
|
|
self.writer.addobj(self.writer.pages)
|
|
|
@ -726,7 +723,7 @@ class pdfdoc(object):
|
|
|
|
trimborder=None,
|
|
|
|
trimborder=None,
|
|
|
|
artborder=None,
|
|
|
|
artborder=None,
|
|
|
|
):
|
|
|
|
):
|
|
|
|
if self.with_pdfrw:
|
|
|
|
if with_pdfrw:
|
|
|
|
from pdfrw import PdfDict, PdfName, PdfObject, PdfString
|
|
|
|
from pdfrw import PdfDict, PdfName, PdfObject, PdfString
|
|
|
|
from pdfrw.py23_diffs import convert_load
|
|
|
|
from pdfrw.py23_diffs import convert_load
|
|
|
|
else:
|
|
|
|
else:
|
|
|
@ -743,7 +740,7 @@ class pdfdoc(object):
|
|
|
|
elif color == Colorspace.CMYK or color == Colorspace["CMYK;I"]:
|
|
|
|
elif color == Colorspace.CMYK or color == Colorspace["CMYK;I"]:
|
|
|
|
colorspace = PdfName.DeviceCMYK
|
|
|
|
colorspace = PdfName.DeviceCMYK
|
|
|
|
elif color == Colorspace.P:
|
|
|
|
elif color == Colorspace.P:
|
|
|
|
if self.with_pdfrw:
|
|
|
|
if with_pdfrw:
|
|
|
|
raise Exception(
|
|
|
|
raise Exception(
|
|
|
|
"pdfrw does not support hex strings for "
|
|
|
|
"pdfrw does not support hex strings for "
|
|
|
|
"palette image input, re-run with "
|
|
|
|
"palette image input, re-run with "
|
|
|
@ -871,7 +868,7 @@ class pdfdoc(object):
|
|
|
|
|
|
|
|
|
|
|
|
self.writer.addpage(page)
|
|
|
|
self.writer.addpage(page)
|
|
|
|
|
|
|
|
|
|
|
|
if not self.with_pdfrw:
|
|
|
|
if not with_pdfrw:
|
|
|
|
self.writer.addobj(content)
|
|
|
|
self.writer.addobj(content)
|
|
|
|
self.writer.addobj(image)
|
|
|
|
self.writer.addobj(image)
|
|
|
|
|
|
|
|
|
|
|
@ -881,7 +878,7 @@ class pdfdoc(object):
|
|
|
|
return stream.getvalue()
|
|
|
|
return stream.getvalue()
|
|
|
|
|
|
|
|
|
|
|
|
def tostream(self, outputstream):
|
|
|
|
def tostream(self, outputstream):
|
|
|
|
if self.with_pdfrw:
|
|
|
|
if with_pdfrw:
|
|
|
|
from pdfrw import PdfDict, PdfName, PdfArray, PdfObject
|
|
|
|
from pdfrw import PdfDict, PdfName, PdfArray, PdfObject
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
PdfDict = MyPdfDict
|
|
|
|
PdfDict = MyPdfDict
|
|
|
@ -899,7 +896,7 @@ class pdfdoc(object):
|
|
|
|
# is added, so we can only start using it after all pages have been
|
|
|
|
# is added, so we can only start using it after all pages have been
|
|
|
|
# written.
|
|
|
|
# written.
|
|
|
|
|
|
|
|
|
|
|
|
if self.with_pdfrw:
|
|
|
|
if with_pdfrw:
|
|
|
|
catalog = self.writer.trailer.Root
|
|
|
|
catalog = self.writer.trailer.Root
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
catalog = self.writer.catalog
|
|
|
|
catalog = self.writer.catalog
|
|
|
@ -1005,7 +1002,7 @@ class pdfdoc(object):
|
|
|
|
raise ValueError("unknown page layout: %s" % self.page_layout)
|
|
|
|
raise ValueError("unknown page layout: %s" % self.page_layout)
|
|
|
|
|
|
|
|
|
|
|
|
# now write out the PDF
|
|
|
|
# now write out the PDF
|
|
|
|
if self.with_pdfrw:
|
|
|
|
if with_pdfrw:
|
|
|
|
self.writer.trailer.Info = self.info
|
|
|
|
self.writer.trailer.Info = self.info
|
|
|
|
self.writer.write(outputstream)
|
|
|
|
self.writer.write(outputstream)
|
|
|
|
else:
|
|
|
|
else:
|
|
|
@ -1809,7 +1806,6 @@ def convert(*images, **kwargs):
|
|
|
|
viewer_fit_window=False,
|
|
|
|
viewer_fit_window=False,
|
|
|
|
viewer_center_window=False,
|
|
|
|
viewer_center_window=False,
|
|
|
|
viewer_fullscreen=False,
|
|
|
|
viewer_fullscreen=False,
|
|
|
|
with_pdfrw=True,
|
|
|
|
|
|
|
|
outputstream=None,
|
|
|
|
outputstream=None,
|
|
|
|
first_frame_only=False,
|
|
|
|
first_frame_only=False,
|
|
|
|
allow_oversized=True,
|
|
|
|
allow_oversized=True,
|
|
|
@ -1821,6 +1817,9 @@ def convert(*images, **kwargs):
|
|
|
|
for kwname, default in _default_kwargs.items():
|
|
|
|
for kwname, default in _default_kwargs.items():
|
|
|
|
if kwname not in kwargs:
|
|
|
|
if kwname not in kwargs:
|
|
|
|
kwargs[kwname] = default
|
|
|
|
kwargs[kwname] = default
|
|
|
|
|
|
|
|
if 'with_pdfrw' in kwargs:
|
|
|
|
|
|
|
|
global with_pdfrw
|
|
|
|
|
|
|
|
with_pdfrw = kwargs['with_pdfrw']
|
|
|
|
|
|
|
|
|
|
|
|
pdf = pdfdoc(
|
|
|
|
pdf = pdfdoc(
|
|
|
|
"1.3",
|
|
|
|
"1.3",
|
|
|
@ -1840,7 +1839,6 @@ def convert(*images, **kwargs):
|
|
|
|
kwargs["viewer_fit_window"],
|
|
|
|
kwargs["viewer_fit_window"],
|
|
|
|
kwargs["viewer_center_window"],
|
|
|
|
kwargs["viewer_center_window"],
|
|
|
|
kwargs["viewer_fullscreen"],
|
|
|
|
kwargs["viewer_fullscreen"],
|
|
|
|
kwargs["with_pdfrw"],
|
|
|
|
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# backwards compatibility with older img2pdf versions where the first
|
|
|
|
# backwards compatibility with older img2pdf versions where the first
|
|
|
@ -2492,6 +2490,8 @@ def gui():
|
|
|
|
v for v in Colorspace if v.name == args["colorspace"].get()
|
|
|
|
v for v in Colorspace if v.name == args["colorspace"].get()
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
global with_pdfrw
|
|
|
|
|
|
|
|
with_pdfrw = (not args["without_pdfrw"].get(),)
|
|
|
|
convert(
|
|
|
|
convert(
|
|
|
|
*infiles,
|
|
|
|
*infiles,
|
|
|
|
title=args["title"].get() if args["title"].get() else None,
|
|
|
|
title=args["title"].get() if args["title"].get() else None,
|
|
|
@ -2516,7 +2516,6 @@ def gui():
|
|
|
|
viewer_fit_window=(args["viewer_fit_window"].get() or None),
|
|
|
|
viewer_fit_window=(args["viewer_fit_window"].get() or None),
|
|
|
|
viewer_center_window=(args["viewer_center_window"].get() or None),
|
|
|
|
viewer_center_window=(args["viewer_center_window"].get() or None),
|
|
|
|
viewer_fullscreen=(args["viewer_fullscreen"].get() or None),
|
|
|
|
viewer_fullscreen=(args["viewer_fullscreen"].get() or None),
|
|
|
|
with_pdfrw=not args["without_pdfrw"].get(),
|
|
|
|
|
|
|
|
outputstream=stream,
|
|
|
|
outputstream=stream,
|
|
|
|
first_frame_only=args["first_frame_only"].get(),
|
|
|
|
first_frame_only=args["first_frame_only"].get(),
|
|
|
|
cropborder=None,
|
|
|
|
cropborder=None,
|
|
|
@ -3490,6 +3489,8 @@ and left/right, respectively. It is not possible to specify asymmetric borders.
|
|
|
|
)
|
|
|
|
)
|
|
|
|
exit(2)
|
|
|
|
exit(2)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
global with_pdfrw
|
|
|
|
|
|
|
|
with_pdfrw = (not args.without_pdfrw,)
|
|
|
|
try:
|
|
|
|
try:
|
|
|
|
convert(
|
|
|
|
convert(
|
|
|
|
*args.images,
|
|
|
|
*args.images,
|
|
|
@ -3511,7 +3512,6 @@ and left/right, respectively. It is not possible to specify asymmetric borders.
|
|
|
|
viewer_fit_window=args.viewer_fit_window,
|
|
|
|
viewer_fit_window=args.viewer_fit_window,
|
|
|
|
viewer_center_window=args.viewer_center_window,
|
|
|
|
viewer_center_window=args.viewer_center_window,
|
|
|
|
viewer_fullscreen=args.viewer_fullscreen,
|
|
|
|
viewer_fullscreen=args.viewer_fullscreen,
|
|
|
|
with_pdfrw=not args.without_pdfrw,
|
|
|
|
|
|
|
|
outputstream=args.output,
|
|
|
|
outputstream=args.output,
|
|
|
|
first_frame_only=args.first_frame_only,
|
|
|
|
first_frame_only=args.first_frame_only,
|
|
|
|
cropborder=args.crop_border,
|
|
|
|
cropborder=args.crop_border,
|
|
|
|