2014-11-24 81 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