Редактирование PDF в PHP?

Кто-нибудь знает хороший метод редактирования PDF-файлов на PHP? Предпочтительно методы с открытым исходным кодом / без затрат на лицензию. :)

Я думаю о том, как открыть файл PDF, заменить текст в PDF и затем записать измененную версию PDF?

В прошлом я программно создавал файлы PDF с помощью FPDF, но временами находил это немного громоздким.

Я использовал только FPDF и считаю, что это круто. Вроде действительно круто.

SQLMason 17.10.2011 21:02

Я тоже пытался найти быстрое решение этой проблемы. Мне нужен был один и тот же PDF-файл для каждой страницы моего продукта, но с заменой номера продукта и названия продукта на каждом PDF-файле. Я обнаружил, что использование слияния почты (Word или OpenOffice) на самом деле является самым простым способом сделать это. Затем я экспортировал все PDF-файлы и загрузил их. Надеюсь, это кому-то поможет.

NotJay 02.09.2015 22:09
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
81
2
122 116
10
Перейти к ответу Данный вопрос помечен как решенный

Ответы 10

Мы используем pdflib для создания файлов PDF из наших приложений rails. У него есть привязки к PHP и множеству других языков.

Мы используем коммерческую версию, но у них также есть бесплатная версия с открытым исходным кодом, у которого есть некоторые ограничения.

К сожалению, это позволяет создавать только PDF-файлы.

Если вы хотите открывать и «редактировать» существующие файлы, pdflib предоставляет продукт, который делает это, но стоит МНОГО

Zend Framework может загружать и редактировать существующие файлы PDF. Думаю, он тоже поддерживает исправления.

Я использую его для создания документов в проекте, и он отлично работает. Но ни разу не редактировал.

Ознакомьтесь с документом здесь

Ответ принят как подходящий

Если вы используете подход «заполнить пробел», вы можете точно разместить текст в любом месте страницы. Так что добавить недостающий текст в документ относительно легко (если не немного утомительно). Например, с Zend Framework:

<?php
require_once 'Zend/Pdf.php';

$pdf = Zend_Pdf::load('blank.pdf');
$page = $pdf->pages[0];
$font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA);
$page->setFont($font, 12);
$page->drawText('Hello world!', 72, 720);
$pdf->save('zend.pdf');

Если вы пытаетесь заменить встроенный контент, такой как «[строка-заполнитель]», это становится намного сложнее. Хотя это технически возможно, вы, скорее всего, испортите макет страницы.

Документ PDF состоит из набора примитивных операций рисования: линия здесь, изображение здесь, фрагмент текста там и т. д. Он не содержит никакой информации о макете этих примитивов.

Это здорово! Я не понимал, что Zend Framework бесплатен, меня смутила Zend Studio, которая является проприетарной.

Liam 07.10.2008 14:03

Небольшое предупреждение для всех, кто пытается это использовать: он работает только с PDF-файлами, созданными в Acrobat версии 4 и ранее. После версии 4 Adobe начала кодировать файлы, что усложнило редактирование PDF-файлов (или импорт в другие PDF-файлы).

Darryl Hein 09.06.2009 05:26

PDF 1.4 Поддержка с тех пор был добавлен.

Raphael Schweikert 14.04.2011 13:49

Теперь это работает без Zend?

William Entriken 11.04.2013 21:24

Любое решение, если я хочу заменить контент, например [строка-заполнитель]?

Starx 26.08.2013 13:28

Как редактировать текст PLACEHOLDER?

Magico 10.02.2015 19:44

Например, примитив для рисования hello world: [(Hello) -40 (W) -30 (or) 15 (ld!)] TJ. Так что редактировать текст-заполнитель непросто.

grom 19.03.2015 12:05

Привет, можно ли использовать это решение для редактирования подписанных PDF-документов, не затрагивая подписи документа? потому что FPDI, например, создает новый документ, импортируя только страницы PDF, но не подписи документа.

Aramis Rodríguez Blanco 16.11.2019 17:11

Документация по расширению PDF / pdflib в PHP немногочисленна (что было отмечено в bugs.php.net) - я рекомендую вам использовать библиотеку Zend.

Если вам нужны действительно простые PDF-файлы, подойдут Zend или FPDF. Однако я считаю, что с ними сложно и неприятно работать. Кроме того, из-за того, как работает API, нет хорошего способа отделить контент от представления от бизнес-логики.

По этой причине я использую dompdf, который автоматически конвертирует HTML и CSS в документы PDF. Вы можете создать шаблон так же, как и для HTML-страницы, и использовать стандартный синтаксис HTML. Вы даже можете включить внешний файл CSS. Библиотека не идеальна, и очень сложная разметка или CSS иногда искажаются, но я не нашел ничего, что работало бы также.

-1 Так как не отвечает на вопрос. Автор хочет редактировать существующие PDF-файлы, а не создавать их с нуля.

Reimund 26.01.2012 15:24

Я пришел на эту страницу, потому что хотел отредактировать PDF-файл, но этот ответ кажется мне более полезным, потому что я понимаю, почему может быть проще создать с нуля в html, чем редактировать существующий PDF-файл.

Justin Vincent 30.03.2012 01:44

Не знаю, возможен ли этот вариант, но он будет работать очень похоже на pdf-библиотеку Zend, но вам не нужно загружать кучу дополнительного кода (фреймворк zend). Он просто расширяет FPDF.

http://www.setasign.de/products/pdf-php-solutions/fpdi/

Здесь вы можете сделать то же самое. Загрузите PDF-файл, напишите поверх него, а затем сохраните в новый PDF-файл. В FPDI вы в основном вставляете PDF-файл как изображение, чтобы вы могли поместить все, что захотите, поверх него.

Но опять же, здесь используется FPDF, поэтому, если вы не хотите его использовать, это не сработает.

Я действительно возлагал большие надежды на dompdf (это крутая идея), но проблема позиционирования - главный фактор в моем использовании fpdf. Хотя это утомительно, так как каждый элемент должен быть установлен; это мощно, как и все.

Я кладу изображение под свое рабочее пространство в документе, чтобы разместить макет поверх него. Его всегда было достаточно даже для столбцов (требуется крошечный бит вычисления строки php, но не слишком пьянящий).

Удачи.

<?php

//getting new instance
$pdfFile = new_pdf();

PDF_open_file($pdfFile, " ");

//document info
pdf_set_info($pdfFile, "Auther", "Ahmed Elbshry");
pdf_set_info($pdfFile, "Creator", "Ahmed Elbshry");
pdf_set_info($pdfFile, "Title", "PDFlib");
pdf_set_info($pdfFile, "Subject", "Using PDFlib");

//starting our page and define the width and highet of the document
pdf_begin_page($pdfFile, 595, 842);

//check if Arial font is found, or exit
if ($font = PDF_findfont($pdfFile, "Arial", "winansi", 1)) {
    PDF_setfont($pdfFile, $font, 12);
} else {
    echo ("Font Not Found!");
    PDF_end_page($pdfFile);
    PDF_close($pdfFile);
    PDF_delete($pdfFile);
    exit();
}

//start writing from the point 50,780
PDF_show_xy($pdfFile, "This Text In Arial Font", 50, 780);
PDF_end_page($pdfFile);
PDF_close($pdfFile);

//store the pdf document in $pdf
$pdf = PDF_get_buffer($pdfFile);
//get  the len to tell the browser about it
$pdflen = strlen($pdfFile);

//telling the browser about the pdf document
header("Content-type: application/pdf");
header("Content-length: $pdflen");
header("Content-Disposition: inline; filename=phpMade.pdf");
//output the document
print($pdf);
//delete the object
PDF_delete($pdfFile);
?>

Какую библиотеку вы используете?

Hugo Estrada 26.02.2010 16:24

pdf_set_info($pdfFile, "Title", "PDFlib");

user183037 07.02.2011 03:35

до сих пор не ясно, что это за библиотека

Deniz Celebi 16.02.2018 19:03

Я полагаю, он имел в виду встроенное расширение php pdflib. php.net/manual/en/pdf.examples-basic.php

Kostiantyn 22.10.2020 04:52

Существует бесплатный и простой в использовании класс PDF для создания документов PDF. Он называется FPDF. В сочетании с FPDI (http://www.setasign.de/products/pdf-php-solutions/fpdi) можно даже редактировать документы PDF. В следующем коде показано, как использовать FPDF и FPDI для заполнения существующего подарочного купона данными пользователя.

require_once('fpdf.php'); 
require_once('fpdi.php'); 
$pdf = new FPDI();

$pdf->AddPage(); 

$pdf->setSourceFile('gift_coupon.pdf'); 
// import page 1 
$tplIdx = $this->pdf->importPage(1); 
//use the imported page and place it at point 0,0; calculate width and height
//automaticallay and ajust the page size to the size of the imported page 
$this->pdf->useTemplate($tplIdx, 0, 0, 0, 0, true); 

// now write some text above the imported page 
$this->pdf->SetFont('Arial', '', '13'); 
$this->pdf->SetTextColor(0,0,0);
//set position in pdf document
$this->pdf->SetXY(20, 20);
//first parameter defines the line height
$this->pdf->Write(0, 'gift code');
//force the browser to download the output
$this->pdf->Output('gift_coupon_generated.pdf', 'D');

Отличная библиотека - именно то, что мне нужно, спасибо за рекомендацию

james-geldart 26.01.2012 19:53

Это хорошо, но в каком-то pdf выдает эту ошибку "FPDF error: This document (testcopy.pdf) probably uses a compression technique which is not supported by the free parser shipped with FPDI." Любое решение для этого?

user1360768 29.08.2012 09:19

Вам необходимо преобразовать ваш PDF-файл в более старую версию (pdf 1.4) или использовать коммерческую версию fpdi. Мы предлагаем замену парсера как отдельную коммерческую надстройку, которая позволяет FPDI обрабатывать документы, использующие эти функции сжатия.источник

SwissFr 01.03.2018 12:10

Можно ли установитьSourceFile с другой веб-страницы? Пример: example.com/file.pdf?

Alex 30.06.2020 14:23

Tcpdf также является хорошей библиотекой для создания pdf на php. http://www.tcpdf.org/

Для всех, кто ищет, как легко добавить верхний и нижний колонтитулы, TCPDF предлагает очень простой и эффективный пример: tcpdf.org/examples/example_003

Alen Šimunic 01.07.2018 11:43

Другие вопросы по теме