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")
问问题
578 次
1 回答
1
我将 fpdf 用于 php 并且有同样的需求。但正如 Olivier 在评论中提到的那样,这是不可能的。所以我写了一个快速的解决方法,我在下面写了一个粗略的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")
于 2020-03-18T13:45:47.850 回答