定制 tmw/fpdm 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

tmw/fpdm

Composer 安装命令:

composer require tmw/fpdm

包简介

PDF form filling using FPDM Class written by FPDF author Olivier

README 文档

README

Package

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, and has been released as Skript 93.

I created this repository for the following reasons:

  • make the current FPDM source available via composer, autoload via classmaps
  • bugfixing
    • FIX: compatibility issues with PHP 7.x e376dc1 v2.9.1
    • FIX: filling forms in multiple files (wrong buffer usage, invalid offsets) e376dc1 v2.9.1
    • FIX: convert ASCII object names to utf-8 1eddba7 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 v2.9.2

Version

Based on version 2.9 (2017-05-11) available from 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 to make sure I do not miss it out.

This repository only contains the separate php class written for form filling (FPDM). If you are looking for a repository containing the main FPDF Library, please head over to 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

Composer

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

composer require tmw/fpdm

Usage

Composer (autoload)

autoload FPDM class files by adding this to your code:

require 'vendor/autoload.php';

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

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

Autoloading classes with namespaces and following PSR-4: Autoloader 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

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

<?php
$fields = array(
    'my_checkbox'    => 'anything that evaluates to true.', // checkbox will be checked;  Careful, that includes ANY non-empty string (even "no" or "unchecked")
    'another_checkbox' => false, // checkbox will be UNchecked; empty string or 0 work as well
);

$pdf = new FPDM('template.pdf');
$pdf->useCheckboxParser = true; // Checkbox parsing is ignored (default FPDM behaviour) unless enabled with this setting
$pdf->Load($fields, true);
$pdf->Merge();
$pdf->Output();

You don't have to figure out the technical names of checkbox states. They are retrieved during the parsing process.

Original Info Page

Everything below is mirrored from http://www.fpdf.org/en/script/script93.php .

Information

Author: Olivier

License: FPDF

Description

This script allows to merge data into a PDF form. Given a template PDF with text fields, it's possible to inject values in two different ways:

  • from a PHP array
  • from an FDF file

The resulting document is produced by the Output() method, which works the same as for FPDF.

Note: if your template PDF is not compatible with this script, you can process it with PDFtk this way:

pdftk modele.pdf output modele2.pdf

Then try again with modele2.pdf.

Example

This example shows how to merge data from an array:

<?php

/***************************
  Sample using a PHP array
****************************/

$fields = array(
    'name'    => 'My name',
    'address' => 'My address',
    'city'    => 'My city',
    'phone'   => 'My phone number'
);

$pdf = new FPDM('template.pdf');
$pdf->Load($fields, false); // second parameter: false if field values are in ISO-8859-1, true if UTF-8
$pdf->Merge();
$pdf->Output();
?>

View the result here.

tmw/fpdm 适用场景与选型建议

tmw/fpdm 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 678.66k 次下载、GitHub Stars 达 129, 最近一次更新时间为 2017 年 11 月 09 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「pdf」 「Forms」 「fpdf」 「fields」 「populate」 「fill」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 tmw/fpdm 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 tmw/fpdm 我们能提供哪些服务?
定制开发 / 二次开发

基于 tmw/fpdm 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 678.66k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 130
  • 点击次数: 26
  • 依赖项目数: 3
  • 推荐数: 0

GitHub 信息

  • Stars: 129
  • Watchers: 5
  • Forks: 76
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2017-11-09