python提取pdf中的所有图表

1 篇文章 0 订阅
1 篇文章 0 订阅

1、将我们的pdf转换成图片:

    def main(self, pic_path, cropped_pic_path, pgn=None):
        """
        主函数
        :param pic_path: 被截取的图片路径
        :param cropped_pic_path: 图片的截图的保存路径
        :param pgn: 指定获取截图的对象的索引
        :return:
        """
        if pgn is not None:
            # 获取当前页的doc
            doc_pdf = self.doc_pdfs[pgn]
            doc_pic = self.doc_pics[pgn]
            # 将当前页转换为PNG, 返回值为图片路径
            path = self.to_pic(doc_pic, 2, pgn, pic_path)
            loc_name_pic, canvas_size = self.get_pic_loc(doc_pdf)
            if loc_name_pic:
                for i in loc_name_pic:
                    position = i[1]
                    cropped_pic_name = re.sub('/', '_', i[0])
                    self.get_crops(path, canvas_size, position, cropped_pic_name, cropped_pic_path)

2、通过正则匹配到图表对 应的位置:

        for i in layout:
            if hasattr(i, 'get_text'):
                text = i.get_text().strip()
                if zhongwenjiance.search(text) == None:
                    # print(zhongwenjiance.search(text), '===================================================')
                    continue
                # print(text, '---', len(re.sub(' +', '', text)))
                # 匹配关键词
                if re.search(r'Fig.\d', text):
                    if panduan:
                        shifouduogetu = True
                        loc_top.append((value_bottom_bbox, text.split('\n')[1]))
                    else:
                        loc_top.append((value, text.split('\n')[1]))
                    loc_bottom.append((i.bbox, text))
                    value_bottom_bbox = i.bbox
                    value_bottom_text = text.split('\n')[1]
                    panduan = True
                    # print(text)
                elif len(re.sub(' +', '', text)) > 100:
                    panduan = False
                    value = i.bbox
                    value_text = text

3、在原来的图片上进行截取:

    def get_crops(self, pic_path, canvas_size, position, cropped_pic_name, cropped_pic_path):
        """
        按给定位置截取图片
        :param pic_path: 被截取的图片的路径
        :param canvas_size: 图片为pdf时的尺寸, tuple, (0, 0, width, height)
        :param position: 要截取的位置, tuple, (y1, y2)
        :param cropped_pic_name: 截取的图片名称
        :param cropped_pic_path: 截取的图片保存路径
        :return:
        """
        img = Image.open(pic_path)
        # 当前图片的尺寸 tuple(width, height)
        pic_size = img.size
        # 截图的范围扩大值
        size_increase = 10
        x1 = 0
        x2 = pic_size[0]
        y1 = pic_size[1] * (1 - (position[1] + size_increase)/canvas_size[3])
        y2 = pic_size[1] * (1 - (position[0] - size_increase)/canvas_size[3])
        cropped_img = img.crop((x1, y1, x2, y2))
        # 保存截图文件的路径
        path = os.path.join(cropped_pic_path.strip().replace('\n', '').replace(' ', ''), cropped_pic_name.strip().replace('\n', '').replace(' ', '')) + '.png'
        print(path)
        cropped_img.save(path)
        print('成功截取图片:', cropped_pic_name)

4、效果图:

在这里插入图片描述

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜欢地上爬的孩子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值