2016-08-09 82 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不適用於註釋 –

相關問題