2016-08-09 37 views
2

我正在尝试使用reportlab库在pdf上编写'注释'。我已经成功使用reportlab将新数据写入pdf,但是我找不到有关如何创建注释的任何信息。是否有TCPDF的'annotate'函数的python ReportLab等价物?

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

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

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

我看过这篇文章以及在接受的答案中发布的相关链接。

Add text to existing PDF document in Python

我已经看到了这个工具,在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(); 
?> 

这个貌似正确的PHP代码使用TCPDF来创建一个PDF格式,但代码正在保存到PDF文件,而不是跑。

我现在得出的结论是,只需将所有数据从python脚本发送到使用php的http服务器,然后使用TCPDF在服务器上创建我的pdf,然后将新的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的注释看那些土坯产生不同的,这与它在ReportLab的被固定到Text注释的SubType做,当Adobe使用别的东西(见PDF reference的8.4.5)。

这可以通过重载Canvas objectAnnotation object来改变,但这样做只是改变图标很多工作。所以我不会推荐它。

+0

这真的很有帮助,因为我希望它的注释显示一个数字,而不是那个注释粘滞便笺对象。我不能张贴图片,但想象一个简单的正方形,里面有一个数字,它仍然是可移动的。这可能吗?在TCPDF中它非常简单 –

+0

它应该是可能的,因为它基本上就是canavas。freeTextAnnotation'函数是在源代码中,但我无法让它立即工作。 :(注意:DA =默认外观字符串) – B8vrede

+0

我也无法使它工作,我也尝试将自己的字典字段添加到freeTextAnnotation函数中,但没有得到任何结果,我只能将textannotation的子类型更改为“/ FreeText”,现在它适用于我,现在我的下一个问题是如何改变'DA'字符串的颜色格式?正常的setfillcolor和setstrokecolor不适用于注释 –

相关问题