首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在python reportlab pdf生成中使用十六进制颜色值

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

Stack Overflow用户
提问于 2018-08-14 22:01:14
回答 1查看 3.3K关注 0票数 3

我正在尝试生成读取一些py文件和其他文档文件的多页pdf文档。我正在尝试使用SimpleDocTemplate而不是Canvas。现在我尝试用十六进制值给文本上色。我尝试了以下几点:

代码语言:javascript
复制
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")

但这给了我一个错误

代码语言:javascript
复制
AttributeError: module 'reportlab.lib.colors' has no attribute '#FF8100'

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

代码语言:javascript
复制
AttributeError: module 'reportlab.lib.colors' has no attribute '0xFF8100'

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

EN

回答 1

Stack Overflow用户

发布于 2018-08-16 04:21:22

如果您需要pdf中不同颜色的文本,创建自定义StyleSheet总是更好。

您可以将十六进制编码值传递给def HexColor(val, htmlOnly=False, hasAlpha=False):

代码语言:javascript
复制
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")
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51843314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档