首页 > 解决方案 > 如何在 PHP 中检测 PDF 中的图层

问题描述

我正在尝试检测图层并将它们从 PDF 文档中提取出来。好吧,我找不到任何关于检测它们的主题,只有如何创建一个。这对我来说似乎是可能的。尝试使用 SetaPDF 和 FPDF,但无法提取图层。有任何想法吗?

提前致谢。

托马斯

标签: phppdf

解决方案


要访问 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();

推荐阅读