吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1069|回复: 1
收起左侧

[Python 原创] pdf关键词highlight

[复制链接]
dlwjmcf 发表于 2023-5-22 12:15
本帖最后由 dlwjmcf 于 2023-5-22 12:18 编辑

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



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

[Python] 纯文本查看 复制代码
import fitz
import os


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

# 颜色设置:R/255,G/255,B/255
Red = [1, 0.8, 0.8]
Aqua = [0.5, 1, 1]
Yellow = [1, 0.9, 0.6]
Green = [0.6, 1, 0.6]

# 关键词(不区分大小写,首字母除外)和颜色
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[0])                # 查找关键词,生成列表
                        for inst in text_instances:                        # highlight列表
                                highlight = page.addHighlightAnnot(inst)
                                highlight.setColors(stroke=i[1])
                                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[i],names[i])                                # highlight
          print ("第{0}篇Highlight完成".format(i+1))


if __name__ == '__main__':
     main()


运行效果:
image.png

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

免费评分

参与人数 1吾爱币 +7 热心值 +1 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

xiaoxiaohuy 发表于 2023-5-27 21:39
学习了解
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 21:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表