问题描述

在阅读PDF文件时偶尔需要ctrl+G跳转到指定页面,然而跳转的页面是PDF的页码而不是正文的页码(由于正文并不是从PDF第一页开始)。针对这个问题可以为前几页非正文部分设置页面标签,之后再阅读PDF就是数字页码就是从正文开始计算。


调整结果如图所示,左图为添加罗马数字标签,右图为未调整(标签即为PDF页码)。

代码

import PyPDF2
import PyPDF2.generic as PDFdef pdf_pagelabels_roman():number_type = PDF.DictionaryObject()number_type.update({PDF.NameObject("/S"):PDF.NameObject("/r")})return number_typedef pdf_pagelabels_decimal():number_type = PDF.DictionaryObject()number_type.update({PDF.NameObject("/S"):PDF.NameObject("/D")})return number_typedef pdf_pagelabels_decimal_with_offset(offset):number_type = pdf_pagelabels_decimal()number_type.update({PDF.NameObject("/St"):PDF.NumberObject(offset)})return number_typedef add_pagelabels(output_pdf, offset):nums_array = PDF.ArrayObject()# Each entry consists of an index followed by a page label...nums_array.append(PDF.NumberObject(0))  # index [0, offset-1] -> label [i, ii ...]nums_array.append(pdf_pagelabels_roman()) # Roman numerals# Each entry consists of an index followed by a page label...nums_array.append(PDF.NumberObject(offset-1)) # index [offset, ...] -> label [1, 2, ...]nums_array.append(pdf_pagelabels_decimal_with_offset(1)) # Decimal numbers, with Offsetpage_numbers = PDF.DictionaryObject()page_numbers.update({PDF.NameObject("/Nums"):nums_array})page_labels = PDF.DictionaryObject()page_labels.update({PDF.NameObject("/PageLabels"): page_numbers})root_obj = output_pdf._root_objectroot_obj.update(page_labels)import os
def adjust_page_number(pdf_path, offset):pdf_writer = PyPDF2.PdfWriter()with open(pdf_path, 'rb') as file:pdf_reader = PyPDF2.PdfReader(file)for i in range(0, len(pdf_reader.pages)):page = pdf_reader.pages[i]pdf_writer.add_page(page)add_pagelabels(pdf_writer, offset)pdf_writer.write(os.path.join(os.path.dirname(pdf_path), 'output.pdf'))pdf_writer.close()if __name__ == '__main__':adjust_page_number('./辅导.pdf', 1)

参考

PyPDF2为PDF文件起始页添加罗马数字相关推荐

  1. python PyPDF2处理PDF文件

    python PyPDF2处理PDF文件 安装PyPDF2 pip install PyPDF2 官方文档: https://pypdf2.readthedocs.io/en/latest/ 导入模块 ...

  2. python读取pdf文档书签 bookmark_用Python为PDF文件批量添加书签

    平时看一些大部头的技术书籍,大多数都是PDF版的,而且有一些书籍是影印扫描版的,几百上千页的书,没有任何书签,想要找到一个章节的位置非常费劲.那么就想,能不能搞一个工具,来自动地为这些大部头的PDF书 ...

  3. WaterMarker - pdf 文件水印添加工具

    WaterMarker - pdf 文件水印添加工具 写在前面 编写环境 核心代码分析 创建水印函数 添加水印函数 主函数 使用案例 脚本具体参数如下 具体案例 写在最后 写在前面 昨天想给 pdf ...

  4. java pdf添加透明水印_如何在PDF文件中添加透明水印

    原标题:如何在PDF文件中添加透明水印 有些文件添加水印,但是又不想水印影响文件的使用有时候会设置透明水印,那么PDF怎么设置透明水印呢,应该有很多的小伙伴们都很好奇应该怎么做吧,接下来就为大家分享一 ...

  5. PDF文件如何添加页面或插入其他PDF页面

    在处理PDF文件的时候如果要在文档中添加插入一个页面,或者是插入其他pdf文件页面的话该怎样操作?编辑PDF文件是否像office文档那样操作简单?下面就来讲下PDF文件怎么添加页面的. ​ 因为PD ...

  6. PyPDF2读取PDF文件内容保存到本地TXT

    利用PyPDF2读取PDF文件内容保存到本地TXT from PyPDF2.pdf import PdfFileReader import pandas as pddef Pdf_to_txt(pdf ...

  7. PDF文件如何添加签名

    PDF文件如何添加签名?在我们平常的工作中,许多文件都需要签名确认执行.如果有一份PDF文件需要签名,屏幕前的你知道应该如何操作吗?如果你并不了解PDF文件应该如何添加签名,那么没关系,继续往下阅读你 ...

  8. java pdf添加透明水印_如何使用PDF编辑工具在PDF文件中添加透明水印

    PDF 文件在修改编辑的时候会使用到 PDF 编辑工具,不管是工 作中还是生活中,都会使用到 PDF 文件,当我们需要给 PDF 文件添 加透明水印时,该怎么操作呢,是不是有很多的小伙伴也很好奇, 那 ...

  9. 想要在PDF文件中添加便贴,不妨用迅捷PDF编辑器

    pdf文档是一个比较特别的文档,他编辑起来会比较麻烦,不是普通的办公软件就可以实现的,向WPS他们编辑的话就需要花钱,但是也有PDF编辑器可以做到,比如小编见天说的迅捷PDF编辑器一样,他的功能确定很 ...

最新文章

  1. 在ubuntu上安装最新稳定版本的node及npm
  2. 看来我的计时器的应用还要加强才行呀
  3. 半透明AlphaBlend
  4. matlab 常用m文件,MATLAB基础课程 第三章 M文件知识(4)
  5. 数据链路层的是三个基本问题
  6. 营销获客场景下的工具类产品规划
  7. easyPR源码解析之plate_judge.h
  8. ajax的post方式传数组参数
  9. wdatepicker不显示秒_为什么别人电脑开机只要3秒,你有固态硬盘却要等上18秒?...
  10. 别告诉我你懂Javascript
  11. Collectors.toList()
  12. Java JSON转换为map
  13. GPU 编程与CG 语言之阳春白雪下里巴人——CG学习读书笔记之数学函数(之二)。
  14. 复旦赵卫东:大数据的系统观
  15. c# 实现语音播报功能 转发
  16. 练习:测测你优势教养的程度
  17. 5G基带芯片之战现状:一二三分别对应联发科华为高通
  18. 降维算法-LDA线性判别分析实例
  19. vmware17去虚拟化教程网络安全
  20. 集合中所有子集元素之和

热门文章

  1. 骨传导耳机的危害有哪些,骨传导耳机是不是智商税?
  2. 700+页机器学习笔记pdf下载
  3. turbo编码原理以及matlab实现
  4. MIKE 21 教程 1.1 网格搭建界面介绍之点线面的创建 (Mesh Generator 工具)
  5. 【项目管理】需求澄清模板
  6. 深度学习论文阅读列表
  7. 批量提取html title,怎样批量提取网站的标题和链接呢?
  8. Mac OS 需要更新才能使用这个启动磁盘的两种解决方法
  9. 2023年美国最佳本科商学院和最佳在线本科商学院榜单排名公布 | 美通社头条
  10. 为什么串口传输速度比并口快?