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

 更新时间:2025年07月25日 10:34:48   作者:这辈子谁会真的心疼你  
部分 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属性内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • OpenCV角点检测的实现示例

    OpenCV角点检测的实现示例

    角点通常被定义为两条边的交点,本文主要介绍了OpenCV角点检测的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 基于python分布式爬虫并解决假死的问题

    基于python分布式爬虫并解决假死的问题

    这篇文章主要介绍了基于python分布式爬虫并解决假死的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • 跟老齐学Python之模块的加载

    跟老齐学Python之模块的加载

    这篇文章主要介绍了跟老齐学Python之模块的加载,需要的朋友可以参考下
    2014-10-10
  • 用Python实现一个简单的多线程TCP服务器的教程

    用Python实现一个简单的多线程TCP服务器的教程

    这篇文章主要介绍了用Python实现一个简单的多线程TCP服务器的教程,示例的运行环境为Windows操作系统,需要的朋友可以参考下
    2015-05-05
  • 在pycharm中使用pipenv创建虚拟环境和安装django的详细教程

    在pycharm中使用pipenv创建虚拟环境和安装django的详细教程

    这篇文章主要介绍了在pycharm中使用pipenv来创建虚拟环境和安装django的详细教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Python3.x+迅雷x 自动下载高分电影的实现方法

    Python3.x+迅雷x 自动下载高分电影的实现方法

    这篇文章主要介绍了Python3.x+迅雷x 自动下载高分电影的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • Python pandas中的iloc使用小结

    Python pandas中的iloc使用小结

    iloc是Pandas中一个重要的工具,用于按照整数位置选择数据,通过使用整数索引,它使得在数据处理中按照位置选择数据变得简单和直观,这篇文章主要介绍了Python pandas中的iloc使用方法,需要的朋友可以参考下
    2024-06-06
  • 使用rpclib进行Python网络编程时的注释问题

    使用rpclib进行Python网络编程时的注释问题

    这篇文章主要介绍了使用rpclib进行Python网络编程时的注释问题,作者讲到了自己在编写服务器时要用unicode注释等需要注意的地方,需要的朋友可以参考下
    2015-05-05
  • python爬虫(入门教程、视频教程)

    python爬虫(入门教程、视频教程)

    本文是一篇关于python爬虫的知识学习教程,并且给大家解答了学习了python爬虫怎么挣钱这个很多程序员疑惑的问题,如果你对这方面的知识也感兴趣,一起深入学习一下吧。
    2018-01-01
  • Python搭建监控平台的实现示例

    Python搭建监控平台的实现示例

    本文主要介绍了Python搭建监控平台的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07

最新评论