FPDI a kompresja pliku PDF

Biblioteka FPDI często przydaje się podczas generowania plików PDF z poziomu PHP przy użyciu TCPDF lub starszego FPDF. Umożliwia edycję dokumentów, gdyż dzięki niej możemy zaimportować gotowy plik PDF i wstawić go w obecnie tworzony jako tło. Niekiedy próba wczytania może spowodować błąd, problem ten można jednak prosto rozwiązać.

Importu istniejącego pliku PDF do tworzonego dokumentu i wstawienie do niego dodatkowego tekstu można dokonać w następujący sposób:

<?php
require_once("inc/tcpdf/tcpdf.php");
require_once("inc/fpdi/fpdi.php");

$pdf = new FPDI();

$pdf->AddPage();
$pdf->setSourceFile('document.pdf');
$tplIdx = $pdf->importPage(1);
$pdf->useTemplate($tplIdx); 

$pdf->SetXY(50,50);
$pdf->Write(0, "New text");

$pdf->Output('document.pdf', 'I'); 
?>

Niestety, w przypadku niektórych plików możemy napotkać na następujący błąd:

TCPDF ERROR: This document (document.pdf) probably uses a compression technique 
which is not supported by the free parser shipped with FPDI.

W przypadku starszej wersji FPDI może on brzmieć następująco:

TCPDF ERROR: Unable to find xref table - Maybe a Problem with 'auto_detect_line_endings'

Jak mówi komunikat, problem dotyczy kompresji dokumnetu PDF. Możemy jednak uniknąć poszukiwania komercyjnych rozwiązań, które umożliwią wczytanie takiego pliku. Wystarczy po prostu zmienić kompresję pliku na bardziej przystępną dla biblioteki. Możemy się w tym celu posłużyć bardzo przydatnym programem pdftk.

Jest to bardzo mały, dostępny z linii komend program, który umożliwia dokonywania najróżniejszych manipulacji na plikach PDF. Można go użyć pod różnym systemami operacyjnymi i jest rozpowszechniany na licencji GPL.

W tym przypadku skorzystamy z możliwości dekompresji, a następnie ponownej kompresji. Możemy tego dokonać następującymi komendami:

pdftk document.pdf output document2.pdf uncompress
pdftk document2.pdf output document3.pdf compress

Ostatni z wygenerowanych dokumentów powinien mieć zadowalającą wielkość, a import przez FPDI nie powinien stanowić już problemu.

Dodaj komentarz