Pergunta

Alguém conhece um bom método para editar PDFs em PHP?De preferência, métodos de código aberto/custo de licença zero.:)

Estou pensando em abrir um arquivo PDF, substituir o texto no PDF e depois escrever a versão modificada do PDF?

Eu criei arquivos PDF programaticamente no passado usando FPDF, mas às vezes achei um pouco complicado.

Foi útil?

Solução

Se você estiver adotando uma abordagem de 'preencher os espaços em branco', poderá posicionar o texto com precisão em qualquer lugar da página.Portanto, é relativamente fácil (se não um pouco tedioso) adicionar o texto que falta ao documento.Por exemplo com 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');

Se você estiver tentando substituir conteúdo embutido, como uma "[string de espaço reservado]", ficará muito mais complicado.Embora seja tecnicamente possível fazer isso, é provável que você bagunce o layout da página.

Um documento PDF é composto por um conjunto de operações primitivas de desenho:linha aqui, imagem aqui, pedaço de texto ali, etc.Ele não contém nenhuma informação sobre a intenção de layout dessas primitivas.

Outras dicas

Existe uma aula de PDF gratuita e fácil de usar para criar documentos PDF.É chamado FPDF.Em combinação com FPDI (http://www.setasign.de/products/pdf-php-solutions/fpdi) é ainda possível editar documentos PDF.O código a seguir mostra como usar FPDF e FPDI para preencher um cupom de presente existente com os dados do usuário.

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

Se você precisa de PDFs realmente simples, então Zend ou FPDF está bem.No entanto, acho-os difíceis e frustrantes de trabalhar.Além disso, devido à forma como a API funciona, não há uma boa maneira de separar o conteúdo da apresentação da lógica de negócios.

Por esse motivo, eu uso dompdf, que converte automaticamente HTML e CSS em documentos PDF.Você pode criar um modelo da mesma forma que faria para uma página HTML e usar a sintaxe HTML padrão.Você pode até incluir um arquivo CSS externo.A biblioteca não é perfeita e a marcação ou CSS muito complexa às vezes fica confusa, mas não encontrei mais nada que funcione tão bem.

Zend Framework pode carregar e editar arquivos PDF existentes.Acho que também suporta revisões.

Eu o uso para criar documentos em um projeto e funciona muito bem.Nunca editei um embora.

Confira o documento aqui

Não sei se isso é uma opção, mas funcionaria de maneira muito semelhante à biblioteca PDF do Zend, mas você não precisa carregar um monte de código extra (o framework Zend).Apenas estende o FPDF.

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

Aqui você pode basicamente fazer a mesma coisa.Carregue o PDF, escreva por cima dele e salve em um novo PDF.No FPDI você basicamente insere o PDF como uma imagem para poder colocar o que quiser sobre ele.

Mas, novamente, isso usa FPDF, então se você não quiser usar isso, não funcionará.

A documentação da extensão PDF/pdflib em PHP é escassa (algo que foi observado em bugs.php.net) - recomendo que você use a biblioteca Zend.

Tcpdf também é uma boa biblioteca para gerar PDF em php http://www.tcpdf.org/

Eu realmente tinha grandes esperanças no dompdf (é uma ideia legal), mas a questão do posicionamento é um fator importante no uso do fpdf.Embora seja tedioso, pois cada elemento deve ser definido;é poderoso quando todos saem.

Coloquei uma imagem abaixo da minha área de trabalho no documento para colocar meu layout em cima para caber.Sempre foi suficiente, mesmo para colunas (requer um pouquinho de cálculo de string php, mas nada muito inebriante).

Boa sorte.

Nós usamos pdflib para criar arquivos PDF a partir de nossos aplicativos Rails.Possui ligações para PHP e várias outras linguagens.

Usamos a versão comercial, mas eles também têm um versão gratuita/código aberto que tem algumas limitações.

Infelizmente, isso só permite a criação de PDFs.

Se você deseja abrir e 'editar' arquivos existentes, o pdflib fornece um produto que faz isso isso, mas custa um MUITO

<?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);
?>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top