包含带有ReportLab的PDF格式的可编辑文本

时间:2018-06-11 19:45:27

标签: python pdf-generation reportlab

通过ReportLab文档,我还没有找到如何在生成的PDF中包含可编辑文本。这是当前的功能。关于如何使表单文本可编辑的任何建议将不胜感激:

def generate_form_text(form_text, canvas, font):
    """
    Add the FORM_TEXT section to the PDF. FORM_TEXT is the section in the top left of the PDF header

:param form_text: text to add to the section (this will be autowrapped)
:param canvas: PDF canvas to draw on
:param font: string font-family name to use to draw the text

:return:
"""
FORM_TEXT_FONT_SIZE = 10
FORM_TEXT_LINE_START = 30
FORM_TEXT_LINE_HEIGHT = 15
FORM_TEXT_MAX_WIDTH = 260
FORM_TEXT_Y_START = 685
SPACE_WIDTH = canvas.stringWidth("test ", font, FORM_TEXT_FONT_SIZE) - 
canvas.stringWidth("test", font, FORM_TEXT_FONT_SIZE)
# Initialize FORM_TEXT PDF drawer to the right location
canvas.setFont(font, FORM_TEXT_FONT_SIZE)
y_position = FORM_TEXT_Y_START  

# pre-split lines
words = [line.split(' ') for line in form_text.splitlines()]

for line in words:
    buffer = ""
    current_line_width = 0

    # wrap text if needed
    for word in line:
        word_width = canvas.stringWidth(word, font, FORM_TEXT_FONT_SIZE)
        line_width = (current_line_width + word_width)
        line_is_too_long = line_width >= FORM_TEXT_MAX_WIDTH

        if line_is_too_long:
            canvas.drawString(FORM_TEXT_LINE_START, y_position, buffer)
            y_position -= FORM_TEXT_LINE_HEIGHT
            buffer = ""
            current_line_width = 0

        buffer += word + " "
        current_line_width += word_width + SPACE_WIDTH

    canvas.drawString(FORM_TEXT_LINE_START, y_position, buffer)
    y_position -= FORM_TEXT_LINE_HEIGHT

更新:除了常量之外注释掉代码并根据文档尝试这个但是获得空白空间:

canvas.acroForm.textfield(value=form_text, maxlen=None, 
    x=FORM_TEXT_LINE_START, y=FORM_TEXT_Y_START, 
    width=FORM_TEXT_MAX_WIDTH, 
    height=FORM_TEXT_LINE_HEIGHT,fontSize=FORM_TEXT_FONT_SIZE, 
    fillColor=green,textColor=black)

注意我已从reportlab导入params中使用的颜色。

0 个答案:

没有答案
相关问题