如何使用PyFPDF制作内联粗体文本


from fpdf import FPDF
pdf1 = FPDF
pdf1.multi_cell(0, 5, 'This is my disclaimer. THESE WORDS NEED TO BE BOLD. These words do not need to be bold.', 0, 0, 'L')
pdf1.output("sample.pdf")

我将fpdf用于php,并且有同样的需求。但正如奥利维尔在评论中提到的那样,这是不可能的。所以我写了一个快速的解决方法,我在下面写了一份粗略的python实现。可能不是最漂亮的解决方案,但它可能对你有用。

from fpdf import FPDF
class FPDF_bold_multicell(FPDF):
def write_multicell_with_styles(self,max_width, cell_height, text_list):
startx = self.get_x()
self.set_font('Arial', '', 16)
#loop through differenct sections in different styles
for text_part in text_list:
#check and set style
try:
current_style = text_part['style']
self.set_font('Arial', current_style, 16)
except KeyError:
self.set_font('Arial', '', 16)
#loop through words and write them down
space_width = self.get_string_width(' ')
for word in text_part['text'].split(' '):
current_pos = self.get_x()
word_width = self.get_string_width(word)
#check for newline
if (current_pos + word_width) > (startx + max_width):
#return 
self.set_y(self.get_y() + cell_height)
self.set_x(startx)
pdf1.cell(word_width, 5, word)
#add a space
self.set_x(self.get_x() + space_width)

pdf1 = FPDF_bold_multicell()
pdf1.add_page()
text_list = [{'text':'This is my disclaimer.'},
{'style':'B','text':'THESE WORDS NEED TO BE BOLD.'},
{'text':'These words do not need to be bold.'},]
pdf1.write_multicell_with_styles(50, 5, text_list)
pdf1.output("sample.pdf")

我尝试过这个解决方案,它非常有用。我在注释#检查换行符后添加了一个新命令。

#check for newline
if max_width == 0:
max_width = self.w - self.r_margin - self.x

因此,此命令将验证宽度,如果为0,则将使用所有行。

from fpdf import FPDF
class FPDF_bold_multicell(FPDF):
def write_multicell_with_styles(self,max_width, cell_height, text_list):
startx = self.get_x()
self.set_font('Arial', '', 16)
#loop through differenct sections in different styles
for text_part in text_list:
#check and set style
try:
current_style = text_part['style']
self.set_font('Arial', current_style, 16)
except KeyError:
self.set_font('Arial', '', 16)
#loop through words and write them down
space_width = self.get_string_width(' ')
for word in text_part['text'].split(' '):
current_pos = self.get_x()
word_width = self.get_string_width(word)
#check for newline
if max_width == 0:
max_width = self.w - self.r_margin - self.x
if (current_pos + word_width) > (startx + max_width):
#return 
self.set_y(self.get_y() + cell_height)
self.set_x(startx)
pdf1.cell(word_width, 5, word)
#add a space
self.set_x(self.get_x() + space_width)

pdf1 = FPDF_bold_multicell()
pdf1.add_page()
text_list = [{'text':'This is my disclaimer.'},
{'style':'B','text':'THESE WORDS NEED TO BE BOLD.'},
{'text':'These words do not need to be bold.'},]
pdf1.write_multicell_with_styles(0, 5, text_list)
pdf1.output("sample.pdf")

我有一段文本,其中插入了字典中的一些数据,现在从字典中插入的数据需要加粗,我确实成功地实现了加粗,但我的问题是每个单词都在一行。

my_dict = {'name':'exo'}
page_text = """ 
This is permanent text +f'{my_dict["name"] }'""" 
for j in range(len(page_text.split())):
if my_dict["name"] == page_text[j]:
pdf.set_font('Arial','BU',12)
else:
pdf.set_font('Arial','',12)
pdf.cell(0,5,page_text[j])

输出:

This
Is
Permanent
Text
Exo #this is bold as I need

相关内容

  • 没有找到相关文章

最新更新