我正在尝试生成读取某些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
时,它可以正常工作。如何使用十六进制颜色值?
答案 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")