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

ani*_*nir 5 python reportlab

我正在尝试生成多页 pdf 文档,读取一些py文件和其他 doc 文件。我正在尝试用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")
Run Code Online (Sandbox Code Playgroud)

但这给了我错误

AttributeError: module 'reportlab.lib.colors' has no attribute '#FF8100'
Run Code Online (Sandbox Code Playgroud)

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

AttributeError: module 'reportlab.lib.colors' has no attribute '0xFF8100'
Run Code Online (Sandbox Code Playgroud)

当我使用一些命名颜色时red,效果很好。如何使用十六进制颜色值?

Vis*_*ngh 4

如果您需要在 pdf 中使用不同颜色的文本,最好创建自定义样式表。
您可以将十六进制代码值传递给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")
Run Code Online (Sandbox Code Playgroud)