Skip to content

Call to Page.apply_redactions doesn't complete for widget annotation #1287

@darkandrew7

Description

@darkandrew7

Describe the bug (mandatory)

Page.apply_redactions() doesn't succeed or fail for the linked document; a SIGKILL is required to stop the process. I have a small set of documents that contain widget annotations which all have this same issue.

To Reproduce (mandatory)

Redact annotation positioning is not important to reproduce; the error happens when Page.apply_redactions() is called on a document containing a widget annotation.

  • Download the original form here.
  • Run below
import fitz

filename = './standard-form-180.pdf'
doc = fitz.Document(filename=filename)
for page in doc:
    x0, y0 = (150, 120)
    x1, y1 = (300, 170)
    rect = fitz.Rect(x0, y0, x1, y1)
    page.add_redact_annot(rect,
                          text='text',
                          fontname="helv",
                          fontsize=12,
                          align=1,
                          text_color=(1, 1, 1),
                          fill=(0, 0, 0))
    page.apply_redactions()
doc.save('./out.pdf')

Expected behavior (optional)

The call to C code should return a result; Page.apply_redactions() should raise an exception about the unsupported content encountered or process successfully with redact annotations included.

Screenshots (optional)

When you comment out the page.apply_redactions() and run, the cross out boxes are placed correctly, and it makes sense why this works.
cross_out_works

Your configuration (mandatory)

  • Operating system: debian 10
  • Python version: 3.9.1
  • PyMuPDF version: v1.18.19, although it happens in earlier versions too. This isn't new to the latest stable release.

Additional context (optional)

Creating a new PDF with ghostscript fixes the issue

Creating a new PDF with ghostscript removes the problematic content structurally (annotations), preserves the annotations' appearance on the page, and redacts successfully.

Widget annotations made with LaTeX work with Page.apply_redactions()

I think the issue is related to the widget annotations, but the issue doesn't happen for all widget annotations. For example, compile this LaTeX document with pdflatex and run with the code above.

\documentclass{article}
\usepackage{hyperref}

\begin{document}
    % Interactive Form
    \begin{Form}
        \begin{tabular}{l}
            \TextField{TextField:} \\\\
            \CheckBox[width=1em]{CheckBox:} \\\\
        \end{tabular}
    \end{Form}
\end{document}

widget_annotation

So it isn't specifically the widget annotations; it possibly relates to the structure or content within the widget annotation. There seems to be a different issue where the interactive form shows through the redact annotation including the contained text, but that's something unrelated to this ticket.

Metadata

Metadata

Assignees

Labels

upstream bugbug outside this package

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions