Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions changes.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,23 @@ Change Log

**Changes in version 1.26.5**

* Fixed issues:

* Other:

* Partially address `2883 <https://github.com/pymupdf/PyMuPDF/issues/2883>`_: Improve the Python type annotations for fitz_new

We now define all class methods explicitly instead of with dynamic assignment.

* Removed `pymupdf.utils.Shape` class, was duplicate of `pymupdf.Shape`.

* Allow use of cibuildwheel to build and test on Pyodide.

* In documentation, added section about Linux wheels and glibc compatibility.

* Retrospectively mark #4544 as fixed in 1.26.4.


**Changes in version 1.26.4**

* Use MuPDF-1.26.7.
Expand All @@ -20,6 +37,7 @@ Change Log
* **Fixed** `4590 <https://github.com/pymupdf/PyMuPDF/issues/4590>`_: TypeError in utils.py scrub(): annot.update_file(buffer=...) is invalid
* **Fixed** `4614 <https://github.com/pymupdf/PyMuPDF/issues/4614>`_: Intercept bad widgets when inserting to another PDF
* **Fixed** `4639 <https://github.com/pymupdf/PyMuPDF/issues/4639>`_: pymupdf.mupdf.FzErrorGeneric: code=1: Director error: <class 'AttributeError'>: 'JM_new_bbox_device_Device' object has no attribute 'layer_name'
* **Fixed** `4544 <https://github.com/pymupdf/PyMuPDF/issues/4544>`_: About pdf_clip_page

* Other:

Expand Down
2 changes: 2 additions & 0 deletions docs/page.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1971,6 +1971,8 @@ In a nutshell, this is what you can do with PyMuPDF:
The method works best for text: All text on the page will be removed (decided by single character) that has no intersection with the rectangle. For vector graphics, the method will remove all paths that have no intersection with the rectangle. For images, the method will remove all images that have no intersection with the rectangle. Vectors and images **having** an intersection with the rectangle, will be kept in their entirety.

The method roughly has the same effect as if four redactions had been applied that cover the rectangle's outside.

* New in v1.26.4.

.. method:: remove_rotation()

Expand Down
4 changes: 3 additions & 1 deletion src/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6646,7 +6646,9 @@ def remove_hidden(cont_lines):
if not page.get_contents():
continue
if hidden_text:
xref = page.get_contents()[0] # only one b/o cleaning!
xrefs = page.get_contents()
assert len(xrefs) == 1 # only one because of cleaning.
xref = xrefs[0]
cont = doc.xref_stream(xref)
cont_lines = remove_hidden(cont.splitlines()) # remove hidden text
if cont_lines: # something was actually removed
Expand Down