mor*_*ada 4 python pdf matplotlib
我使用PdfPagesfrom matplotlib,可以遍历每个图形对象,并将每个对象另存为同一PDF中的单独页面:
from matplotlib.backends.backend_pdf import PdfPages
pp = PdfPages('output.pdf')
for fig in figs:
pp.savefig(fig)
pp.close()
Run Code Online (Sandbox Code Playgroud)
这很好。但是,是否可以为PDF中的每一页添加页码?
谢谢。
使用reportlib和PyPDF的一个很好的解决方案(基于此):
import os
from PyPDF4.pdf import PdfFileReader, PdfFileWriter
from reportlab.lib.units import mm
from reportlab.pdfgen import canvas
def create_page_pdf(num, tmp):
c = canvas.Canvas(tmp)
for i in range(1, num + 1):
c.drawString((210 // 2) * mm, (4) * mm, str(i))
c.showPage()
c.save()
def add_page_numgers(pdf_path):
"""
Add page numbers to a pdf, save the result as a new pdf
@param pdf_path: path to pdf
"""
tmp = "__tmp.pdf"
writer = PdfFileWriter()
with open(pdf_path, "rb") as f:
reader = PdfFileReader(f, strict=False)
n = reader.getNumPages()
# create new PDF with page numbers
create_page_pdf(n, tmp)
with open(tmp, "rb") as ftmp:
number_pdf = PdfFileReader(ftmp)
# iterarte pages
for p in range(n):
page = reader.getPage(p)
numberLayer = number_pdf.getPage(p)
# merge number page with actual page
page.mergePage(numberLayer)
writer.addPage(page)
# write result
if writer.getNumPages():
newpath = pdf_path[:-4] + "_numbered.pdf"
with open(newpath, "wb") as f:
writer.write(f)
os.remove(tmp)
Run Code Online (Sandbox Code Playgroud)
像这样:
from matplotlib.backends.backend_pdf import PdfPages
pp = PdfPages('output.pdf')
for n, fig in enumerate(figs):
fig.text(4.25/8.5, 0.5/11., str(n+1), ha='center', fontsize=8)
pp.savefig(fig)
pp.close()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3112 次 |
| 最近记录: |