php - 如何在 PHP 中检测 PDF 中的图层
问题描述
我正在尝试检测图层并将它们从 PDF 文档中提取出来。好吧,我找不到任何关于检测它们的主题,只有如何创建一个。这对我来说似乎是可能的。尝试使用 SetaPDF 和 FPDF,但无法提取图层。有任何想法吗?
提前致谢。
托马斯
解决方案
要访问 PDF 文档的图层,您可以使用SetaPDF-Core组件(我们的产品,不是免费的!)。对通常显示在 GUI 界面中的所有层的简单迭代如下所示:
require_once 'SetaPDF/Autoload.php';
$document = SetaPDF_Core_Document::loadByFilename('paht/to/the.pdf');
$oc = $document->getCatalog()->getOptionalContent();
$iterator = $oc->getIterator();
foreach ($iterator AS $entry) {
echo $iterator->getDepth() . ' ';
echo str_repeat(' ', $iterator->getDepth() * 4);
if ($entry instanceof SetaPDF_Core_Document_OptionalContent_Group) {
echo 'Layer: ' . $entry->getName();
} elseif ($entry instanceof SetaPDF_Core_Type_StringValue) {
echo '<i>Label: ' . SetaPDF_Core_Encoding::convertPdfString($entry->getValue()) . '</i>';
}
echo '<br />';
}
无论如何,实际上不可能例如隔离特定层的内容并创建它的新文档。
可以通过以下方法访问状态usage()
:
$viewsState = $entry->usage()->getViewState();
推荐阅读
- algorithm - 在有向循环图中找到最长的路径
- javascript - Javascript 音频 currentTime 在非 Chrome 浏览器上不起作用
- node.js - 使用其他字段填充文档
- html - Safari 的 CSS 网格(网格模板列)修复?
- python - 游戏重启 PyQT4 Python
- android - 在android(kotlin)中向下滚动ListView时发生错误
- android - 如何使用改造从缓存图像发出 MultipartBbody.Part 请求
- python-3.x - 向实例添加属性
- java - 从超级对象列表中向下转换
- javascript - Javascript 事件监听器返回 null