添加页码和水印
水印是纸质或者电子文档上的图像或图案,是一种个人和组织的象征。一些水印只能在特殊照明条件下才能看到。下面是向PDF添加水印方法:
添加文字水印
>>> from reportlab.pdfgen import canvas >>> from reportlab.lib.units import cm >>> from reportlab.pdfbase import pdfmetrics >>> from reportlab.pdfbase.ttfonts import TTFont >>> >>> from PyPDF4 import PdfFileWriter,PdfFileReader
>>> content = "Hello"
默认大小为21cm*29.7cm
>>> c = canvas.Canvas('./pdf_file/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 = './pdf_file/demo1.pdf' >>> output_pdf = './pdf_file/abc.pdf' >>> watermark_pdf = './pdf_file/mark.pdf' >>> watermark = PdfFileReader(watermark_pdf) >>> watermark_page = watermark.getPage(0) >>> pdf = PdfFileReader(input_pdf,strict=False) >>> pdf_writer = PdfFileWriter() >>> for page in range(pdf.getNumPages()): >>> pdf_page = pdf.getPage(page) >>> pdf_page.mergePage(watermark_page) >>> pdf_writer.addPage(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 = './pdf_file/demo1.pdf' >>> >>> base = os.path.basename(path) >>> tmp = "__tmp.pdf" >>> >>> batch = 10 >>> batch = 0 >>> output = PdfFileWriter() >>> with open(path, 'rb') as f: >>> pdf = PdfFileReader(f,strict=False) >>> n = pdf.getNumPages() >>> 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 = PdfFileReader(ftmp) >>> for p in range(n): >>> print('page: %d of %d'%(p, n)) >>> page = pdf.getPage(p) >>> numberLayer = numberPdf.getPage(p) >>> >>> page.mergePage(numberLayer) >>> output.addPage(page) >>> if output.getNumPages(): >>> newpath = path.replace(base, base[:-4] + '_page_%d'%(p//batch + 1) + path[-4:]) >>> with open(newpath, 'wb') as f: >>> output.write(f) >>> os.remove(tmp) page: 0 of 2 page: 1 of 2