Skip to content

Multi-page form flattening renders fields incorrectly #79

Description

@JohannesNekes

Hello,

during PDF signing with Documenso I noticed an issue related to handling PDF forms.

First of all, a short disclaimer: I am not very familiar with the internals of PDFs, but I did a brief investigation to better understand the problem.

I observed that a multi-page PDF form is rendered incorrectly during flattening. In my case, a text field was rendered as a checkbox. Interestingly, the issue depends on the order in which the fields were added: changing the field order results in a different text field being rendered incorrectly.

Looking into it, it seems that the function flattenWidgetsOnPage is called for each page, while the variable xObjectIndex is initialized with 0 every time. This leads to multiple xObjects being created with the same name across pages, which appears to cause the described behavior.

As a quick workaround, I changed the name generation to:

const xObjectName = FlatField${widget.ref.objectNumber};

This ensures unique names and resolves the issue in my case. I assume this is not the ideal solution, but it might help to build a proper fix.

I have attached a PDF where this behavior can be observed.

Test_libpdf.pdf

Here is the code I used for testing:

form.fill({
"text": "test",
"check": true,
});

form.flatten();

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions