Редагування PDF у PHP? [зачинено]


81

Хтось знає хороший метод редагування PDF-файлів у PHP? Бажано методи з відкритим кодом / з нульовою ліцензією. :)

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

Раніше я програмно створював файли PDF за допомогою FPDF, але часом виявляв їх трохи громіздкими.


Я використовував лише FPDF і думаю, що це чудово. Як справді чудово.
SQLMason

Я також намагався знайти швидке рішення. Я хотів отримати однаковий pdf для кожної зі сторінок свого продукту, але з заміною номера та назви товару на кожному pdf. Я виявив, що використання злиття пошти (Word або OpenOffice) насправді є найпростішим способом зробити це. Потім я експортував усі файли PDF і завантажив їх. Сподіваюся, це комусь допомагає.
NotJay

Відповіді:


70

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


1
Це чудово! Я не підозрював, що Zend Framework є безкоштовним, мене збентежила Zend Studio, яка є власною.
Ліам

8
Лише слово обережності для тих, хто намагається використовувати це: воно працює лише з PDF-файлами, створеними у версії Acrobat 4 і раніше. Після версії 4 Adobe почав кодувати файли, ускладнюючи редагування PDF-файлів (або імпорт в інші PDF-файли).
Дарріл Хайн


2
Чи працює це зараз без Зенда?
Вільям Ентрікен

Будь-яке рішення, якщо я хочу замінити вміст, такий як [рядок заповнювача]?
Starx

42

Існує безкоштовний і простий у використанні клас 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');

1
Відмінна бібліотека - саме те, чим я займався, дякую за рекомендацію
James-Geldart

1
Це добре, але в деяких PDF-файлах він видає цю помилку. "FPDF error: This document (testcopy.pdf) probably uses a compression technique which is not supported by the free parser shipped with FPDI."Будь-яке рішення для цього?

Вам потрібно перетворити ваш pdf на стару версію (pdf 1.4) або скористатися комерційною версією fpdi. Ми пропонуємо заміну парсера як окремий комерційний аддон, що дозволяє FPDI обробляти документи, що використовують ці функції стиснення. джерело
SwissFr

Чи можна встановитиSourceFile з іншої веб-сторінки? Наприклад: example.com/file.pdf?
Алекс

19

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

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


9
-1 Оскільки воно не відповідає на питання. Плакат хоче редагувати існуючі PDF-файли, не створюючи їх з нуля.
Реймунд

9
Я потрапив на цю сторінку, тому що прагнув відредагувати PDF, але ця відповідь здається мені більш корисним, оскільки я розумію, чому може бути простіше створити з нуля в HTML, а не редагувати існуючий PDF.
Джастін Вінсент

3

Не знаю, чи це варіант, але це буде дуже схоже на PDF-бібліотеку Zend, але вам не потрібно завантажувати купу додаткового коду (фреймворк zend). Він просто розширює FPDF.

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

Тут ви можете зробити те саме. Завантажте PDF, напишіть поверх нього, а потім збережіть у новий PDF. У FPDI ви в основному вставляєте PDF як зображення, щоб над ним можна було розмістити все, що завгодно.

Але знову ж таки, тут використовується FPDF, тому якщо ви не хочете використовувати це, то це не буде працювати.


3

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

Я використовую його для створення документів у проекті, і він чудово працює. Хоча ніколи не редагував.

Перегляньте документ тут


2

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



1

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

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

Удачі.


0

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

Ми використовуємо комерційну версію, але вони також мають безкоштовну / відкриту версію, яка має деякі обмеження.

На жаль, це дозволяє створювати лише PDF-файли.

Якщо ви хочете відкрити та `` відредагувати '' існуючі файли, pdflib надає продукт, який робить це , але коштує БАГАТО


-1
<?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);
?>

8
Якою бібліотекою ви користуєтесь?
Hugo Estrada

1
pdf_set_info($pdfFile, "Title", "PDFlib");
user183037 07

досі незрозуміло, що це за бібліотека
Деніз Челебі

Я вважаю, що він мав на увазі вбудоване розширення php pdflib. php.net/manual/en/pdf.examples-basic.php
Костянтин
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.