Существует ли python ReportLab, эквивалентный функции аннотирования в TCPDF?

Я пытаюсь использовать библиотеку reportlab, чтобы написать «аннотацию» в формате PDF. Я успешно записал новые данные в PDF-файл с использованием reportlab, но не могу найти никакой информации о том, как создать аннотацию.

Когда я говорю аннотацию, я имею в виду функцию аннотирования в TCPDF. Это создает интерактивный и подвижный текстовый объект в формате PDF.

https://tcpdf.org/examples/example_036/

Должен быть способ сделать это в python, но до сих пор я не смог найти никакой информации.

Я посмотрел этот пост и соответствующие ссылки, размещенные в принятом ответе.

Добавить текст в существующий документ PDF в Python

Я видел этот инструмент для использования php в python, но я не могу заставить его работать правильно, и он, похоже, не имеет никакой поддержки.

https://github.com/dnet/ppcg/blob/master/tcpdf_example.py

Когда я запускаю пример, я получаю нечитаемый файл PDF с текстом, показанным ниже:

<?
include('tcpdf/config/lang/eng.php');
include('tcpdf/tcpdf.php');
$v0 = new TCPDF('PDF_PAGE_ORIENTATION', 'PDF_UNIT', 'PDF_PAGE_FORMAT', 'true', 'UTF-8', 'false');
$v0->setFontSubsetting(False);
$v0->setAuthor('VSzA');
$v0->setCreator('PPCG');
$v0->setTitle('TCPDF in Python!?');
$v0->setPrintHeader(False);
$v0->setMargins(10, 10);
$v0->AddPage();
$v0->SetFont('dejavusans', 'B', 12);
$v0->Cell(0, 0, 'Hello Python');
$v0->Ln();
$v2 = $v0->GetX();
$v1 = $v0->GetY();
$v0->setXY(30, 30);
$v0->Cell(0, 0, 'GOTOs are bad');
$v3 = $v1 + 2.5;
$v0->setXY($v2, $v3);
$v0->Cell(0, 0, 'I can has PHP variables');
$v0->Output();
?>

Это похоже на правильный код php для создания pdf с использованием TCPDF, но код сохраняется в файл pdf, а не запускается.

На данный момент я пришел к выводу, что нужно просто отправить все мои данные из скрипта Python на http-сервер с помощью php и создать мой pdf на сервере с помощью TCPDF, а затем отправить новый pdf обратно в мой скрипт на python подайте его конечному пользователю. Это звучит неэффективно, поэтому я бы предпочел не делать это таким образом.

Любая помощь будет оценена!
-Джейк

2

Решение

Есть хорошие и плохие новости об аннотации в , хорошая новость в том, что можно аннотировать в . Плохие новости — это боль в заднице, так как она не документирована должным образом и ограничивает ваши возможности.

Функция, которая вам понадобится canavas.textAnnotation который используется следующим образом:

canvas.textAnnotation("Your content", Rect=[x_begin, y_begin, x_end, y_end], relative=1)

Это поместит аннотацию в (x_begin, y_begin) относительно текущего холста, или если вы выключите relative относительно нижнего левого угла.

Вы можете заметить, что аннотации Reportlab выглядят не так, как генерирует Adobe, это связано с SubType аннотации, которая в Reportlab фиксируется на Text в то время как Adobe использует что-то еще (см. 8.4.5 PDF ссылка).

Это можно изменить, перегрузив Canvas объект и Annotation объект но для этого просто нужно поменять иконку. Так что я бы не рекомендовал это.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]