2014-11-24 111 views
0

我有一個pdf,我想用php腳本使用證書籤名。 我分解在兩個步驟的操作:導入並在php中籤名pdf

  • 導入PDF格式腳本
  • 簽名與證書

我能解決的第一部分...我使用TCPDI( https://github.com/pauln/tcpdi)和TCPDF。

這裏是我的腳本:

<?php require_once('tcpdf/config/tcpdf_config.php'); 
require_once('tcpdf/tcpdf.php'); 
require_once('tcpdi.php'); 
$pdf = new TCPDI(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); 

$pdf->AddPage(); 
$pdf->setSourceFile('file.pdf'); 

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

我沒有任何錯誤,但輸出是空白,與頭有點黑線。

你知道有什麼問題嗎? 我也嘗試過使用FPDF/FPDI。

謝謝。

問候。

編輯25/11/2014: 這裏是我的解決方案,使用TCPDF:

$pdf = new TCPDI(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); 

$pdfdata = file_get_contents('/Users/ynp/Downloads/billofsale.pdf'); 
$pagecount = $pdf->setSourceData($pdfdata); 
for ($i = 1; $i <= $pagecount; $i++) { 
    $tplidx = $pdf->importPage($i); 
    $pdf->AddPage(); 
    $pdf->useTemplate($tplidx); 
} 

$pdf->Output(); 

你可能有一些誤差fpdf_tpl.php,只是改變的關於函數的原型。

回答

0

您實際上只定義了soure文件,但您不會導入它的任何頁面。試試這個:

$pageCount = $pdf->setSourceFile('file.pdf'); 
for ($pageNo = 1; $pageNo <= $pageCount; $pageNo++) { 
    $tplIdx = $pdf->importPage($pageNo); 
    $pdf->AddPage(); 
    $pdf->useTemplate($tplIdx, null, null, 0, 0, true); 
} 

這樣你可以將所有現有的頁面導入到一個可以在FPDI中重用的結構。由此產生的文件有一個全新的內部結構,你也可能會丟失內容here

如果您需要簽署原始文檔,您可以查看SetaPDF-Signer組件(不是免費的!)。

+0

事實上,這是工作。但我想使用lib TCPDF,特別是因爲sign函數是免費的...... PS:在你的代碼中有一個錯誤,它是'$ pageNo <= $ pageCount' – IronRabbit 2014-11-25 09:05:33