如何在python reportlab pdf生成中使用十六进制颜色值

时间:2018-08-14 14:01:14

标签: python reportlab

我正在尝试生成读取某些py文件和其他doc文件的多页pdf文档。我正在尝试使用SimpleDocTemplate代替Canvas。现在,我尝试使用十六进制值为文本着色。我尝试了以下操作:

from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate
from reportlab.platypus.para import Paragraph
from reportlab.lib.styles import getSampleStyleSheet

doc_content = []
styles=getSampleStyleSheet()

doc = SimpleDocTemplate("form_letter.pdf",pagesize=letter,
                        rightMargin=72,leftMargin=72,
                        topMargin=72,bottomMargin=18)

titleFormat = '<font size="16" name="Helvetica" color="#FF8100"><b><i>%s</i></b></font>'

def generateDoc(docName):
    paraTitle = Paragraph(titleFormat % 'Title', styles["Normal"])
    doc_content.append(paraTitle)
    doc.build(doc_content)

generateDoc("temp.pdf")

但这给我错误

AttributeError: module 'reportlab.lib.colors' has no attribute '#FF8100'

我也尝试了0xFF8100,但它给出了相同的错误:

AttributeError: module 'reportlab.lib.colors' has no attribute '0xFF8100'

当我使用某种命名的颜色说red时,它可以正常工作。如何使用十六进制颜色值?

1 个答案:

答案 0 :(得分:2)

如果需要在pdf中使用不同颜色的文本,最好创建自定义StyleSheet。
您可以将十六进制代码值传递给def HexColor(val, htmlOnly=False, hasAlpha=False):

from reportlab.lib import colors
from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate
from reportlab.platypus.para import Paragraph
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle

doc_content = []
styles = getSampleStyleSheet()

#creating custom stylesheet
styles.add(ParagraphStyle(name='Content',
                          fontFamily='Helvetica',
                          fontSize=8,
                          textColor=colors.HexColor("#FF8100")))

doc = SimpleDocTemplate("form_letter.pdf", pagesize=letter,
                        rightMargin=72, leftMargin=72,
                        topMargin=72, bottomMargin=18)

#using a sample text here
titleFormat = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."


def generateDoc(docName):
    paraTitle = Paragraph(titleFormat, styles["Content"])
    doc_content.append(paraTitle)
    doc.build(doc_content)


generateDoc("temp.pdf")