当前位置:   article > 正文

Python功能实现:为pdf电子书籍生成书签目录_pdf书怎么生成json书页索引

pdf书怎么生成json书页索引

      今天搞了本pdf电子书看,奈何没有书签目录,用acrobat DC看起来很难受,所以索性写了个python脚本,配合PdfEditor软件能够较为方便地生成可跳转页码的书签目录。

注意:

1、用python3运行我提供的脚本。

2、请提前下载PdfEditor软件并了解如何用其制作书签目录。

3、脚本运行需要提供文件origin.txt文件,内容是书籍对应的原始书签目录。

4、实现思路主要使用了正则匹配,大家可以去了解下python re库的使用,正则规则最好根据origin.txt自行分析调整。

5、大家主要参考程序的实现思路,请根据实际情况进行修改。

脚本内容:

  1. # 作者:Melody
  2. # 功能:PDF书籍目录生成脚本,生成目标文件后需要配合PdfEditor软件使用
  3. # 时间:2021/5/30
  4. import re
  5. pageOffset = 16 # 印刷链接页码与实际跳转页码偏移量
  6. originFileName = 'origin.txt'
  7. resultFileName = 'result.txt'
  8. # 获得目标文件绝对路径
  9. nameList = __file__.split('\\')
  10. nameList.pop(-1) # 去除脚本文件名
  11. nameList.append(originFileName)
  12. path = "//".join(nameList)
  13. f = open(path, 'r', encoding='utf-8')
  14. info = f.read()
  15. f.close()
  16. myList = list()
  17. # 找到无效小数点对应区间
  18. cmd = r'[^\.]\.{2,}(\d| )'
  19. for match in re.finditer(cmd, info):
  20. myList.append((match.start()+1, match.end()-2))
  21. # 删除无效的小数点
  22. start = 0
  23. end = myList[0][0]
  24. newInfo = ""
  25. cnt = 0
  26. for i in range(len(myList)):
  27. if cnt != 0:
  28. end = myList[i][0]
  29. newInfo += info[start+1:end] + "\t"
  30. else:
  31. newInfo += info[start:end] + "\t"
  32. start = myList[i][1]
  33. cnt += 1
  34. # 给页码加偏移
  35. splitForPage = newInfo.split('\n')
  36. newInfo = ""
  37. for item in splitForPage:
  38. temp = item.split('\t')
  39. try:
  40. num = int(temp[-1]) + pageOffset
  41. temp[-1] = "\t" + str(num)
  42. except(ValueError):
  43. pass
  44. item = "".join(temp)
  45. newInfo += item + "\n"
  46. # 删除目录无效章节
  47. splitForDelete = newInfo.split('\n')
  48. newInfo = ""
  49. for item in splitForDelete:
  50. if item != "":
  51. if item[0] == "测" or item[0] == "例":
  52. continue
  53. else:
  54. newInfo += item + "\n"
  55. else:
  56. continue
  57. # 给章节加缩进,根据小数点个数判断章节层级
  58. splitForCap = newInfo.split('\n')
  59. newInfo = ""
  60. for item in splitForCap:
  61. temp = item.split(" ")
  62. capter = temp[0]
  63. numPoint = capter.count(".")
  64. if numPoint == 1:
  65. item = '\t' + item
  66. if numPoint == 2:
  67. item = "\t\t" + item
  68. newInfo += item + "\n"
  69. nameList.pop(-1)
  70. nameList.append(resultFileName)
  71. path = "//".join(nameList)
  72. f = open(path, 'w', encoding='utf-8')
  73. f.write(newInfo)
  74. f.close()

运行结果:

origin.txt内容:(自己想办法搞到这些信息,我是直接从pdf里复制粘贴的)

result.txt:

用PdfEditor打开目标pdf,将result.txt内容复制到软件里,直接保存就好了!太强了这软件!

正则表达式学习网站:

https://regex101.com/r/dmRygT/1

https://github.com/ziishaned/learn-regex/blob/master/translations/README-cn.md

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/820802
推荐阅读
相关标签
  

闽ICP备14008679号