Skip to content

Commit 2cae00d

Browse files
committed
WIP
1 parent e03f20a commit 2cae00d

File tree

2 files changed

+22
-16
lines changed

2 files changed

+22
-16
lines changed

psutils/command/psnup.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ def psnup(argv: list[str] = sys.argv[1:]) -> None:
208208
in_size = paper_size
209209
if size is None:
210210
die("output page size not set, and could not get default paper size")
211-
assert(in_size)
211+
assert in_size
212212

213213
# Take account of flip
214214
if args.flip:
@@ -281,9 +281,10 @@ def reduce_waste(
281281
)
282282

283283
# Page centring shifts
284-
hshift, vshift = (ppwid / horiz - in_size.width * scale) / 2, (
285-
pphgt / vert - in_size.height * scale
286-
) / 2
284+
hshift, vshift = (
285+
(ppwid / horiz - in_size.width * scale) / 2,
286+
(pphgt / vert - in_size.height * scale) / 2,
287+
)
287288

288289
# Construct specification list
289290
spec_list = []
@@ -303,12 +304,12 @@ def reduce_waste(
303304
xoff = args.margin + across * ppwid / horiz + hshift
304305
yoff = args.margin + up * pphgt / vert + vshift
305306
spec_list.append(
306-
f'{page}{"L" if rotate else ""}@{scale:f}({xoff:f},{yoff:f})'
307+
f"{page}{'L' if rotate else ''}@{scale:f}({xoff:f},{yoff:f})"
307308
)
308309

309310
# Rearrange pages
310311
specs, modulo, flipped = parsespecs(
311-
f'{args.nup}:{"+".join(spec_list)}', paper_context
312+
f"{args.nup}:{'+'.join(spec_list)}", paper_context
312313
)
313314
transform = document_transform(
314315
doc, outfile, size, orig_in_size, specs, args.draw, in_size_guessed

psutils/transformers.py

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -445,30 +445,35 @@ def write_page(
445445
):
446446
# Calculate input page transformation
447447
t = Matrix(Identity)
448+
mbox = self.reader[real_page].mediabox
448449
if spec.hflip:
449450
t.concat(t, Matrix(-1, 0, 0, 1, self.in_size.width, 0))
450451
elif spec.vflip:
451452
t.concat(t, Matrix(1, 0, 0, -1, 0, self.in_size.height))
453+
if spec.rotate != 0:
454+
t.prerotate(spec.rotate % 360)
452455
if spec.scale != 1.0:
453-
t = t.prescale(spec.scale, spec.scale)
456+
t.prescale(spec.scale, spec.scale)
454457
if spec.off != Offset(0.0, 0.0):
455-
t = t.pretranslate(spec.off.x, spec.off.y)
458+
# (t.prerotate applies translation according to original axes)
459+
t.e += spec.off.x
460+
t.f += spec.off.y
456461
# Transform input page mediabox
457462
t.concat(t, outpdf_page.transformation_matrix)
458-
mbox = self.reader[real_page].mediabox.transform(t)
463+
mbox.transform(t)
459464
# Merge input page into the output document
460465
outpdf_page.show_pdf_page(
461466
mbox, self.reader, real_page, rotate=spec.rotate % 360
462467
)
463-
if self.draw > 0: # FIXME: draw the line at the requested width
468+
if self.draw > 0:
464469
line = [
465-
(mbox.x0 + spec.off.x, mbox.y1 + spec.off.y),
466-
(mbox.x0 + spec.off.x, mbox.y0 + spec.off.y),
467-
(mbox.x1 + spec.off.x, mbox.y0 + spec.off.y),
468-
(mbox.x1 + spec.off.x, mbox.y1 + spec.off.y),
469-
(mbox.x0 + spec.off.x, mbox.y1 + spec.off.y),
470+
(mbox.x0, mbox.y1),
471+
(mbox.x0, mbox.y0),
472+
(mbox.x1, mbox.y0),
473+
(mbox.x1, mbox.y1),
474+
(mbox.x0, mbox.y1),
470475
]
471-
outpdf_page.draw_polyline(line)
476+
outpdf_page.draw_polyline(line, width=self.draw)
472477

473478
def finalize(self) -> None:
474479
self.outfile.write(self.writer.convert_to_pdf())

0 commit comments

Comments
 (0)