定制 1tomany/pdf-pack-bundle 二次开发

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

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

1tomany/pdf-pack-bundle

最新稳定版本:v0.7.1

Composer 安装命令:

composer require 1tomany/pdf-pack-bundle

包简介

Symfony bundle for the 1tomany/pdf-pack library

README 文档

README

This package wraps the 1tomany/pdf-pack library into an easy to use Symfony bundle.

Installation

Install the bundle using Composer:

composer require 1tomany/pdf-pack-bundle

Configuration

Below is the complete configuration for this bundle. To customize it for your Symfony application, create a file named onetomany_pdfpack.yaml in config/packages/ and make the necessary changes.

onetomany_pdfpack:
    client: "poppler"
    poppler_client:
        pdfinfo_binary: "pdfinfo"
        pdftoppm_binary: "pdftppm"
        pdftotext_binary: "pdftotext"

Usage

Symfony will autowire the necessary classes after the bundle is installed. Any constructor argument typed with OneToMany\PdfPack\Contract\Action\ExtractActionInterface or OneToMany\PdfPack\Contract\Action\ReadActionInterface will allow you to interact with the concrete extractor client via the act() method.

<?php

namespace App\File\Action\Handler;

use OneToMany\PdfPack\Contract\Action\ExtractActionInterface;
use OneToMany\PdfPack\Contract\Action\ReadActionInterface;
use OneToMany\PdfPack\Request\ExtractRequest;
use OneToMany\PdfPack\Request\ReadRequest;

final readonly class UploadFileHandler
{
    public function __construct(
        private ReadActionInterface $readAction,
        private ExtractActionInterface $extractAction,
    ) {
    }

    public function handle(string $filePath): void
    {
        // Read PDF metadata like page count
        $request = new ReadRequest($filePath);

        // @see OneToMany\PdfPack\Response\ReadResponse
        $response = $this->readAction->act($request);

        // Rasterize all pages of a PDF
        $request = new ExtractRequest($filePath)
            ->fromPage(1) // First page to extract
            ->toPage(null) // Last page to extract, NULL for all pages
            ->asPngOutput() // Generate PNG images
            ->atResolution(150); // At 150 DPI

        // @see OneToMany\PdfPack\Response\ExtractResponse
        foreach ($this->extractAction->act($request) as $page) {
            // $page->getData() or $page->toDataUri()
        }

        // Extract text from pages 2 through 8
        $request = new ExtractRequest($filePath, 2, 8)->asTextOutput();

        // @see OneToMany\PdfPack\Response\ExtractResponse
        foreach ($this->extractAction->act($request) as $page) {
            // $page->getData() or $page->toDataUri()
        }
    }
}

Testing

If you wish to avoid interacting with an external process in your test environment, you can take advantage of the MockClient by simply setting the onetomany_pdfpack.client parameter to the value "mock" in your Symfony service configuration for the test environment.

when@test:
    onetomany_pdfpack:
        client: "mock"

Without changing any other code, Symfony will automatically inject the MockClient instead of the default PopplerClient for your tests.

Creating your own client

Don't want to use Poppler? No problem! Create your own extractor class that implements the OneToMany\PdfPack\Contract\Client\ClientInterface interface and tag it accordingly.

<?php

namespace App\PdfPack\Client\Magick;

use OneToMany\PdfPack\Contract\Client\ClientInterface;
use OneToMany\PdfPack\Contract\Request\ExtractRequest;
use OneToMany\PdfPack\Contract\Request\ReadRequest;
use OneToMany\PdfPack\Contract\Response\ReadResponse;

final readonly class MagickClient implements ClientInterface
{
    public function read(ReadRequest $request): ReadResponse
    {
        // Add your implementation here
    }

    public function extract(ExtractRequest $request): \Generator
    {
        // Add your implementation here
    }
}
onetomany_pdfpack:
    client: "magick"

services:
    App\PdfPack\Client\Magick\MagickClient:
        tags:
            - { name: onetomany.pdfpack.client, key: magick }

That's it! Again, without changing any code, Symfony will automatically inject the correct extractor client for the action interfaces outlined above.

Credits

License

The MIT License

统计信息

  • 总下载量: 26
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 7
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 1
  • Watchers: 2
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-03-05

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固