diff --git a/src/__init__.py b/src/__init__.py index 4f0c82513..8d48ce717 100644 --- a/src/__init__.py +++ b/src/__init__.py @@ -20635,7 +20635,10 @@ def apply_pages( initfn(*initfn_args, **initfn_kwargs) ret = list() document = Document(path) - for page in document: + if pages is None: + pages = range(len(document)) + for pno in pages: + page = document[pno] r = pagefn(page, *pagefn_args, **initfn_kwargs) ret.append(r) diff --git a/src/utils.py b/src/utils.py index 8a7272b41..84c657bce 100644 --- a/src/utils.py +++ b/src/utils.py @@ -1949,7 +1949,7 @@ def get_acroform(doc): parents[xref]["new_xref"] = parent_xref_new parents[xref]["new_kids"] = kids_xrefs_new - for i in src_range: + for i in range(len(src_range)): # read first copied over page in target tar_page = tar[start_at + i] diff --git a/tests/resources/test_4412.pdf b/tests/resources/test_4412.pdf new file mode 100644 index 000000000..920df52b1 Binary files /dev/null and b/tests/resources/test_4412.pdf differ diff --git a/tests/test_4520.py b/tests/test_4520.py index 388ffde2f..81e7d2559 100644 --- a/tests/test_4520.py +++ b/tests/test_4520.py @@ -3,17 +3,9 @@ def test_4520(): """Accept source pages without /Contents object in show_pdf_page.""" - vsn_tuple = tuple(map(int, pymupdf.__version__.split("."))) tar = pymupdf.open() src = pymupdf.open() src.new_page() page = tar.new_page() - try: - assert page.show_pdf_page(page.rect, src, 0) - rc = True - except Exception as e: - rc = False - if vsn_tuple < (1, 26, 0): - assert rc is False - else: - assert rc is True + xref = page.show_pdf_page(page.rect, src, 0) + assert xref diff --git a/tests/test_insertpdf.py b/tests/test_insertpdf.py index b30c4d963..7f6f07c02 100644 --- a/tests/test_insertpdf.py +++ b/tests/test_insertpdf.py @@ -298,3 +298,19 @@ def test_merge_checks2(): assert len(set(names0 + names1)) == len(names2) assert kids2 == dup_kids + + +test_4412_path = os.path.normpath(f'{__file__}/../../tests/resources/test_4412.pdf') + +def test_4412(): + # This tests whether a page from a PDF containing widgets found in the wild + # can be inserted into a new document with default options (widget=True) + # and widget=False. + print() + for widget in True, False: + print(f'{widget=}', flush=1) + with pymupdf.open(test_4412_path) as doc, pymupdf.open() as new_doc: + buf = io.BytesIO() + new_doc.insert_pdf(doc, from_page=1, to_page=1) + new_doc.save(buf) + assert len(new_doc)==1 diff --git a/tests/test_textextract.py b/tests/test_textextract.py index 5fb9b4ef5..60368441b 100644 --- a/tests/test_textextract.py +++ b/tests/test_textextract.py @@ -309,6 +309,17 @@ def llen(texts): pymupdf._log_items_clear() +def test_4524(): + path = os.path.abspath(f'{__file__}/../../tests/resources/mupdf_explored.pdf') + print('') + document = pymupdf.Document(path) + texts_single = pymupdf.get_text(path, method='single', pages=[1, 3, 5]) + texts_mp = pymupdf.get_text(path, method='mp', pages=[1, 3, 5]) + print(f'{len(texts_single)=}') + print(f'{len(texts_mp)=}') + assert texts_mp == texts_single + + def test_3594(): verbose = 0 print()