Вопрос

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

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

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

Это было полезно?

Решение

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

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

Существует бесплатный и простой в использовании класс PDF для создания PDF-документов.Это называется ФПДФ.В сочетании с 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');

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

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

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

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

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

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

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

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

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

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

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

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

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

Удачи.

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

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

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

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

<?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);
?>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top