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

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

Создать диалоговое окно ссылки

Этот PDF-файл был создан с тремя такими ссылками. Вам придется скачать, так как средство просмотра 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="[email protected]"><b>test 2</b></a></text>
</page>
</pdf2xml>

person chrisan    schedule 15.04.2019    source источник
comment
Вы ищете бесплатное решение или платные тоже приветствуются?   -  person Jan Slabon    schedule 16.04.2019
comment
@JanSlabon с открытым исходным кодом был бы идеальным. Но если нет альтернативы, я бы посмотрел на платные, если они могут работать на Linux на основе Debian через командную строку.   -  person chrisan    schedule 16.04.2019


Ответы (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-документ аннотации ссылки.

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

person Jan Slabon    schedule 17.04.2019