1.はじめに
PDF(Portable Document Format)、中国名のポータブルドキュメントフォーマットは、私たちが頻繁に接触するファイルフォーマットであり、ドキュメント、ドキュメント...多くはPDFフォーマットです。安定したフォーマットの利点により、印刷、共有、送信中に元の色とフォーマットを最適に維持できます。
Two.PyPDF2
PyPDF2は、PDFファイルのページを分割、マージ、トリミング、および変換できるサードパーティのPythonPDFライブラリです。
さらに、カスタムデータ、透かし、パスワードをPDFファイルに追加したり、PDFファイルからテキストやメタデータを取得したりできます。
1.インストール
pipを使用して直接インストールします。
pip install PyPDF2
2.PDFページを削除します
削除後のディレクトリはありません。。。
from PyPDF2 import PdfFileWriter, PdfFileReader
import os
def delete_pdf(index):
pages = input1.getNumPages()
for i in range(pages):
if i + 1 in index:
continue
output.addPage(input1.getPage(i))
outputStream = open("PyPDF2-output.pdf", "wb")
output.write(outputStream)
os.chdir(r'F:\file\pyfile\1\Code\python-code\自动化\PDF')
output = PdfFileWriter()
input1 = PdfFileReader(open("数学建模技能图谱.pdf", "rb"))
delete_pdf([2, 3, 4])
3.PDFをマージします
from PyPDF2 import PdfFileWriter, PdfFileReader
output = PdfFileWriter()
input1 = PdfFileReader(open("example.pdf", "rb"))
input2 = PdfFileReader(open("simple2.pdf", "rb"))
def merge_pdf(add_index, origin_index):
pages = input1.getNumPages()
k = 0
for i in range(pages):
if i+1 in add_index:
output.addPage(input2.getPage(origin_index[k]))
pages += 1
k += 1
output.addPage(input1.getPage(i))
outputStream = open("PyPDF2-output.pdf", "wb")
output.write(outputStream)
merge_pdf([2,3,4], [0, 0, 0])
- PyPDF2マージモジュールをインポートします
PdfFileMerger
; - 処理およびマージする必要のあるPDFドキュメントを読みます。
- 最初のPDFドキュメントからマージする最初の3ページを取り出します。
- 2番目のPDFドキュメントの最初のページをドキュメントに挿入します。
- 3番目のPDFドキュメントを出力ドキュメントの最後に添付します。
上記の2つの主要な関数に加えて、PyPDF2には他にもいくつかの小さな関数があります。
4.回転する
input1.getPage(1).rotateClockwise(90)
ページ1を90度回転します。
5.透かしを追加します
from PyPDF2 import PdfFileReader, PdfFileWriter
from PyPDF2.pdf import ContentStream
from PyPDF2.generic import TextStringObject, NameObject
from PyPDF2.utils import b_
import os
def remove_watermark(input_file, output_file):
"""
pdf去除水印
:param input_file:
:param output_file:
:return:
"""
with open(input_file, "rb") as f:
# 读取pdf文件
source = PdfFileReader(f, "rb")
# 创建pdf输出对象
output = PdfFileWriter()
for page in range(source.getNumPages()):
# 获取pdf一页属性信息
page = source.getPage(page)
# 获取pdf一页的内容
content_object = page.getContents()
# content_object = page["/Contents"].getObject()
# 将内容对象进行转换
content = ContentStream(content_object, source)
for operands, operator in content.operations:
# 根据要去除的水印格式是“Tj”文本
if operator == b_("Tj"):
# 将获取的文本替换为空
operands[0] = TextStringObject('')
# 转换原来的内容对象
page.__setitem__(NameObject('/Contents'), content)
# 增加到新的pdf上
output.addPage(page)
# 输入新的pdf文件
with open(output_file, "wb") as outputStream:
output.write(outputStream)
def create_watermark(input_pdf, output, watermark):
watermark_obj = PdfFileReader(watermark)
watermark_page = watermark_obj.getPage(0)
pdf_reader = PdfFileReader(input_pdf)
pdf_writer = PdfFileWriter()
# 给所有页面添加水印
for page in range(pdf_reader.getNumPages()):
page = pdf_reader.getPage(page)
page.mergePage(watermark_page)
pdf_writer.addPage(page)
with open(output, 'wb') as out:
pdf_writer.write(out)
os.chdir(r'F:\file\pyfile\1\Code\python-code\自动化\PDF')
# create_watermark(
# input_pdf='数学建模技能图谱.pdf',
# output='new_数学建模技能图谱.pdf',
# watermark='水印.pdf')
remove_watermark('有水印.pdf', '无水印.pdf')
6.暗号化
from PyPDF2 import PdfFileWriter, PdfFileReader
import os
def encrypt_pdf():
input1 = PdfFileReader(open("数学建模技能图谱.pdf", "rb"))
output = PdfFileWriter()
pages = input1.getNumPages()
for i in range(pages):
output.addPage(input1.getPage(i))
password = "secret"
output.encrypt(password)
outputStream = open("PyPDF2-output.pdf", "wb")
# 要在写入之前进行加密
output.write(outputStream)
os.chdir(r'F:\file\pyfile\1\Code\python-code\自动化\PDF')
encrypt_pdf()
7.復号化
from PyPDF2 import PdfFileWriter, PdfFileReader
import os
def decrypt_pdf():
input1 = PdfFileReader(open("PyPDF2-output.pdf", "rb"))
password = 'secret'
input1.decrypt(password)
output = PdfFileWriter()
pages = input1.getNumPages()
for i in range(pages):
output.addPage(input1.getPage(i))
outputStream = open("new-PyPDF2-output.pdf", "wb")
output.write(outputStream)
os.chdir(r'F:\file\pyfile\1\Code\python-code\自动化\PDF')
decrypt_pdf()