水印是纸质或者电子文档上的图像或图案,是一种个人和组织的象征。一些水印只能在特殊照明条件下才能看到。
这一节使用 reportlab
库。 在 Debian / Ubuntu 中通过以下命令安装:
sudo apt install -y python3-reportlab
from reportlab.pdfgen import canvas
from reportlab.lib.units import cm
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from pypdf import PdfWriter,PdfReader
--------------------------------------------------------------------------- ModuleNotFoundError Traceback (most recent call last) Cell In[2], line 1 ----> 1 from reportlab.pdfgen import canvas 2 from reportlab.lib.units import cm 3 from reportlab.pdfbase import pdfmetrics ModuleNotFoundError: No module named 'reportlab'
content = "Hello"
默认大小为21cm*29.7cm。
c = canvas.Canvas('/data/demo/mark.pdf', pagesize = (30*cm, 30*cm))
移动坐标原点(坐标系左下为(0,0))) 。
c.translate(10*cm, 10*cm)
灰色。
c.setFillColorRGB(0.5,0.5,0.5)
旋转45度,坐标系被旋转。
c.rotate(45)
c.drawString(-7*cm, 0*cm, content)
c.drawString(7*cm, 0*cm, content)
c.drawString(0*cm, 7*cm, content)
c.drawString(0*cm, -7*cm, content)
关闭并保存pdf文件。
c.save()
input_pdf = '/data/demo/test.pdf'
output_pdf = '/data/demo/marked.pdf'
watermark_pdf = '/data/demo/mark.pdf'
watermark = PdfReader(watermark_pdf)
watermark_page = watermark.pages[0]
pdf = PdfReader(input_pdf,strict=False)
pdf_writer = PdfWriter()
for page in range( len(pdf.pages)):
pdf_page = pdf.pages[page]
pdf_page.merge_page(watermark_page)
pdf_writer.add_page(pdf_page)
pdfOutputFile = open(output_pdf,'wb')
pdf_writer.encrypt('hello')
pdf_writer.write(pdfOutputFile)
pdfOutputFile.close()
from reportlab.lib.units import mm
import os,sys
path = './test.pdf'
base = os.path.basename(path)
tmp = "xx_tmp.pdf"
batch = 10
batch = 0
output = PdfWriter()
with open(path, 'rb') as f:
pdf = PdfReader(f,strict=False)
n = len(pdf.pages)
if batch == 0:
batch = -n
c = canvas.Canvas(tmp)
for i in range(1,n+1):
c.drawString((210//2)*mm, (4)*mm, str(i))
c.showPage()
c.save()
with open(tmp, 'rb') as ftmp:
numberPdf = PdfReader(ftmp)
for p in range(n):
print('page: %d of %d'%(p, n))
page = pdf.pages[p]
numberLayer = numberPdf.pages[0]
page.merge_page(numberLayer)
output.add_page(page)
if output.pages:
newpath = path.replace(base, base[:-4] + '_page_%d'%(p//batch + 1) + path[-4:])
print(newpath)
with open(newpath, 'wb') as f:
output.write(f)
os.remove(tmp)