2016-08-09 7 views
2

Я пытаюсь использовать библиотеку reportlab для написания «аннотации» в pdf. Я успешно написал новые данные в pdf с помощью reportlab, но я не могу найти никакой информации о том, как создать аннотацию.Есть ли эквивалент ReportLab для python, называемый функцией «аннотировать» TCPDF?

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

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

Там должен быть способ сделать это в Python, но до сих пор я не смог найти какую-либо информацию.

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

Add text to existing PDF document in 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, чтобы обслуживать его для конечного пользователя. Это звучит неэффективно, поэтому я бы предпочел не делать этого таким образом.

Любая помощь будет оценена! -Jake

ответ

1

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

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

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

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

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

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

+0

Это действительно полезно, поскольку для аннотации я ищу, чтобы она отображала число вместо этого объекта заметки с записью. Я не могу опубликовать фотографии, но представьте себе простой квадрат с номером внутри него, который все еще движется. Это возможно? В TCPDF было довольно просто –

+0

Это должно быть возможно, так как это в основном «canavas».freeTextAnnotation', который находится в исходном коде, но я не могу заставить его работать прямо сейчас. :((примечание: DA = строка внешнего вида) – B8vrede

+0

Я тоже не мог заставить ее работать. Я также попытался добавить свои собственные словарные поля в функцию freeTextAnnotation и не получил никакого результата. Я смог просто изменить подтип textannotation на «/ FreeText», и теперь это работает для меня. Теперь мой следующий вопрос: как вы отформатируете цвет, если не можете изменить строку «DA»? Нормальные setfillcolor и setstrokecolor не работают для аннотаций. –

 Смежные вопросы

  • Нет связанных вопросов^_^