是否不复制PDF文本?只能说您还没有阅读这篇文章

电脑杂谈  发布时间:2020-04-25 14:21:59  来源:网络整理

pdf怎么不能复制文字_复制pdf文字_怎么复制pdf中的文字

首先讨论为什么我要写这篇文章. 在此之前,我遇到了一个问题,我无法复制PDF的文本,但我只是想获取它. 我尝试了许多方法,首先将PDF转换为Word文档,以便可以从文档中复制内容,但是这些格式转换工具基本上都是收费的,自然无需考虑. 我还考虑过要截取要复制的文本部分的屏幕快照,然后将其发送到手机,通过手机QQ提取文本内容功能提取文本然后进行复制:

它工作得很好并且满足了我的需求,但这太麻烦了. 我需要截屏并将其发送到手机. 所以我陷入了沉思. 我可以自己实现这样的功能吗?

学习编程的目的是为了解决问题pdf怎么不能复制文字,所以,我想到了QQ如何实现此功能. 毫无疑问,它是通过图片识别文本,然后识别图片中的文本,最后显示出来的.

弄清楚原理之后,如何实现文本识别?我自己的实现显然是不现实的,我自己也不会这样做. 在百度上搜索后,我决定使用百度提供的文本识别API. 为了简化整个过程,最终决定使用Python语言来实现整个过程.

首先申请百度的文本识别API. 百度搜索百度AI开放平台:

单击第一个官方链接,输入后单击控制台:

然后您将被注册. 如果您有帐户,则可以登录. 登录后,可以看到控制台,单击左侧导航栏中的文本识别:

然后单击创建应用程序,根据需要填写信息,我已经在这里创建了它:

创建后pdf怎么不能复制文字,请先放置. 这三个数据在以后有用.

在编写代码之前,我必须先介绍要使用的模块,然后谈谈我要实现的功能: 首先,获取屏幕截图(QQ屏幕截图,微信屏幕截图,计算机随附的屏幕截图工具) (可用)捕获所需的文本内容,然后将图片保存到计算机,然后通过文本识别将图片中的文本提取出来,最后输出. 让我先向您展示效果:

pdf怎么不能复制文字_怎么复制pdf中的文字_复制pdf文字

一般功能是这样的,您也可以根据自己的想法进行扩展.

让我们首先介绍键盘模块. 因为我们想直接获取屏幕快照图像,所以我们不能自己保存它. 那太麻烦了. 我们想在截图完成后自动保存图像,因此我们首先听键盘输入. 首先安装键盘模块,然后在cmd窗口中执行命令:

pip install keyboard

尝试此模块.

import keyboard
keyboard.wait(hotkey = 's')
print("键盘按下了's'")

您可以通过此模块的等待功能等待键盘输入. function参数代表等待的热键,这意味着在执行程序时,程序将始终等待,直到您的键盘按下“ s”程序以继续执行. 我们运行该程序,然后按“ s”,结果如下:

键盘按下了's'

学习了这一点之后,接下来的事情非常简单. 我在这里使用了QQ的屏幕截图. 快捷键是: Ctrl + Alt + A,所以我们要监视快捷键,代码如下:

import keyboard
print("开始截图")
keyboard.wait(hotkey = 'ctrl+alt+a')
print("键盘按下了'ctrl+alt+a'")
keyboard.wait(hotkey = 'enter')
print("键盘按下了'enter'")
print("结束截图")

运行后,我们通常会执行屏幕截图操作并查看运行结果:

pdf怎么不能复制文字_复制pdf文字_怎么复制pdf中的文字

开始截图
键盘按下了'ctrl+alt+a'
键盘按下了'enter'
结束截图

这将完成监视器屏幕截图操作.

这是一个非常好的图像处理库,我们使用它来保存捕获的图像,首先安装模块:

pip install Pillow

这是PIL(Full Process: Pillow)软件包下的模块,因此我们下载Pillow软件包并使用该模块的功能,代码如下:

import keyboard
from PIL import ImageGrab 
print("开始截图")
keyboard.wait(hotkey = 'ctrl+alt+a')
print("键盘按下了'ctrl+alt+a'")
keyboard.wait(hotkey = 'enter')
print("键盘按下了'enter'")
# 保存剪切板快照
image = ImageGrab.grabclipboard()
image.save('screen.png')
print("结束截图")

使用也非常简单. 首先通过键盘模块的等待功能等待屏幕截图. 按Enter键后,屏幕截图结束. 使用ImageGrab模块的grabblipboard功能获取屏幕截图. 此功能的功能是获取当前剪贴板. 快照然后打包为图像并返回,然后与图像的保存功能一起保存. 如果仅写入文件名,则图片将保存在当前目录中.

现在让我们运行项目,然后随意拍照:

尽管以这种方式保存了屏幕截图,但是细心的学生肯定会发现第一个屏幕截图是错误的,但是第二个屏幕截图是第一个屏幕截图的内容,这是为什么?这是因为抓取剪贴板功能存在缓存问题,操作过快,有时会读取最后一个内容,因为第一个没有读取图像,因此将报告错误. 发现问题,如何解决?由于操作太快并导致读取缓存,因此请使其变慢. 让我们添加一个时间延迟. 代码修改如下:

import keyboard
from PIL import ImageGrab 
import time
print("开始截图")
keyboard.wait(hotkey = 'ctrl+alt+a')
print("键盘按下了'ctrl+alt+a'")
keyboard.wait(hotkey = 'enter')
print("键盘按下了'enter'")
time.sleep(0.1) # 因为读取截取内容会有一个延迟,导致读取到的是上一次的截图,这里我们主动延迟
# 保存剪切板快照
image = ImageGrab.grabclipboard()
image.save('screen.png')
print("结束截图")

复制pdf文字_怎么复制pdf中的文字_pdf怎么不能复制文字

保存剪贴板快照之前有0.1秒的延迟,可以很好地解决此问题. 要使用睡眠功能,您需要导入时间模块并下载模块说明:

pip install time

这时,保存捕获的图像.

下面介绍百度的文本识别API. 有关文本识别API的介绍,您可以查看百度的官方技术文档. 我只会在这里介绍您需要使用的内容.

AipOcr是OCR的Python SDK客户端,它为使用OCR的开发人员提供了一系列交互方法.

from aip import AipOcr
""" 你的 APPID AK SK """
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
SECRET_KEY = '你的 Secret Key'
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)

这三个数据都在以前的应用程序管理中,只需将其粘贴即可. 这样,就可以创建客户端,并且还可以配置客户端,例如连接超时时间等,并且无需进行配置在这里完成.

""" 读取图片 """
def get_file_content(filePath):
    with open(filePath, 'rb') as fp:
        return fp.read()
image = get_file_content('example.jpg')

此代码是从官方文档中复制的,其含义非常简单,get_file_content函数通过图片的路径将图片转换为二进制数据,此处的图片是指定图片的二进制数据. 使用二进制数据之后,您可以执行文本识别.

这两种方法都可以用于文本识别,但是basicAccurate方法是高精度版本,您可以根据自己的喜好使用哪种方法.

pdf怎么不能复制文字_复制pdf文字_怎么复制pdf中的文字

让我们测试一下是否可以成功提取图片文本,例如以下图片:

from aip import AipOcr
# 调用百度API识别图片内容
APP_ID = '18076523'
API_KEY = 'vlLcZ6VGb88qoAr5IN0OTShw'
SECRET_KEY = '8KzHr2AvEREYGGwdwIMFZSwTUoPB6L'
client = AipOcr(APP_ID,API_KEY,SECRET_KEY) # 生成一个对策
# 获取图片的二进制数据
def get_file_content(filePath):
	with open(filePath,'rb') as fp:
		return fp.read()
image = get_file_content('screen.png')
# 调用文字识别(高精度版)
text = client.basicAccurate(image)
print(text)

运行结果:

成功获取文本内容,让我们首先处理数据. 无论log_id如何,words_result_num都应为可识别的文本数. 它将图片中的文本分成几个小块. 总共有四个街区. 文本内容存储在words_result列表中. 每个列表都包含一个字典. 文本内容的“ S键是单词,因此接下来很容易取出文本内容:

from aip import AipOcr
# 3、调用百度API识别图片内容
APP_ID = '18076523'
API_KEY = 'vlLcZ6VGb88qoAr5IN0OTShw'
SECRET_KEY = '8KzHr2AvEREYGGwdwIMFZSwTUoPB6L'
client = AipOcr(APP_ID,API_KEY,SECRET_KEY) # 生成一个对策
# 获取图片的二进制数据
def get_file_content(filePath):
	with open(filePath,'rb') as fp:
		return fp.read()
image = get_file_content('screen.png')
# 调用文字识别(高精度版)
text = client.basicAccurate(image)
# 处理返回的数据
textList = text['words_result']
for i in textList:
	print(i['words'])

运行结果:

这时,我们已经掌握了图片的文本识别.

以下是程序的所有代码:

import time
import keyboard
from PIL import ImageGrab
from aip import AipOcr
# 1、截取图片
keyboard.wait(hotkey='ctrl+alt+a') # 键盘输入的触发事件
keyboard.wait(hotkey='enter')
time.sleep(0.1) # 因为读取截取内容会有一个延迟,导致读取到的是上一次的截图,这里我们主动延迟
# 2、将图片保存到电脑上
image = ImageGrab.grabclipboard()
image.save('screen.png') # 将截取的图片进行保存
# 3、调用百度API识别图片内容
APP_ID = '18076523'
API_KEY = 'vlLcZ6VGb88qoAr5IN0OTShw'
SECRET_KEY = '8KzHr2AvEREYGGwdwIMFZSwTUoPB6L'
client = AipOcr(APP_ID,API_KEY,SECRET_KEY) # 生成一个对策
# 获取图片的二进制数据
def get_file_content(filePath):
	with open(filePath,'rb') as fp:
		return fp.read()
image = get_file_content('screen.png')
# 调用文字识别(高精度版)
text = client.basicAccurate(image)
textList = text['words_result']
for i in textList:
	print(i['words'])

效果在一开始就得到了证明. 它不仅可以复制PDF文本的内容,因为可以在任何地方执行屏幕截图,所以在某些地方(例如百度库),不能复制文本内容,可以使用此方法进行曲线复制.

最后,我想说的是,学习应该被视为您自己的乐趣. 编程是灵活的. 当您遇到问题时,您可以考虑自己制作一些小工具,这些工具不仅可以解决您自己的问题,而且可以从学习了很多知识之后,为什么不这样做呢?


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-188437-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...