是否有一个python ReportLab与TCPDF's 'annotate'函数


Is there a python ReportLab equivalent of TCPDF's 'annotate' function?

我试图使用reportlab库在pdf上写一个'注释'。我已经使用reportlab成功地将新数据写入pdf,但是我找不到关于如何创建注释的任何信息。

当我说注释时,我指的是TCPDF的注释函数。这会在pdf中创建一个可点击和可移动的文本对象。

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

必须有一种方法在python中做到这一点,但到目前为止我还没有找到任何信息。

我看了这篇文章和相关的链接张贴在接受的答案。

在Python中向现有PDF文档添加文本

我已经看到这个工具在python中使用php,但我不能让它正确工作,它似乎没有任何支持。

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();
?>

这看起来像是使用TCPDF创建pdf的正确php代码,但是代码被保存到pdf文件中,而不是运行。

到目前为止,我得出的结论是,只需使用php将所有数据从python脚本发送到http服务器,并使用TCPDF在服务器上创建pdf,然后将新的pdf发送回我的python脚本以将其提供给最终用户。这听起来效率很低,所以我不想这样做。

任何帮助将不胜感激!杰克

关于在reportlab中注释有一个好消息和一个坏消息,好消息是可以在reportlab中注释。坏消息是,它是一个痛苦的屁股,因为它没有适当的文档,它限制了你的选择相当困难。

您将需要的功能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使用其他东西(参见PDF参考文件的8.4.5)。

这可以通过重载Canvas对象和Annotation对象来改变,但是这样做对于仅仅改变一个图标来说是大量的工作。所以我不推荐它