python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python修改PDF属性

Python实现修改PDF文件内部属性值

作者:这辈子谁会真的心疼你

部分 PDF 生成时会自动嵌入一些隐藏属性,比如创建软件版本,电脑用户名,修改记录等,下面小编就来和大家简单讲讲如何使用Python修改PDF文件内部属性值吧

部分 PDF 生成时会自动嵌入一些隐藏属性,比如创建软件版本、电脑用户名、修改记录等,这些信息可能涉及隐私或商业机密。例如,用个人电脑编辑的公司文件,属性中若包含个人用户名,可能泄露信息归属;通过修改或清除这些属性,可以避免不必要的信息暴露,降低隐私泄露风险。

pdf文件的属性值怎么修改?要修改PDF文件的属性值(如标题、作者、主题等元数据),可以使用不同的工具或编程语言。以下是几种常见的方法:

方法一:使用PDF编辑软件(如Adobe Acrobat)

1. 打开Adobe Acrobat,导入需要修改属性的PDF文件。

2. 依次点击“文件”→“属性”(或按Ctrl+D)。

3. 在弹出的“文档属性”对话框中,切换到“描述”选项卡。

4. 修改所需的属性值,如标题、作者、主题、关键词等。

5. 点击“确定”保存更改。

方法二:使用Python(PyPDF2库)

如果你想通过编程方式修改PDF属性,可以使用Python的PyPDF2库。以下是示例代码:

import PyPDF2

def modify_pdf_metadata(input_path, output_path, metadata):
    # 读取原始PDF文件
    with open(input_path, 'rb') as file:
        reader = PyPDF2.PdfReader(file)
        writer = PyPDF2.PdfWriter()

        # 复制所有页面到写入器
        for page in reader.pages:
            writer.add_page(page)

        # 获取原始元数据并更新
        original_metadata = reader.metadata
        writer.add_metadata({
            '/Title': metadata.get('title', ''),
            '/Author': metadata.get('author', ''),
            '/Subject': metadata.get('subject', ''),
            '/Keywords': metadata.get('keywords', ''),
            # 可以添加更多元数据字段
        })

        # 写入新的PDF文件
        with open(output_path, 'wb') as output_file:
            writer.write(output_file)

# 使用示例
metadata = {
    'title': '新标题',
    'author': '新作者',
    'subject': '新主题',
    'keywords': '关键词1,关键词2'
}

modify_pdf_metadata('input.pdf', 'output.pdf', metadata)

方法三:使用命令行工具(如pdftk或exiftool)

如果你偏好命令行操作,可以使用工具如`pdftk`或`exiftool`:

# 使用pdftk(需要先安装)
pdftk input.pdf dump_data output metadata.txt  # 导出元数据到文本文件
# 编辑metadata.txt文件中的属性值
pdftk input.pdf update_info metadata.txt output output.pdf  # 更新元数据

# 使用exiftool(需要先安装)
exiftool -Title="新标题" -Author="新作者" -Subject="新主题" input.pdf -o output.pdf

根据你的具体需求和场景,选择最适合的方法即可。如果需要批量处理多个PDF文件,编程方式会更加高效。

方法四:汇帮元数据编辑器

如果觉得上面的修改方法比较繁琐,可以试试专门的元数据修改工具进行修改比如“汇帮元数据编辑器”,适合小白操作,功能丰富。

需要注意的是并非所有属性都能随意改动:​

1、基础属性(标题、作者、关键词等)通常可直接编辑;​

2、加密文件的属性可能被锁定,需先解密(获取权限密码)才能修改;​

3、带有数字签名的 PDF,修改属性可能导致签名失效,需先确认是否允许修改(部分签名文件仅支持查看属性)。

方法补充

python 修改文件属性

1、获取文件的创建、修改、访问时间

# -*- encoding=utf-8 -*-
import os
import time
def get_file_time(filename):
filename = os.path.abspath(filename)
create_time = os.path.getctime(filename) # 创建时间
print('old create time:{}'.format(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(create_time))))
update_time = os.path.getmtime(filename) # 修改时间
print('old update time:{}'.format(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(update_time))))
access_time = os.path.getatime(filename) # 访问时间
print('old access time:{}'.format(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(access_time))))
return create_time, update_time, access_time
if __name__ == '__main__':
get_file_time('E:/a.txt')

2、更改文件的修改、访问时间(创建时间没查到怎么修改,暂时不记录)

# -*- encoding=utf-8 -*-
import os
import time
def set_file_time(filename, updatetime, access_time):
# 先传修改时间,再传访问时间
filename = os.path.abspath(filename)
new_updatetime = time.mktime(time.strptime(updatetime, '%Y-%m-%d %H:%M:%S'))
new_access_time = time.mktime(time.strptime(access_time, '%Y-%m-%d %H:%M:%S'))
os.utime(filename, (new_access_time, new_updatetime))
if __name__ == '__main__':
set_file_time('E:/a.txt', '2018-01-08 10:50:20', '2019-07-15 04:03:01')

3、放在同一个py方便直接复制使用

# -*- encoding=utf-8 -*-
import os
import time
def get_file_time(filename):
filename = os.path.abspath(filename)
# 创建时间
create_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(os.path.getctime(filename)))
# 修改时间
update_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(os.path.getmtime(filename)))
# 访问时间
access_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(os.path.getatime(filename)))
return create_time, update_time, access_time
def set_file_time(filename, updatetime, access_time):
# 先传修改时间,再传访问时间
filename = os.path.abspath(filename)
new_update_time = time.mktime(time.strptime(updatetime, '%Y-%m-%d %H:%M:%S'))
new_access_time = time.mktime(time.strptime(access_time, '%Y-%m-%d %H:%M:%S'))
os.utime(filename, (new_access_time, new_update_time))
def debug():
create_time, update_time, access_time = get_file_time('E:/a.txt')
set_file_time('E:/a.txt', update_time, access_time)
get_file_time('E:/a.txt')
if __name__ == '__main__':
debug()

4、补充修改文件的创建时间

import os
import time
from pywintypes import Time # 可以忽视这个 Time 报错(运行程序还是没问题的)
from win32con import FILE_FLAG_BACKUP_SEMANTICS
from win32con import FILE_SHARE_WRITE
from win32file import CloseHandle
from win32file import CreateFile
from win32file import GENERIC_WRITE
from win32file import OPEN_EXISTING
from win32file import SetFileTime
def modify_file_create_time(filename, create_time_str, update_time_str, access_time_str):
try:
format_str = "%Y-%m-%d %H:%M:%S" # 时间格式
# f = CreateFile(filename, GENERIC_READ | GENERIC_WRITE, 0, None, OPEN_EXISTING, 0, 0)
f = CreateFile(filename, GENERIC_WRITE, FILE_SHARE_WRITE, None, OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS, 0)
create_time = Time(time.mktime(time.strptime(create_time_str, format_str)))
update_time = Time(time.mktime(time.strptime(update_time_str, format_str)))
access_time = Time(time.mktime(time.strptime(access_time_str, format_str)))
SetFileTime(f, create_time, update_time, access_time)
CloseHandle(f)
print('update file time success:{}/{}/{}'.format(create_time_str, update_time_str,
access_time_str))
except Exception as e:
print('update file time fail:{}'.format(e))
if __name__ == '__main__':
cTime = "2019-12-13 21:51:02" # 创建时间
mTime = "2019-02-02 00:01:03" # 修改时间
aTime = "2019-02-02 00:01:04" # 访问时间
fName = r"a.txt" # 可以是文件也可以是文件夹
print(os.path.isdir(fName))
modify_file_create_time(fName, cTime, mTime, aTime)

到此这篇关于Python实现修改PDF文件内部属性值的文章就介绍到这了,更多相关Python修改PDF属性内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文