dlwjmcf 发表于 2023-5-22 12:15

pdf关键词highlight

本帖最后由 dlwjmcf 于 2023-5-22 12:18 编辑

**起个名字**:没想过,就叫**“一键Highlight PDF 关键词”**吧!
**背景故事**:为了满(ying)足(fu)第三方审计要求,他们的参考文献需要Highlight以体现阅读了文章,所以搞了个一键Hightlight关键字
**开发出来的新玩法**:筛选大会pdf版日程的时候,先用这个脚本跑一遍,Highlight出关键字,然后点开注释栏,只看Highlight的东西就好了

主要是用到fitz库处理pdf,功能比较简单,做一个解决日常工作中问题的小工具也无妨。

import fitz
import os


data_dir_in = "raw/"                                                      # 输入路径
data_dir_out = "out/"                                                   # 输出路径

# 颜色设置:R/255,G/255,B/255
Red =
Aqua =
Yellow =
Green =

# 关键词(不区分大小写,首字母除外)和颜色
keywords = [["asthma",Green],
                        ["IgE",Aqua],
                        ["omalizumab",Red],
                        ["biologic",Yellow]]

# 读取文件列表
def getRawFileList(path):                                                # 获取一个文件夹下的全部文件名
   files = []
   names = []
   for f in os.listdir(path):
         if not f.endswith("~") or not f == "":                # 返回指定的文件夹包含的文件或文件夹的名字的列表
             files.append(os.path.join(path, f))                # 把目录和文件名合成一个路径
             names.append(f)
   return files, names

# highlight
def highlight_pdf(in_path,name):
      doc = fitz.open(in_path)                                        # 打开pdf
      for page in doc:                                                      # 历遍页面
                for i in keywords:                                        # 历遍关键词
                        text_instances = page.searchFor(i)                # 查找关键词,生成列表
                        for inst in text_instances:                        # highlight列表
                              highlight = page.addHighlightAnnot(inst)
                              highlight.setColors(stroke=i)
                              highlight.update()
      doc.save("out/"+name, garbage=4, deflate=True, clean=True)                # 保存pdf


def main():
   files,names = getRawFileList(data_dir_in)                # 获取文件列表
   count_num=len(files)                                                # 文件计数

   for i in range(0,len(files)):                                                # 历遍文件
          print ("正在Highlight第{0}篇pdf".format(i+1))
          highlight_pdf(files,names)                              # highlight
          print ("第{0}篇Highlight完成".format(i+1))


if __name__ == '__main__':
   main()

运行效果:


更新记录
V1.0.0. 日期忘记留了
1. 正式上线,满足基本功能
      
V2.0.0. 日期又忘记留了
1. 关键字改为列表,可以同时设置多个关键字
      
V3.0.0. 没错,还是没记日期
1. 支持了为不同关键字设置不同颜色

xiaoxiaohuy 发表于 2023-5-27 21:39

学习了解
页: [1]
查看完整版本: pdf关键词highlight