2 回答

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,這意味著文本超過了矩形的高度。

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”保存到一個新文件。
添加回答
舉報