2011-07-13 12 views
7

Utknąłem w bardzo złożonej sytuacji. Pracuję nad aplikacjami sieci Web PHP dla karty z pozdrowieniami.Problem z rozmiarem zaimportowanego szablonu PDF z FPDI + TCPDF

Do tego używam niektórych narzędzi Linuksa oraz TCPDF i FPDI. Pozwól mi powiedzieć, jak to wszystko działa:

istnieje 4 strona szablon karty z pozdrowieniami PDF. jest to rozmiar niestandardowy 5x7 cali 300dpi pliku PDF. Dodałem rozmiar niestandardowy w TCPDF także

case 'STANDARD_CARD'  : {$pf = array(1500.00,2100.00);break;} 

co mogę zrobić, to używam:

pdftk templateX.pdf burst output page_%2d.pdf 

oddzielić każdą stronę świątyni.

teraz używam:

$pdf = new FPDI($cardDetails['ORIENTATION'],"mm",$cardDetails['SIZE']);  


    //set source file for 
    $pdf->setSourceFile($pdfFile); 
    $templateIndex = $pdf->importPage(1); 
    $pdf->AddPage($cardDetails['ORIENTATION'],$cardDetails['SIZE']); 
    $pdf->useTemplate($templateIndex,0,0); 

inne rzeczy jak pisanie wiadomości drukowania obrazów. i na koniec zapisać plik przy użyciu:

$pdf->output("file_name.pdf","F"); 

oryginalny plik PDF (tylko 1 strona): (5x7 cali) Original pdf file Modified PDF i niektóre operacje PDF: (29x20 cali) modified PDF

teraz wyjście, które otrzymuję, nie jest 5x7 pdf, to jest plik o rozmiarach 29 x 20 cali, który niszczy moje obliczenia i PDF.

Proszę mi powiedzieć co robię źle ...

+0

Jaka jest zawartość '$ cardDetails'? – Orbling

+0

$ cardDetails zawiera rozmiar i orientację karty 'code' $ cardDetails ['ORIENTATION'] = 'L'; $ cardDetails ['SIZE'] = 'STANDARD_CARD'; 'code' wielkość STANDARD_CARD kala się w klasie TCPDF jako ' code' przypadek 'STANDARD_CARD': {$ pf = array (360.00,504.00); break;} 'code' dobrze, mam problem rozwiązany (w pewnym stopniu, nie w 100%) Chciałem ustawić rozmiar pliku PDF na format PDF zaimportowany, na przykład importowany pdf to 5,27 X 7,1. następnie odpowiednio ustaw rozmiar. ale nie ma w tym szczęścia, tylko pewne praktyczne rozwiązanie, a nie 100%, ale wydaje się, że działa dla mnie ... – Ravish

Odpowiedz

18

Hi Ravish,

natknąłem się również ten problem. Właściwie to mój scenariusz. Mam oryginalny plik o rozmiarze Legal (8,5 mm x 14 mm mm). Kiedy wyświetlam go przy użyciu wyjścia FPDI tak, jak ty, wyświetla tylko rozmiar liter (8,5 mm x 11 mm) (). Wynik jest następujący: CROPPED Plik PDF.

Zrobiłem kilka googling i znalazłem kilka odpowiedzi z różnych stanowisk. Oto najważniejsze rozwiązanie, które znalazłem.

Pierwszy to ten kawałek kodu funkcji poniżej: useTemplate

$this->useTemplate($templateIndex, null, null, 0, 0, true); 

Normalnie, niektórzy deweloperzy ustawić to jako PRAWDA za ostatni argument. Tak, to prawda, jeśli nie ustawisz szerokości i długości.Chciałbym jednak podkreślić, że czwarty i piąty argument określa szerokość i długość importowanego pliku PDF. Tak więc, jeśli przyjmiesz lub uzyskasz rzeczywisty rozmiar zaimportowanego dokumentu, ustaw ostatni argument na FALSE, ponieważ będzie to wskazywać, że będzie to rzeczywisty lub określony rozmiar, który ustawisz.

Proszę wziąć to przykładowe kody robiłam:

$pdf = new FPDI(); 
$pdf -> setSourceFile('birform2316.pdf'); 
$tplIdx = $pdf -> importPage(1); 
$size = $pdf->getTemplateSize($tplIdx); 
$pdf -> AddPage(); 
$pdf ->useTemplate($tplIdx, null, null, $size['w'], 310, FALSE); 
$pdf -> SetFont('Arial'); 
$pdf -> SetTextColor(0, 0, 0); 
$pdf -> SetXY(18, 174); 
$pdf -> Write(0, $employer_address); 
$pdf -> Output('myOwn.pdf', 'D'); 

Z tego kodu, mam opracowała nowy PDF bez przycinania importowanego pliku, że mogę ustawić. Oznacza to, że zostały wyświetlone wszystkie szczegóły szablonu (oryginalny plik).

Proszę wziąć pod uwagę także, że obserwowane coś podczas ustawiania rozmiaru mojego PDF:

Po pierwsze, mój plik ma oryginalną szerokość 215.6mm, a jego długość wynosi 350.9mm. Teraz, kiedy ustawić rozmiar mojego PDF za pomocą funkcji getTemplateSize i useTemplate takich jak:

$size = $pdf->getTemplateSize($tplIdx); 
$pdf ->useTemplate($tplIdx, null, null, $size['w'], $size['h'],FALSE); 

lub po prostu:

$pdf ->useTemplate($tplIdx, null, null, 215.6, 350.9,FALSE); 

wynik jest mój nowy plik PDF jest Przycięte na dole i nie wiem dlaczego.

Po tej obserwacji wykonałem kilka testów, aby znaleźć przyczynę. Rezultatem jest limit długości w generowaniu pliku PDF za pomocą FPDI. Jak widać w powyższym kodzie, nie użyłem rzeczywistej długości mojego pliku. Zamiast używać 350,9 mm, który można wyprowadzić z $size[h'], nie użyłem go, ponieważ dostarczy on przycięty plik. Właśnie przekazałem wartość liczbową w pobliżu i rzeczywistą szerokość, aby uzyskać pożądany wynik.

$pdf->useTemplate($tplIdx, null, null, $size['w'], 310, false); 

Nawiasem mówiąc, 310 mm (długość) jest największą wartością liczbową Użyłem produkować nowy plik PDF, który jest NIE Przycięte.

Mam nadzieję, że dałem trochę danych wejściowych dla wszystkich programistów używających FPDI, które napotyka problem CROPPED PDF.

Dzięki wszystkim ...

Levi Palmer

+0

Powód przycinania stron polega na tym, że żaden wpis w tablicy FPDI/FPDF 'PageSizes' nie jest tworzony, dopóki nie zmieni się orientacja strony ani jej rozmiar (patrz [kod źródłowy] (https://github.com/hanneskod/ fpdi/blob/c4fa110b8a8a6940616ec1a1ef323eafd8601664/src/FPDI.php # L137)). Ponieważ tablica '$ size' zawiera wartości zmiennoprzecinkowe, po prostu ręcznie przekazuje liczbę całkowitą dla szerokości lub wysokości do' useTemplate() ', ponieważ różnica między zmienną a int jest rozpoznawana jako zmieniony rozmiar strony, a zatem wpis jest dodawany do 'PageSizes'. – Mennny

8

Zamiast

$pdf->useTemplate($templateIndex,0,0); 

użycie

$this->useTemplate($templateIndex, null, null, 0, 0, true); 

Ostatni argument $adjustPageSize jest ustawiony na 'false' domyślnie.

+1

Dzięki za to! Miałem ten sam problem. gdzie masz wartości zerowe, miałem 0. zastąpienie ich wartościami zerowymi spowodowało triumf! – Chemdream

Powiązane problemy