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



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



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



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

1103   10  

10 ответов:

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

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

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

есть бесплатный и простой в использовании класс 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');

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

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

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

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

Проверьте doc здесь

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

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

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

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

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

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

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

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

удачи.

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

мы используем коммерческую версию, но у них также есть free / open source version, который имеет некоторые ограничения.

к сожалению, это позволяет создавать только 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);
?>

Comments

    Ничего не найдено.