我使用 FPDI 和 TCPDF 库通过绘制透明矩形来编辑现有的 pdf 文件。
$pdf = new FPDI();
$pagecount = $pdf->setSourceFile('my.pdf');
$unserialized = unserialize($questionaire['cordinates']);
for ($page_counter = 1; $page_counter <= $pagecount; $page_counter++) {
$tplidx = $pdf->ImportPage($page_counter);
$s = $pdf->getTemplatesize($tplidx);
$pdf->AddPage($s['h'] > $s['w'] ? 'P' : 'L', array($s['w'], $s['h']));
$pdf->useTemplate($tplidx, 0, 0, 0, 0, true);
for ($i = 0; $i < sizeof($unserialized); $i++) {
$selection = (object)$unserialized[$i];
if ($page_counter == $selection->current_frame) {
switch ($selection->type) {
case "Rect":
$pdf->SetAlpha(0.3);
$color = int2rgb($selection->select_color);
$pdf->Rect(($selection->left), ($selection->top), ($selection->width), ($selection->height), 'F', NULL, $color);
break;
case "Comment":
break;
}
}
}
}
问题是:
矩形覆盖文本,因此在读取输出 pdf 文件时无法选择它。TCPDF 中有层方法,但我只能用它对元素进行分组并管理它们的可见性。
一些 pdf 文件还包含文本元素,其他包含图像 - 页面快照。
问题:
是否可以将导入页面的流设置为顶层并绘制矩形作为下层,或作为背景?
如何识别导入的 pdf 包含文本元素或图像?