如何在ReportLab中创建项目符号列表?文档令人沮丧地含糊不清.我在尝试:
text = ur '''
<para bulletText="•">
item 1
</para>
<para bulletText="•">
item 2
</para>
'''
Story.append(Paragraph(text,TEXT_STYLE))
Run Code Online (Sandbox Code Playgroud)
但我不断收到错误list index out of range.看来我不能<para></para>在一次通话中加一个以上Paragraph()?我也试过设置,TEXT_STYLE.bulletText="•"但这也不起作用......
我写了一个Pdf合并,它将原始文件与水印合并.
我现在要做的是通过Django视图在浏览器中打开'document-output.pdf'文件.我已经检查了Django的相关文章,但由于我的方法相对不同,我不直接创建PDF对象,使用响应对象作为其"文件".所以我有点迷失.
那么,我怎么能在Django视图中呢?
from pyPdf import PdfFileWriter, PdfFileReader
from reportlab.pdfgen.canvas import Canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
output = PdfFileWriter()
input = PdfFileReader(file('file.pdf', 'rb'))
# get number of pages
num_pages = input.getNumPages()
# register new chinese font
pdfmetrics.registerFont(TTFont('chinese_font','/usr/share/fonts/truetype/mac/LiHeiPro.ttf'))
# generate watermark on the fly
pdf = Canvas("watermark.pdf")
pdf.setFont("chinese_font", 12)
pdf.setStrokeColorRGB(0.5, 1, 0)
pdf.drawString(10, 830, "??")
pdf.save()
# put on watermark
watermark = PdfFileReader(file('watermark.pdf', 'rb'))
page1 = input.getPage(0)
page1.mergePage(watermark.getPage(0))
# add processed pdf page
output.addPage(page1)
# then, add …Run Code Online (Sandbox Code Playgroud) 我正在使用reportlab在django视图中编写pdf,它们非常简单,标题,内容和页脚.
我正在使用非常适合的SimpleDocTemplate,在内容中绘制表格,页脚和标题是drwan使用:
build([data], onFirstPage=drawPageFrame, onLaterPages=drawPageFrame).
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何使用Canvas.drawImage(...)绘制图像?我需要一个"浮动"图像...位于我想要的文本上,而使用SimpleDocTemplate我没有Canvas对象来执行此操作.
搜索我发现了这个:
鸭嘴兽布局的东西使用flowables.当包装,拆分或绘制时,包装工通常将属性canv设置到每个flowable上,即围绕wrap,split和draw方法.在这些方法中,您可以使用self的canv属性访问画布.
怎么用这个?
嗯,更多要测试的东西:
flowables.Macro
flowables.CallerMacro
Run Code Online (Sandbox Code Playgroud)
# -*- coding: utf-8 -*-
from reportlab.lib.pagesizes import A4, landscape, portrait
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.platypus import Table, Flowable, SimpleDocTemplate, Paragraph, Spacer, Image
from reportlab.lib import randomtext
from reportlab import platypus
import os,random
styles = getSampleStyleSheet()
path = os.path.realpath(os.path.dirname(__file__))
def drawPageFrame(canvas, doc):
canvas.saveState()
canvas.drawImage(path+"/ujiPDF.jpg",50,50,57,57)
canvas.restoreState()
doc = SimpleDocTemplate("salida.pdf",pagesize=A4)
elementos = []
com = 'canvas.drawImage("'+path+'/ujiPDF.jpg",100,100,57,57)'
print com
elementos.append(platypus.flowables.Macro('canvas.saveState()'))
print platypus.flowables.Macro(com)
elementos.append(platypus.flowables.Macro(com))
elementos.append(platypus.flowables.Macro('canvas.restoreState()'))
para = Paragraph(randomtext.randomText(randomtext.PYTHON,20), styles["Normal"])
elementos.append(para)
doc.build(elementos,onFirstPage=drawPageFrame, … 我试图得到类似下面的代码片段来实际绘制这个文件旋转90度.pagesize已经是我最终想要它的方式,但文本仍然是水平的.如何旋转文本使其垂直?
style = getSampleStyleSheet()
normal = style["Normal"]
normal.alignment = TA_CENTER
normal.fontName = "Helvetica"
normal.fontSize = 15
pdf = SimpleDocTemplate("testplatypus.pdf", pagesize = (80, 250), rightMargin=10, leftMargin=10, topMargin=20,bottomMargin=20)
story = []
text = "I really need this to be wrapped and vertical!"
para = Paragraph(text, normal)
story.append(para)
pdf.build(story)
Run Code Online (Sandbox Code Playgroud) 我有以下代码,我在PDF中绘制垂直条形图和折线图.
如何将这两个图表保存在PDF的2个不同页面中.我看到它可以使用 -
c = canvas.Canvas("hello.pdf")
hello(c)
c.showPage()
c.save()
Run Code Online (Sandbox Code Playgroud)
但是,我没有使用Canvas,而是使用showPage() 不存在哪种方法的Drawing对象.
如何将2个图表保存在PDF的2个不同页面中?右边第二个图(折线图)与第一个图(垂直条形图)重叠,从而阻碍了条形图.
这是我的代码.
from reportlab.graphics.shapes import Drawing
from reportlab.graphics.charts.barcharts import VerticalBarChart
drawing = Drawing(400, 200)
data = [
(13, 5, 20, 22, 37, 45, 19, 4),
(14, 6, 21, 23, 38, 46, 20, 5)
]
bc = VerticalBarChart()
bc.x = 50
bc.y = 50
bc.height = 125
bc.width = 300
bc.data = data
#bc.strokeColor = colors.black
bc.valueAxis.valueMin = 0
bc.valueAxis.valueMax = 50
bc.valueAxis.valueStep = 10
bc.categoryAxis.labels.boxAnchor = 'ne' …Run Code Online (Sandbox Code Playgroud) 我们如何使用reportlab轻松旋转图像?我还没有找到简单的方法。找到的唯一方法来自http://dods.ipsl.jussieu.fr/orchidee/SANORCHIDEE/TEMP/TEMP_LOCAL/cdat_portable/lib_new_wrong_gcc/python2.4/site-packages/reportlab/test/test_graphics_images.py,例如使用:
>>> from reportlab.graphics.shapes import Image, Drawing
>>> from reportlab.platypus import SimpleDocTemplate
>>> from reportlab.lib.pagesizes import A4, portrait
>>> from reportlab.lib.units import mm
>>> img = Image(-202/25.4, -125/25.4, 210/25.4, 138/25.4, 'uneBelleImage.png') # (x, y [from lower left corner], width, height, path, **kw)
>>> d = Drawing(0, 0) # (width, height, *nodes, **keywords)
>>> d.add(img)
>>> d.scale(100,100) #(%width, %height)
>>> d.rotate(90)
>>> report=[]
>>> report.append(d)
>>> page = SimpleDocTemplate('toto.pdf', pagesize = portrait(A4), rightMargin=20*mm, leftMargin=20*mm, topMargin=10*mm, bottomMargin = 10*mm)
>>> …Run Code Online (Sandbox Code Playgroud) 我有一个 pdf 文件,我想替换 pdf 文件中的一些文本并生成新的 pdf。我怎么能在python中做到这一点?我试过 reportlab ,reportlab 没有任何功能来搜索文本和替换它。我可以使用什么其他模块?
我一直在尝试从可以是英语、波斯语、数字或它们的组合的内容创建 PDF 文件。
波斯语文本存在一些问题,例如:“??? ?? ??? ??????? ???”
?- 文字必须从右到左书写
2-单词中不同位置的字符之间存在差异(意味着字符会根据周围的字符改变形状)
3- 因为句子是从右到左阅读的,所以普通的 textwrap 不能正常工作。
尝试通过 python 3 使用 reportlab 编写包含宏宏的文档 (\xc4\x81 \xc4\x93 \xc4\xab \xc5\x8d \xc5\xab),但宏宏显示为框 (\xe2\x96 \xa0). 该文档是用 Arial 字体编写的 - 但如果我在文字处理程序中打开该文件来检查字体,则这些框采用“Segoe UI Symbol”字体。
\n\n要在 Arial 中导入为支持多种 unicode 字符的字体(这似乎有效):
\n\nimport reportlab.rl_config\nreportlab.rl_config.warnOnMissingFontGlyphs = 0\nfrom reportlab.pdfbase import pdfmetrics\nfrom reportlab.pdfbase.ttfonts import TTFont\npdfmetrics.registerFont(TTFont(\'Arial\', \'Arial.ttf\'))\nRun Code Online (Sandbox Code Playgroud)\n\n我还通过 json 导入字典,当我在记事本中打开 json 文件时,看起来像这样:
\n\n{"example1":"b\\u0101s"}\nRun Code Online (Sandbox Code Playgroud)\n\n该程序读取并写入这个字典:
\n\nfrom reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer\nfrom reportlab.lib.styles import getSampleStyleSheet\ndoc = SimpleDocTemplate("hello.pdf")\nStory = [Spacer(1,2*inch)]\nstyle = styles["Normal"]\nwith open(\'CompDict.json\',\'r\') as f:\n m_dic=json.load(f)\nfor key,value in m_dic:\n p=Paragraph(key+":"+value,style)\n Story.append(p)\ndoc.build(Story)\nRun Code Online (Sandbox Code Playgroud)\n\n结果应该是一个 pdf 文件,example1:b\xc4\x81s但结果却是example1:b\xe2\x96\xa0s …
我正在使用reportlab生成pdf,我希望我的标题位于中心。但如何实现,找不到解决方案。
这是我的代码:
def add_text(text, style="Normal", fontsize=12):
Story.append(Spacer(1, 12))
ptext = "<font size={}>{}</font>".format(fontsize, text)
Story.append(Paragraph(ptext, styles[style]))
Story.append(Spacer(1, 12))
add_text("Title", style="Heading1", fontsize=24)
Run Code Online (Sandbox Code Playgroud)