PDF加粗内容重复读取解决方案

2024-02-22 12:20

本文主要是介绍PDF加粗内容重复读取解决方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 发现问题
  • 解决方案
    • 问题分析
    • 大致逻辑
  • show my code

前言

在使用pdfplumber读取PDF的过程中,由于加黑的内容会被莫名其妙的读取两次,带来了很大的困扰。这篇文章将给出解决方案。

发现问题

在在使用pdfplumber读取PDF的过程中,读取普通内容是完全没有问题的。但是该公司早期PDF并未完全规范的过程中,有些标题加粗了,而有些却没有。加粗的标题将会被读取两次,比如好好的123456,加粗后将会被读取为112233445566。这可不太好。

解决方案

问题分析

首先我们需要明白,加粗的内容只会被连续读取,而不会被随机读取,这一点使得字符串具备了一定的规律。所以循环或者递归都是可行的,只是我们需要记住递归的最大深度为1000

其次我们需要明确,不是所有的连续内容都应该被删除。比如111被读成了111111,那可不能删的只剩下1,这就又和PDF上想要传达的内容不一致了。所以正则表达式也是不能乱用的。

大致逻辑

既然有这些要求,我们就好办了。

我们考虑极端场景:111111。我们就直接先数一数连续重复有几个,然后保留一半就好了。

然后再考虑一般场景:111111222222333333。在处理过程中,实际上也就是相当于把字符串拆成了3份,每份利用极端场景111111的做法去做。

show my code

知道该怎么办了就直接干吧。

虽然我们现在是针对加粗被重复读取的问题,字符串中的每一种字符一定是双数出现,所以简单一点的话就可以这么做:

def drop_duplicates(arr):result, i = [], 0while i < len(arr):count = 1# 计算连续相同元素的数量while i + count < len(arr) and arr[i] == arr[i + count]:count += 1# 保留一半result.extend([arr[i]] * count // 2)i += count  # 处理下一段return ''.join(result)

当然,考虑到并不一定具备跟现在一样完全理想的场景,所以这里也考虑了万一真的有一个数字落单的情况:

def drop_duplicates(arr):result, i = [], 0while i < len(arr):count = 1# 计算连续相同元素的数量while i + count < len(arr) and arr[i] == arr[i + count]:count += 1# 只有一个落单的话,1 // 2 = 0,这就不对了,所以上个保险,最低只能为1result.extend([arr[i]] * max(1, count // 2))i += count  # 处理下一段return ''.join(result)

解决。

这篇关于PDF加粗内容重复读取解决方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/735248

相关文章

Vuex Actions多参数传递的解决方案

《VuexActions多参数传递的解决方案》在Vuex中,actions的设计默认只支持单个参数传递,这有时会限制我们的使用场景,下面我将详细介绍几种处理多参数传递的解决方案,从基础到高级,... 目录一、对象封装法(推荐)二、参数解构法三、柯里化函数法四、Payload 工厂函数五、TypeScript

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

jupyter代码块没有运行图标的解决方案

《jupyter代码块没有运行图标的解决方案》:本文主要介绍jupyter代码块没有运行图标的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录jupyter代码块没有运行图标的解决1.找到Jupyter notebook的系统配置文件2.这时候一般会搜索到

详解如何通过Python批量转换图片为PDF

《详解如何通过Python批量转换图片为PDF》:本文主要介绍如何基于Python+Tkinter开发的图片批量转PDF工具,可以支持批量添加图片,拖拽等操作,感兴趣的小伙伴可以参考一下... 目录1. 概述2. 功能亮点2.1 主要功能2.2 界面设计3. 使用指南3.1 运行环境3.2 使用步骤4. 核

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

详解C#如何提取PDF文档中的图片

《详解C#如何提取PDF文档中的图片》提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使用,下面我们就来看看如何使用C#通过代码从PDF文档中提取图片吧... 当 PDF 文件中包含有价值的图片,如艺术画作、设计素材、报告图表等,提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使

Linux samba共享慢的原因及解决方案

《Linuxsamba共享慢的原因及解决方案》:本文主要介绍Linuxsamba共享慢的原因及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux samba共享慢原因及解决问题表现原因解决办法总结Linandroidux samba共享慢原因及解决

找不到Anaconda prompt终端的原因分析及解决方案

《找不到Anacondaprompt终端的原因分析及解决方案》因为anaconda还没有初始化,在安装anaconda的过程中,有一行是否要添加anaconda到菜单目录中,由于没有勾选,导致没有菜... 目录问题原因问http://www.chinasem.cn题解决安装了 Anaconda 却找不到 An

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用