У меня есть pdf, который я хочу подписать, используя сертификат, с php-скриптом. Я разлагаю действие в 2 этапа:
Я могу решить первую часть... Я использую 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.
Благодарю.
С уважением.
EDIT 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, просто измените прототип соответствующих функций.
Фактически вы определяете только файл 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. Полученный документ имеет полную новую внутреннюю структуру, и вы также можете потерять контент, как описано здесь.
Если вам нужно подписать исходный документ, вы можете проверить компонент SetaPDF-Signer (не бесплатно!).
$pageNo<=$pageCount