标签: reportlab

使用reportlab在现有PDF上添加文本

我有兴趣以编程方式填写现有的PDF表单.我真正需要做的就是从用户输入中提取信息,然后将相应的文本放在适当位置的现有PDF上.我已经可以通过reportlab将相同的纸张送入打印机两次来完成此操作,但这真的让我误解了.

在添加用户输入的文本之前,我很想亲自对每个现有PDF进行逆向工程并自己绘制每一行和每个字符,但我想查看是否有一种简单的方法来获取现有PDF并将其设置为一些额外文本的背景.我更喜欢使用python,因为它是我唯一感觉舒服的语言.

我也意识到我可以只扫描文档本身并使用生成的光栅图像作为背景,但我更喜欢矢量图形的精度.

看起来ReportLab有一个具有此功能的商业产品,而我正在寻找的特定功能就在其中(copyPages) - 但是为一个非盈利用途的单个简单功能支付4位数产品似乎有点过头了.

python pdf pdf-generation reportlab

6
推荐指数
1
解决办法
4600
查看次数

Reportlab'LayoutError'处理和调试

我一直在使用reportlab处理一些复杂的PDF输出.这些通常都很好,但在某些情况下仍然会出现LayoutErrors - 这些通常是因为Flowables在某些方面太大了.

事实证明调试它们非常困难,因为我通常没有比这样的信息更多的信息;

Flowable <Table@0x104C32290 4 rows x 6 cols> with cell(0,0) containing
'<Paragraph at 0x104df2ea8>Authors'(789.0 x 1176) too large on page 5 in frame 'normal'(801.543307087 x 526.582677165*) of template 'Later'
Run Code Online (Sandbox Code Playgroud)

这真的没那么有用.我理想地想知道的是这种事情的最佳调试和测试策略.

  • 有没有办法可以查看损坏的PDF?即使用布局错误渲染,所以我可以看到更容易发生的事情.
  • 有没有办法可以为reportlab添加一个钩子来更好地处理这些错误?而不只是失败整个PDF?
  • 关于一般改进,测试和处理这些问题的任何其他建议.

我没有一个特别的例子,所以它更一般的建议,上面的例外我已经解决了但它有点通过试验和错误(阅读;猜测和看到会发生什么).

python testing debugging reportlab

6
推荐指数
1
解决办法
1434
查看次数

如何在浏览器中打开生成的PDF文件?

我写了一个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)

django reportlab pypdf

6
推荐指数
3
解决办法
9856
查看次数

如何为Xerox打印机创建动态作业单?

我以编程方式在Python和Reportlab Toolkit中创建PDF文件,每个文件包含数千个文档,每个文档具有可变数量的页面.

我的问题是我需要指示打印机应打印每页的介质类型(例如,文档第一页的预打印信头).看来我需要生成一种持有这种信息的工作单.

我在创建JDF作业单方面取得了一些成功,但这些仅在我组织运行Xerox Freeflow Server 8版的最新打印机上运行.

理想情况下,我需要一个解决方案,它也适用于我们的Freeflow服务器版本7和Xerox DocuSP打印机.我尝试将JDF票证发送到这些打印机失败了.

我可以使用其他类型的票务系统,还是让我们所有的打印机识别JDF文件?

python printing pdf reportlab jdf

6
推荐指数
2
解决办法
3806
查看次数

ReportLab:段落中填充了大字体的文本

使用ReportLab,我想渲染一个字体大的文本块.现在,我的代码将文本放在段落中,以便它可以自动换行.但是,文本在渲染时会被挤在一起.

似乎没有考虑我为Paragraph对象指定的高度.我可以添加一个Paragraph的属性来解决这个问题吗?

我的代码如下:

from reportlab.pdfgen import canvas
from reportlab.lib.units import inch 
from reportlab.platypus import Paragraph
from  reportlab.lib.styles import ParagraphStyle
from reportlab.lib.enums import TA_CENTER

doc = canvas.Canvas('test.pdf')
p = ParagraphStyle('test')
p.textColor = 'black'
p.borderColor = 'black'
p.borderWidth = 1
p.alignment = TA_CENTER
p.fontSize = 100

para = Paragraph("THIS IS A REALLY LONG AND BIG STRING OF TEXT RIGHT HERE!!!!!", p)
para.wrapOn(doc,1200,1000)
para.drawOn(doc, 0.5*inch, 6*inch)
doc.save()
Run Code Online (Sandbox Code Playgroud)

python pdf django reportlab paragraph

6
推荐指数
1
解决办法
5394
查看次数

ReportLab:如何自动调整文本大小以适应块

我需要使用动态文本生成PDF并且我正在使用ReportLab.由于文本是动态的,无论如何都要调整大小以适应PDF的特定区域?

python pdf reportlab

6
推荐指数
2
解决办法
4079
查看次数

如何在ReportLab中将列重新调整为内容?

我正在使用ReportLab在python中工作.我需要生成PDF格式的报告.数据从数据库中检索并插入表中.这是简单的代码:

from reportlab.lib import colors
from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle
from reportlab.lib.units import inch
doc = SimpleDocTemplate("simple_table.pdf", pagesize=letter)
elements = []

data= [['00', '01', '02', '03', '04'],
       ['10', 'Here is large field retrieve from database', '12', '13', '14'],
       ['20', '21', '22', '23', '24'],
       ['30', '31', '32', 'Here is second value', '34']]
t=Table(data)
columnWidth = 1.9*inch;
for x in range(5):
        t._argW[x]= cellWidth
elements.append(t)
doc.build(elements)
Run Code Online (Sandbox Code Playgroud)

有三个问题:

  1. 单元格中的冗长数据在一行中的另一个单元格上重叠.
  2. 当我手动增加列宽时cellWidth = 2.9*inch;,页面不可见,不从左右滚动
  3. 我不知道如何在单元格中附加数据,这意味着如果数据的大小很大,它应该附加到同一单元格中的下一行.

我是如何解决这个问题的?

css python reportlab

6
推荐指数
1
解决办法
8438
查看次数

使用Django和Reportlab从HTML生成PDF

我带着一个我无法回答的新问题回来,整整一天都摸不着头脑.

我想通过点击"下载PDF"按钮从网页生成PDF.我尝试了几个模块,包括Reportlab和XHTML2PDF,但我无法生成任何pdf,也无法下载...这是我在Reportlab中做的,在Django网站中将HTML渲染为PDF

- - views.py - -

import cStringIO as StringIO
import ho.pisa as pisa
from django.template.loader import get_template
from django.template import Context
from django.http import HttpResponse
from cgi import escape

def index_data(request):
#Code to generate data
     return render(request, "analytics/stat.html", locals())
     return render_to_pdf(
        'analytics/stat.html',
        {
            'pagesize':'A4',
            'mylist': results,
        }
    )

def render_to_pdf(template_src, context_dict):
    template = get_template(template_src)
    context = Context(context_dict)
    html  = template.render(context)
    result = StringIO.StringIO()

    pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("ISO-8859-1")), result)
    if not pdf.err:
        return HttpResponse(result.getvalue(), content_type='application/pdf')
    return HttpResponse('We …
Run Code Online (Sandbox Code Playgroud)

python pdf django reportlab

6
推荐指数
1
解决办法
1万
查看次数

Reportlab - Unicode 字符在 unicode 支持的字体中显示为框

尝试通过 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\n
import 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\'))\n
Run Code Online (Sandbox Code Playgroud)\n\n

我还通过 json 导入字典,当我在记事本中打开 json 文件时,看起来像这样:

\n\n
{"example1":"b\\u0101s"}\n
Run Code Online (Sandbox Code Playgroud)\n\n

该程序读取并写入这个字典:

\n\n
from 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)\n
Run Code Online (Sandbox Code Playgroud)\n\n

结果应该是一个 pdf 文件,example1:b\xc4\x81s但结果却是example1:b\xe2\x96\xa0s …

python unicode reportlab

6
推荐指数
1
解决办法
5968
查看次数

如何在reportlab python中将文本对齐到中心?

我正在使用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)

python pdf reportlab pandas

6
推荐指数
1
解决办法
9919
查看次数