Как определить координаты прямоугольника веб-ссылки в формате PDF?

#php #python #bash #pdf #poppler

#php #python #bash #PDF #poppler

Вопрос:

При создании PDF в Acrobat пользователь может создать «Ссылки на веб-страницы или документы», которые выводят это приглашение

Диалог создания ссылки

Этот PDF был создан с 3 такими ссылками. Вам придется загрузить, поскольку средство просмотра Github не отображает прямоугольники.

Есть ли инструмент / библиотека, которая может считывать и извлекать x, y WxH этих прямоугольников и ссылки, которые они содержат?

Командная строка Linux, python, php?

Я пробовал poppler pdftohtml -xml test3.pdf , однако он получает только 2 прямоугольника ссылок

 ?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pdf2xml SYSTEM "pdf2xml.dtd">

<pdf2xml producer="poppler" version="0.49.0">
<page number="1" position="absolute" top="0" left="0" height="1294" width="646">
    <fontspec id="0" size="30" family="Times" color="#000000"/>
<image top="0" left="0" width="647" height="1295" src="test3-1_1.jpg"/>
<text top="163" left="89" width="105" height="47" font="0"><a href="http://www.google.com"><b>test 1 </b></a></text>
<text top="425" left="155" width="97" height="46" font="0"><a href="larry@google.com"><b>test 2</b></a></text>
</page>
</pdf2xml>
  

Комментарии:

1. Вы ищете бесплатное решение или платные тоже приветствуются?

2. @JanSlabon открытый исходный код был бы идеальным. Но если альтернативы нет, я бы посмотрел на платные, если они могут работать в linux на базе debian через командную строку

Ответ №1:

Мы предлагаем коммерческий инструмент на PHP, который позволит вам получить доступ к аннотациям ссылок. Это возможно с помощью компонента SetaPDF-Core:

 <?php
// load and register the autoload function
require_once('library/SetaPDF/Autoload.php');

// create a document instance
$document = SetaPDF_Core_Document::loadByFilename('document-with-links.pdf');

// Get the pages helper
$pages = $document->getCatalog()->getPages();

for ($pageNo = 1, $pageCount = $pages->count(); $pageNo <= $pageCount; $pageNo  ) {
    $page = $pages->getPage($pageNo);
    $annotationsHelper = $page->getAnnotations();
    $linkAnnotations = $annotationsHelper->getAll(SetaPDF_Core_Document_Page_Annotation::TYPE_LINK);
    foreach ($linkAnnotations AS $linkAnnotation) {
        // $linkAnnotation is an instance of SetaPDF_Core_Document_Page_Annotation_Link
        $rect = $linkAnnotation->getRect();
        $llx = $rect->getLlx();
        $lly = $rect->getLly();
        $width = $rect->getWidht();
        $height = $rect->getHeight();
        // ...
    }
}
  

Смотрите Здесь документ API аннотации ссылки.

Этот простой демонстрационный скрипт не заботится о повернутых страницах. Возвращаемые значения — это значения, определенные в самой аннотации.