Pergunta

É possível mesclar dados FDF com um arquivo PDF usando o PHP sozinho? Ou não há opção a não ser usar uma ferramenta de linha de comando de terceiros para conseguir isso?

Se for esse o caso, alguém pode me apontar na direção de um?

Atualmente, estou emitindo o arquivo FDF para o navegador, na esperança de que ele redirecione o usuário para o PDF preenchido, mas para algumas pessoas, esse não é o caso. O conteúdo da FDF está sendo emitido na tela, mesmo que eu esteja usando o cabeçalho ('Conteúdo-Type: Application/Vnd.fdf');

Foi útil?

Solução

Para referência futura, parece que não há uma maneira confiável de fazê -lo sem um aplicativo de terceiros. Pdftk (http://www.accesspdf.com/pdftk/) acabou sendo minha solução.

Eu gerei primeiro o arquivo FDF como antes e depois o fundi no meu arquivo PDF usando o seguinte código PHP

header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="Download.pdf"');
passthru("pdftk file.pdf fill_form data.fdf output - ");
exit;

Foi muito mais fácil do que eu pensava que seria. Isso elimina instantaneamente a necessidade de invadir com cabeçalhos e extensões de arquivo para garantir que todos os navegadores lidam com um FDF corretamente, pois ele simplesmente faz com que o navegador baixe o arquivo PDF.

Se você deseja que o arquivo de saída em PDF não seja mais editável, use

    passthru("pdftk file.pdf fill_form data.fdf output - flatten");

Desculpas, se isso é coisa básica, apenas pensei em colocar tudo em um lugar para que as pessoas não passem pela dor de cabeça que eu suportou.

NB Se a sua variável de caminho não estiver definida, você precisará usar o caminho completo para pdftk, ou seja,

    passthru("/usr/local/bin/pdftk file.pdf fill_form data.fdf output - flatten");

Outras dicas

Há outro caminho para o dia que não usando o PassThru nem o PDFTK, mas apenas um script feito em 2004, mas ainda está funcionando bem: forge_fdf

Ajuda você a construir um FDF que você pode desvaporar o Straithly em seu PDF, significa que você

Salve isso em um arquivo php, digamos que gereatepdf.php

require_once('forge_fdf.php');  

// leave this blank if we're associating the FDF w/ the PDF via URL
$pdf_form_url= "";


// default data; these two arrays must ultimately list all of the fields
// you desire to alter, even if you just want to set the 'hidden' flag;
//
//
$fdf_data_names= array(); // none of these in this example
$fdf_data_strings= array(); // none of these in this example

$fdf_data_strings['email']=mb_strtolower($row_delivreur['firstname']).'.'.mb_strtolower($row_delivreur['lastname']).'@gmail.com';

$fields_hidden= array();
$fields_readonly= array();

// set this to retry the previous state
$retry_b= false;

header( 'content-type: application/vnd.fdf' );

echo forge_fdf( $pdf_form_url,
        $fdf_data_strings, 
        $fdf_data_names,
        $fields_hidden,
        $fields_readonly );

Fazendo um link para pathtoyourpdf/nameofpdffile.pdf#fdf = generatepdf.php abrirá seu arquivo pdf no navegador (alternativamente, existe uma maneira de salvá -lo no disco, acho que me lembro) e o e -mail de campo será preenchido com dados do MySQL: mb_strtolower($row_delivreur['firstname']).'.'.mb_strtolower($row_delivreur['lastname']).'@gmail.com'

Funciona com caixas de seleção, botão de rádio, ... ele abre bem no Firefox, deve ser testado com outros navegadores.

Mais infos em Hacks em PDF

De longe, da maneira mais fácil que encontrei para instalar o PDFTK no CentOS:

Instale o RPMFORGE Repo - http://wiki.Centos.org/additionalresources/repositories/rpmforge#head-5aabf02717d5b6b12d47edbc5811404998926a1b

então

yum install pdftk

e é isso!

http://www.setsign.de/products/pdf-php-solutions/fpdi/demos/concatenate-fake/

Isso funciona, o download das aulas também está vinculado no site,

Não requer comando passhru/exec/não extensões adicionais.

Editado para dizer, isso não funciona com as versões PDF mais recentes 1.5+, revertidas para PDFTK, complicadas, mas funciona com todos os PDFs usando o comando 'Exec'.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top