-
Notifications
You must be signed in to change notification settings - Fork 663
Description
Description of the bug
Having a document with pages of a different height I try to create a link from a rectangle on one page to a rectangle on another.
When links are created to places on pages of equal heights, all works fine.
When links are created to places on pages of different heights, viewers jump to an offset position on that page.
Empirically I found that this offset is the difference of source and destination page heights.
Is that intended?
In the example I'm attaching, I added a convert function, but why do I need it, shouldn't insert_link calculate it automatically?
To reproduce the problem open the document with higher zoom level (300%) and click rectangles, notice that following links do not bring next rectangle into top-level corner of the viewport.
Replace target point (to_rect.top_left) with commented out convert call to see workaround that fixes it.
Tested in Mac OS Preview, Chrome PDF and https://mozilla.github.io/pdf.js/web/viewer.html viewers.
How to reproduce the bug
import os
import fitz
def convert(link_page_size, target_page_size, point):
return fitz.Point(point.x, point.y + link_page_size.y - target_page_size.y)
doc = fitz.open()
doc.new_page(width=500, height=800)
doc.new_page(width=800, height=500)
rects = [
(0, fitz.Rect(10, 20, 50, 40), fitz.utils.getColor('red')),
(0, fitz.Rect(300, 350, 400, 450), fitz.utils.getColor('green')),
(1, fitz.Rect(20, 30, 40, 50), fitz.utils.getColor('blue')),
(1, fitz.Rect(350, 300, 450, 400), fitz.utils.getColor('black'))
]
for page, rect, color in rects:
doc[page].draw_rect(rect, color=color)
for (from_page, from_rect, _), (to_page, to_rect, _) in zip(rects, rects[1:] + rects[:1]):
doc[from_page].insert_link({
'kind': 1,
'from': from_rect,
'page': to_page,
'to': to_rect.top_left,
# 'to': convert(doc[from_page].mediabox_size, doc[to_page].mediabox_size, to_rect.top_left),
})
doc.save("out.pdf")
os.system("open out.pdf")
PyMuPDF version
1.24.1
Operating system
MacOS
Python version
3.12