Php редактировать pdf файл

Glorified Geek

«Play is the highest form of research» – Albert Einstein

Modifying PDF files with PHP

Last week, a friend of mine asked me to help him with a programming problem that he had been wrestling with for some time. The problem sounds simple:

And this had to be done with PHP.

Although there are several libraries available in PHP for dealing with PDF files, none seem to have capabilities to modify the contents of an existing PDF file. Their manuals/tutorials are full of examples on how to create PDF on the fly. After spending few fruitless hours trying to get the much recommended PDFLib installed in my Mac and have it work with MAMP, I painfully realized this library is for commercial use only. The free version leaves a horrible watermark of their site address on the generated PDF documents.

My search for a solution took me to FPDF, an open-source library for PDF file generation in PHP. In their FAQ section, I found the link to an extension of the library, named FPDI. This one was seemingly capable of ‘manipulating’ PDF files in an ad hoc fashion. It extracts the contents of each page in the file, uses it as a template, lets you put texts/shapes on the template and then outputs the modified file. Excited, I got into coding and after an hour of labor, finally succeeded to achieve my goal! Thank God for creating open source!

Читайте также:  Checking prime numbers in python

Enough talk, now lets get our hand dirty!

First we need to have following libraries downloaded and unzipped. They are just packages of PHP scripts that you just require/include in your own script. No need to deal with .dll/.so extensions.

Keep them in the same directory of your script, or in the include path. The following code snippet gives a basic idea of how to get started with it:

//Set the source PDF file
$pagecount = $pdf->setSourceFile(«my_existing_pdf.pdf»);

//Import the first page of the file
$tpl = $pdf->importPage($i);
//Use this page as template
$pdf->useTemplate($tpl);

#Print Hello World at the bottom of the page

//Go to 1.5 cm from bottom
$pdf->SetY(-15);
//Select Arial italic 8
$pdf->SetFont(‘Arial’,’I’,8);
//Print centered cell with a text in it
$pdf->Cell(0, 10, «Hello World», 0, 0, ‘C’);

The above code takes a PDF file “my_existing_pdf.pdf”, and creates a copy of it “my_modified_pdf.pdf” with “Hello World” printed at the centre bottom of the first page.

That’s it! To achieve my goal, which I outlined at the start of this post, I extended the FPDI class, and overrode the Footer() method to print a customized footer in each page.

I only wish that the PHP online manual did NOT have an entire section dedicated to PDFLib, a non-free and commercial library, and rather point to free ones such FPDF or TCPDF. It could have saved me hours.

Источник

Как редактировать PDF файлы на php?

Можно ли как-то получить содержимое pdf файла и отредактировать его, используя php? PDF представляет собой текст с иллюстрациями (не скан печатного документа).

Сохранить в pdf в целом можно, хотя придется прилично пошаманить чтобы получить удобоваримое оформление.

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

Проблема в том, что все эти читалки-распознавалки дают весьма посредственное качество на выходе. Если только форматирование рассыпется — это вам повезло. Если вдруг нужно табличку распарсить — страдания практически гарантированы.

Еще можно в картинку конвертировать (с этим все ок) и через тессеракт прогнать, хоть он и питоновский внутре. Ну или файнридер.

Это точно не вариант, поскольку выходит далеко за пределы php.
А так, в целом, спасибо за ответ. Позже отмечу решением. Посмотрю, может еще что-нибудь предложат.

posters, это конечно выходит за пределы, только вот эти пределы вы сами себе ставите. Никто ведь вам не запрещает пользоваться инструментами на других языках)

У этого PDFParser-а есть демо страничка. Загоните туда несколько ваших ПДФ-ок прямо сейчас и посмотрите что он выдаст. У меня например около 5% табличек после распознавания содержат нечитаемые строки, которые менеджеры в итоге вручную вбивают. Ну хоть остальные 95% автоматом пролетают, и то хорошо. Тессеракт дает результаты получше, хотя тоже иногда кашу выдает.

У файнридера есть какой-то механизм шаблонов для однотипных документов, но я еще с ним не разбирался.

Источник

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

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

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

10 ответов

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

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'); 

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

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

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

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

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

Для создания 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'); 

Это хорошо, но в некоторых «FPDF error: This document (testcopy.pdf) probably uses a compression technique which is not supported by the free parser shipped with FPDI.» эта ошибка: «FPDF error: This document (testcopy.pdf) probably uses a compression technique which is not supported by the free parser shipped with FPDI.» Ошибка «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 обрабатывать документы, использующие эти функции сжатия. источник

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

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

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

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

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

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

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

Источник

PHP PDF Editor Library

PSPDFKit for Web is a JavaScript library for editing PDF documents directly in a browser. It is fully compatible with PHP and offers developers a robust API for programmatic editing, as well as a beautiful UI for performing a host of editing operations in any PHP-based web app.

PSPDFKit SDKs are deployed in some of the world’s most popular applications, such as those made by Autodesk, Disney, DocuSign, Dropbox, IBM, and Lufthansa.

Key Capabilities

  • Annotations, forms, bookmarks — Create, edit, or remove
  • Page manipulation — Rotate, merge, split, delete, or add pages
  • Client-side — Edit PDFs directly in the browser (no server needed)
  • Browser support — Works on all modern browsers and devices
  • Headless — Programmatically edit PDFs without the UI
  • Customizable UI — Hide buttons, match your look and feel, and more
  • Extendable — Add forms, signing, annotation, and more

Guides for PDF Editing

Edit Text in PDF Files
Edit text directly in PDF documents

Merge or Combine PDFs
How to merge multiple PDF documents together

Rotate Pages
How to rotate pages by a desired amount

Move or Copy Pages
How to move or copy pages within a PDF document

Remove Pages
How to remove pages from a PDF document

Add a Page
How to add a blank page to a PDF document

Split a PDF
How to split a PDF into two or more documents

Add an Image to a Page
How to add an image to a page as an annotation

Headless Editing
How to edit PDFs without presenting the UI

Edit the Page Label
How to set the label for any page in a PDF document

Built-In Document Editing UI
Learn about the document operations available in the editor UI

Replace Text
How to replace text directly in PDF documents

Free Trial

Enjoy unlimited trial usage of all our products. Get guidance and tech support from developers who built the product, and get started within minutes.

Источник

Оцените статью