PHPackages                             adrolli/fpdm - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [PDF &amp; Document Generation](/categories/documents)
4. /
5. adrolli/fpdm

ActiveLibrary[PDF &amp; Document Generation](/categories/documents)

adrolli/fpdm
============

PDF form filling with PHP

54PHP

Since May 29Pushed 2y agoCompare

[ Source](https://github.com/adrolli/fpdm)[ Packagist](https://packagist.org/packages/adrolli/fpdm)[ RSS](/packages/adrolli-fpdm/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

PDF Form Filling with FPDM
==========================

[](#pdf-form-filling-with-fpdm)

Package
-------

[](#package)

This package is a fork of codeshell/fpdm. I needed this compatible with php 8.1 and available via composer so I created this fork. I intend in the future to just put the pdf form filling capabilities into a fully php 8.1 compatable library.

The FPDM class allows to fill out PDF forms, i.e. populate fields of a PDF file. It is **developed by Olivier Plathey**, author of the [FDPF Library](http://www.fpdf.org/), and has been released as [Skript 93](http://www.fpdf.org/en/script/script93.php).

I created this repository for the following reasons:

- make the current FPDM source available via [composer](https://packagist.org/packages/tmw/fpdm), autoload via classmaps
- bugfixing
    - FIX: compatibility issues with PHP 7.x [e376dc1](https://github.com/codeshell/fpdm/commit/e376dc157655ded24c61e098199586f3325d63c1) v2.9.1
    - FIX: filling forms in multiple files (wrong buffer usage, invalid offsets) [e376dc1](https://github.com/codeshell/fpdm/commit/e376dc157655ded24c61e098199586f3325d63c1) v2.9.1
    - FIX: convert ASCII object names to utf-8 [1eddba7](https://github.com/codeshell/fpdm/commit/1eddba76f610690821e8c0b3753df337a6cf65f7) v2.9.2
- improvements (changes to the original codebase are prefixed with `//FIX: change description` and ended with `//ENDFIX`)
    - ADD: support for checkboxes (disabled by default, activate with `$pdf->useCheckboxParser = true;`) [0375dd9](https://github.com/codeshell/fpdm/commit/0375dd95f05fd2d8d32d9ae1ab882fa0895b07b3) v2.9.2

Version
-------

[](#version)

Based on version 2.9 (2017-05-11) available from [fpdf.org/en/script/script93.php](http://www.fpdf.org/en/script/script93.php).

*Note: If you find that a new version has been hosted on fpdf.org, please do not hesitate to drop me [a short note](https://github.com/codeshell/fpdm/issues) to make sure I do not miss it out.*

This repository only contains the separate php class written for form filling (FPD**M**). If you are looking for a repository containing the main FPD**F** Library, please head over to [github.com/Setasign/FPDF](https://github.com/Setasign/FPDF).

Once again, all credits to Olivier Plathey for providing an easy to use script for form filling in addition to his FPDF library!

Installation
------------

[](#installation)

### Composer

[](#composer)

The preferred way of making FPDM available in your app is to install it via composer with

`composer require tmw/fpdm`

Usage
-----

[](#usage)

### Composer (autoload)

[](#composer-autoload)

[autoload](https://getcomposer.org/doc/01-basic-usage.md#autoloading) FPDM class files by adding this to your code:

`require 'vendor/autoload.php';`

### Standalone Script (legacy)

[](#standalone-script-legacy)

Load the top level entry point by calling

`require_once '/abolute/path/to/fpdm.php';`

or

`require_once './relative/path/to/fpdm.php';`

Customization to original code
------------------------------

[](#customization-to-original-code)

### classmaps vs. psr-4 (or: legacy code vs modern frameworks á la Laravel)

[](#classmaps-vs-psr-4-or-legacy-code-vs-modern-frameworks-á-la-laravel)

Autoloading classes with [namespaces](https://www.php.net/manual/en/language.namespaces.basics.php) and following [PSR-4: Autoloader](https://www.php-fig.org/psr/psr-4/) would be desireable. Especially reducing the risk of naming conflicts by using vendor namespaces.

However, FPDM has been around for a long time and as such is used in many projects that use non-namespaced code (I refer to them as legacy projects). Legacy projects instantiate FPDM by calling `$mypdf = new FPDM()` which is unqualified but defaults to the global namespace with non-namespaced code.

Using psr-4 would autoload the class to a subnamespace (e.g. \\codeshell\\fpdm\\FPDM) instead of the global namespace (e.g. \\FPDM) thus breaking any legacy code no matter if it used `new FPDM()` or `new \FPDM()`.

**Classmaps are a compromise.** They allow taking advantage of composers autoloading and dependency management. Yet classes are added to the global namespace. Legacy projects can switch to composer without having to refactor their code. **Newer projects (e.g. utilizing frameworks like laravel, that heavily rely on namespaces) can still use legacy classes** by using the fully qualified name (in this case the class name prefixed with global prefix operator as in `new \FPDM()`).

That's my reasoning for using classmaps over psr-4 for FPDM. Please let me know if there are use cases where classmaps won't work with modern frameworks.

### Checkboxes

[](#checkboxes)

I added support for checkboxes. The feature is not heavily tested but works for me. Can be enabled with `useCheckboxParser = true` like so:

```
