第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 PyMuPDF 將文本添加到 pdf

使用 PyMuPDF 將文本添加到 pdf

幕布斯7119047 2023-04-25 17:28:56
我正在嘗試通過打開 PDF、添加文本框并保存來將文本添加到 pdf。當(dāng)我運行代碼時,沒有任何反應(yīng)。在桌面上,它顯示文件已更新,但上面沒有顯示文本。這是代碼:import fitz doc = fitz.open("/Users/khaylablack/Desktop/participant_certificate.pdf")           page = doc[0]                         # choose some pagerect = fitz.Rect(50, 100, 200, 200)   # rectangle (left, top, right, bottom) in pixelstext = "absolutely not"rc = page.insertTextbox(rect, text, fontsize = 48, # choose fontsize (float)                   fontname = "Times-Roman",       # a PDF standard font                   fontfile = None,                # could be a file on your system                   align = 1)                      # 0 = left, 1 = center, 2 = right#doc.saveIncr()   # update file. Save to new instead by doc.save("new.pdf",...)doc.save("/Users/khaylablack/Desktop/watermarked_participant_cert.pdf")
查看完整描述

2 回答

?
HUX布斯

TA貢獻1876條經(jīng)驗 獲得超6個贊

當(dāng)使用 insertTextbox() 方法時,您必須確保您創(chuàng)建的矩形可以包含文本,因為否則,您最終將不會顯示任何文本。一種方法是為您的實現(xiàn)檢查文本的長度,如下所示:


text = "absolutely not"

text_lenght = fitz.getTextlength(text, fontname="Times-Roman", fontsize=48))

text_lenght 將為 270.67。


但是您擁有的矩形寬度僅為 150(200-50)。此外,即使更改矩形的寬度也不起作用,因為它仍然太短,因此您還需要增加它的高度。您可以做的另一件事就是更改您正在使用的字體大小。這兩個備選方案將如下所示:


備選方案 1,更大的矩形:

fontsize_to_use = 48


text = "absolutely not"

fontname_to_use = "Times-Roman"


text_lenght = fitz.getTextlength(text, 

                                 fontname=fontname_to_use, 

                                 fontsize=fontsize_to_use)


rect_x1 = 50

rect_y1 = 100

rect_x2 = rect_x1 + text_lenght + 2  # needs margin

rect_y2 = rect_y1 + fontsize_to_use + 2  # needs margin



rect = (rect_x1, rect_y1, rect_x2, rect_y2)


## Uncomment if you wish to display rect

# page.drawRect(rect,color=(.25,1,0.25)) 


rc = page.insertTextbox(rect, text,

                        fontsize=fontsize_to_use,

                        fontname=fontname_to_use,

                        align=1)

備選方案 2,較小的字體:


text = "absolutely not"

fontname_to_use = "Times-Roman"


rect_x1 = 50

rect_y1 = 100

rect_x2 = 200

rect_y2 = 200


rect_width = rect_x2 - rect_x1

rect_height = rect_y2 - rect_y1


rect = (rect_x1, rect_y1, rect_x2, rect_y2)


fontsize_to_use = rect_width/len(text)*2  # *2 just because 1pt is too small for a char. It mantains a good ratio for rect's width with larger text, but behaviour is not assured.


## Uncomment if you wish to display rect

# page.drawRect(rect,color=(.25,1,0.25))


rc = page.insertTextbox(rect, text,

                        fontsize=fontsize_to_use,

                        fontname=fontname_to_use,

                        align=1)

注意:rc是未使用的矩形高度,它也可以是負數(shù),在你的例子中它是-5.59,這意味著文本超過了矩形的高度。


查看完整回答
反對 回復(fù) 2023-04-25
?
牧羊人nacy

TA貢獻1862條經(jīng)驗 獲得超7個贊

我遇到了同樣的問題,我能夠通過添加調(diào)用來解決它

page.clean_contents(False)

頁面加載后。

來自 pyMuPDF官方文檔:

Page.clean_contents(sanitize=True)

  • 在 v1.17.6 中更改

僅限 PDF:清除并連接contents與此頁面關(guān)聯(lián)的所有對象?!扒謇怼卑▋?nèi)容流的語法更正、標(biāo)準(zhǔn)化和“漂亮打印”。如果 sanitize 為真,對象contents和對象之間的差異也將得到糾正。

在 1.16.0 版更改:此方法不再隱式清除注釋。單獨使用Annot.clean_contents()。

參數(shù): sanitize (bool) –(v1.17.6 中的新功能)如果為真,則資源與其在內(nèi)容對象中的實際使用之間的同步是同步的。例如,如果一種字體實際上沒有用于頁面的任何文本,那么它將從 /Resources/Font 對象中刪除。

警告:

這是一個復(fù)雜的功能,可能會生成大量新數(shù)據(jù)并使舊數(shù)據(jù)無法使用。不建議將它與增量保存選項一起使用。另請注意,生成的單例新/Contents對象是未壓縮的。所以你應(yīng)該使用選項“deflate=True, garbage=3”保存到一個新文件。


查看完整回答
反對 回復(fù) 2023-04-25
  • 2 回答
  • 0 關(guān)注
  • 763 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號