Как сделать встроенный жирный текст с помощью PyFPDF? - PullRequest
0 голосов
/ 18 марта 2020
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")

1 Ответ

0 голосов
/ 18 марта 2020

Я использую 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")
...