2009-09-07 11 views
20

Czy można scalić dane FDF z plikiem PDF za pomocą samego PHP? Czy nie ma opcji, aby użyć narzędzia wiersza poleceń innej firmy, aby to osiągnąć?Łączenie danych FDF do pliku PDF za pomocą PHP

Jeśli tak, czy ktoś może wskazać mi kierunek?

Aktualnie wysyłam plik FDF do przeglądarki w nadziei, że przekieruje użytkownika do wypełnionego pliku PDF, ale w przypadku niektórych osób tak nie jest. Zawartość FDF jest wyprowadzana na ekran, nawet jeśli używam nagłówka ("Content-type: application/vnd.fdf");

Odpowiedz

30

Dla przyszłego odniesienia wygląda na to, że nie ma niezawodnego sposobu, aby to zrobić bez aplikacji innej firmy. Pdftk (http://www.accesspdf.com/pdftk/) okazał się moim rozwiązaniem.

raz pierwszy wygenerowany plik FDF jak poprzednio, a następnie połączyła go w moim pliku PDF za pomocą następującego kodu PHP

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

było o wiele łatwiejsze niż myślałem że będzie. To natychmiast eliminuje potrzebę hackowania z nagłówkami i rozszerzeniami plików, aby zapewnić, że wszystkie przeglądarki obsługują FDF poprawnie, ponieważ po prostu sprawia, że ​​przeglądarka pobiera plik PDF.

Jeśli chcesz plik wyjściowy PDF nie można edytować, należy

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

Przepraszamy, jeśli jest to podstawowe rzeczy, po prostu myślałem, że to wszystko umieścić w jednym miejscu tak, że ludzie nie chodzą przez ból głowy, który zniosłem.

N.B. Jeśli zmienna PATH nie jest ustawiony, trzeba będzie użyć pełnej ścieżki do pdftk tj

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

zrobiłem, że teraz, dzięki – James

+1

Wow, bardzo mi pomogło! – Strae

+2

Należy zauważyć, że 'fill_form' działa również z danymi XFDF. Jeśli chcesz utworzyć kombinację pól do edycji i tylko do odczytu w wynikowym pliku PDF, ustaw właściwość "tylko do odczytu" dla pól, które chcesz wypełnić podczas generowania pliku PDF. Pola tylko do odczytu będą wypełniane przez PDFTK, ale nie będą mogły być edytowane przez użytkownika końcowego. – Kenaniah

3

Jest też inny sposób do dnia, w którym nie używa posredniego ani pdftk ale tylko skrypt wykonany w 2004 roku, ale nadal działa dobrze: forge_fdf

Pomaga budować FDF że można incoporate straithly w pdf, to oznacza, że ​​można zapisać w pliku php, powiedzmy generatePdf.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); 

Making link do Pathtoyourpdf/nameofpdffile.pdf # FDF = generatePdf.php będzie otworzyć plik PDF w przeglądarce (alternatywnie istnieje sposób, aby zapisać go na dysku Chyba pamiętam), a pole email zostaną wypełnione danymi z MYSQL: mb_strtolower($row_delivreur['firstname']).'.'.mb_strtolower($row_delivreur['lastname']).'@gmail.com'

Działa z polami wyboru, przycisk opcji, ... Otwiera się dobrze w firefoxie, musi być przetestowany z innymi przeglądarkami.

Więcej informacje na PDF HACKS

+0

forge_fdf for PHP jest również napisany przez PDF Labs (twórców Pdftk). – BMiner