У меня есть 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.
Благодарю.
С уважением.
РЕДАКТИРОВАТЬ 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-Сигнер компонент (не бесплатно!).
Других решений пока нет …