2013-04-01 66 views
1

我正在處理大量的頁面(字母),除了地址和其他一些小細節外,其餘都是相同的。我相信最讓PDF創建減慢的是我在每個頁面上都包含的徽標圖像(儘管它相當小)。我可以預先加載用於TCPDF的圖像嗎?

我希望能夠通過緩存徽標來加速該過程,即通過加載文件一次並將其存儲在變量中,並讓TCPDF使用該文件而不是每次加載圖像。 TCPDF可以加載一個「PHP圖像數據流」,並且給出的例子是這樣的:

$imgdata = base64_decode('iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABlBMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2/0vXZDrEX4IJTRkb7lobNUStXsB0jIXIAMSsQnWlsV+wULF4Avk9fLq2r8a5HSE35Q3eO2XP1A1wQkZSgETvDtKdQAAAABJRU5ErkJggg=='); 
$pdf->Image('@'.$imgdata); 

但是,我不知道如何從一個文件中創建一個這樣的圖像流。

我的標誌是一個小的(4kB)PNG文件。如果我使用readfile($file)並將其發送到$pdf->Image,並且前面帶有'@',則會出錯 - 關於已經設置爲chmod 777的緩存文件夾(它是一個測試服務器 - 我將在實時服務器上處理適當的權限)。我相信我也試過base64_encode,這也沒有工作。

有關如何做到這一點的任何想法? PS:我已經注意到,包含在PDF中的頁面越多,它越慢,所以我會找到一個好的中間(可能每個文件200-250頁,而不是當前的500頁)。

謝謝!

回答

2

在sourceforge的TCPDF論壇上發佈了同樣的問題(sourceforge forum post),TCPDF的作者回答。

他說圖像在內部被緩存,但是如果圖像需要處理,他建議使用XObject()模板系統(請參閱TCPDF站點上的example 62)。

我花了一段時間才搞定它(仍然不知道爲什麼它起初不適用於我),但一旦我看起來完全像我的原始版本使用Image(),我跑了幾個測試3,000個條目分成每個500頁的PDF文件。

XObject()Image()之間沒有任何速度增益,而XObject()實際上似乎使得生成的文件略大一點(1.2MB文件中的2.5kB)。雖然這並不直接回答我的原始問題(如何使用Image('@'.$image)創建可直接在TCPDF中使用的PHP數據流),但它告訴我我真的需要知道 - 圖像已被緩存,並且使用XObject()緩存不會爲我的情況提供任何優勢。

相關問題