Make Page.crop(...) also crop .annots/.hyperlinks

h/t @Safrone in #1171
This commit is contained in:
Jeremy Singer-Vine
2024-08-04 13:14:12 -04:00
parent b16acc36be
commit 22494e8da2
3 changed files with 10 additions and 1 deletions
+1
View File
@@ -16,6 +16,7 @@ All notable changes to this project will be documented in this file. The format
### Fixed ### Fixed
- Fix error on getting `.annots`/`.hyperlinks` from `CroppedPage` (due to missing `.rotation` and `.initial_doctop` attributes) (h/t @Safrone). ([#1171](https://github.com/jsvine/pdfplumber/issues/1171) + [e5737d2](https://github.com/jsvine/pdfplumber/commit/e5737d2)) - Fix error on getting `.annots`/`.hyperlinks` from `CroppedPage` (due to missing `.rotation` and `.initial_doctop` attributes) (h/t @Safrone). ([#1171](https://github.com/jsvine/pdfplumber/issues/1171) + [e5737d2](https://github.com/jsvine/pdfplumber/commit/e5737d2))
- Fix problem where `Page.crop(...)` was not cropping `.annots/.hyperlinks` (h/t @Safrone). [#1171](https://github.com/jsvine/pdfplumber/issues/1171)
- Fix calculation of coordinates for `.annots` on `CroppedPage`s. ([0bbb340](https://github.com/jsvine/pdfplumber/commit/0bbb340)) - Fix calculation of coordinates for `.annots` on `CroppedPage`s. ([0bbb340](https://github.com/jsvine/pdfplumber/commit/0bbb340))
- Dereference structure element attributes (h/t @dhdaines). ([#1169](https://github.com/jsvine/pdfplumber/pull/1169)) - Dereference structure element attributes (h/t @dhdaines). ([#1169](https://github.com/jsvine/pdfplumber/pull/1169))
- Fix `Page.get_attr(...)` so that it fully resolves references before determining whether the attribute's value is `None` (h/t @zzhangyun + @mkl-public). ([#1176](https://github.com/jsvine/pdfplumber/issues/1176)) - Fix `Page.get_attr(...)` so that it fully resolves references before determining whether the attribute's value is `None` (h/t @zzhangyun + @mkl-public). ([#1176](https://github.com/jsvine/pdfplumber/issues/1176))
+5 -1
View File
@@ -329,7 +329,11 @@ class Page(Container):
return parsed return parsed
raw = resolve_all(self.page_obj.annots) or [] raw = resolve_all(self.page_obj.annots) or []
return list(map(parse, raw)) parsed = list(map(parse, raw))
if isinstance(self, CroppedPage):
return self._crop_fn(parsed)
else:
return parsed
@property @property
def hyperlinks(self) -> T_obj_list: def hyperlinks(self) -> T_obj_list:
+4
View File
@@ -69,6 +69,10 @@ class Test(unittest.TestCase):
assert len(cropped.annots) == 13 assert len(cropped.annots) == 13
assert len(cropped.hyperlinks) == 1 assert len(cropped.hyperlinks) == 1
h0_bbox = pdfplumber.utils.obj_to_bbox(page.hyperlinks[0])
cropped = page.crop(h0_bbox)
assert len(cropped.annots) == len(cropped.hyperlinks) == 1
def test_annots_rotated(self): def test_annots_rotated(self):
def get_annot(filename, n=0): def get_annot(filename, n=0):
path = os.path.join(HERE, "pdfs", filename) path = os.path.join(HERE, "pdfs", filename)