Редактирование PDF в PHP? [закрыто]


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

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

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

 69
Author: kaybenleroll, 2008-08-11

10 answers

Если вы используете подход "заполнить пробел", вы можете точно разместить текст в любом месте страницы, где захотите. Таким образом, добавить отсутствующий текст в документ относительно легко (если не немного утомительно). Например, с помощью 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 - это состоит из набора примитивных операций рисования: линия здесь, изображение здесь, фрагмент текста там и т.д. Он не содержит никакой информации о намерениях компоновки этих примитивов.

 63
Author: grom, 2008-08-11 00:54:22

Существует бесплатный и простой в использовании класс 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');
 36
Author: metatron, 2018-07-01 15:06:16

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

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

 17
Author: AdamTheHutt, 2012-12-07 22:51:30

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

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

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

 3
Author: Juan, 2008-08-10 23:16:39

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

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

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

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

 3
Author: Darryl Hein, 2008-09-09 22:46:40

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

 2
Author: Ross, 2008-08-21 16:15:39

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

 2
Author: Mufaddal, 2012-05-29 12:38:35

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

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

Удачи.

 1
Author: josh.chavanne, 2008-09-18 00:55:36

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

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

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

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

 0
Author: Orion Edwards, 2008-08-10 22:41:00
<?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);
?>
 0
Author: Nitin, 2009-10-21 20:56:21