在php中导入并签署pdf

时间:2014-11-24 15:47:20

标签: php pdf import

我有一个pdf,我想使用证书,用PHP脚本签名。 我分两步分解行动:

  • 在脚本中导入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中遇到一些错误,只需更改相关功能的原型。

1 个答案:

答案 0 :(得分:1)

您实际上只定义了源文件,但您没有导入任何页面。试试这个:

$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组件(不是免费的!)。