<p>使用insertTextbox()方法时,必须确保创建的rect可以包含文本,因为如果不包含文本,则最终将不会显示任何文本。
一种方法是为实现检查文本的长度,如下所示:</p>
<pre><code>text = "absolutely not"
text_lenght = fitz.getTextlength(text, fontname="Times-Roman", fontsize=48))
</code></pre>
<p>文本长度为270.67</p>
<p>但是矩形的宽度只有150(200-50)。此外,即使更改矩形的宽度也不起作用,因为它仍然太短,所以还需要增加它的高度。你可以做的另一件事就是改变你正在使用的字体大小。
这两个备选方案如下所示:</p>
<ul>
<li>备选方案1,大矩形:</li>
</ul>
<pre><code>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)
</code></pre>
<p>备选方案2,较小的字体尺寸:</p>
<pre><code>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)
</code></pre>
<p>注意:<em>rc</em>是未使用的矩形高度,也可以是负数,在您的例子中为-5.59,这意味着文本超过了rect的高度</p>