精华内容
下载资源
问答
  • 先说说我为什么要写这篇文章,在这之前,我遇到了一个问题,就是复制不了PDF的文字内容,而我偏偏又想获取到。 我尝试了很多办法,先是将PDF转成Word文档,这样就可以从文档中把内容复制出来了,但是这些格式转换的...

    突发奇想

    先说说我为什么要写这篇文章,在这之前,我遇到了一个问题,就是复制不了PDF的文字内容,而我偏偏又想获取到。
    我尝试了很多办法,先是将PDF转成Word文档,这样就可以从文档中把内容复制出来了,但是这些格式转换的工具基本都收费,自然就不用再考虑了。
    我还想过将要复制的文字部分截图下来,然后发到手机上,通过手机QQ的提取文字内容功能将文字提取出来然后复制:
    在这里插入图片描述
    在这里插入图片描述
    效果很好,也实现了我的需求,但是未免太麻烦了,要截图,还要发到手机上,于是我陷入了深深的思考,我能不能自己实现这样的功能呢?

    学编程为了什么,就是解决问题嘛,所以,我考虑了一下,QQ是如何实现这个功能的。毫无疑问,是文字识别,通过一张图片,然后识别图片里的文字,最后显示出来。

    准备工作

    搞清楚原理之后,就要解决该如何实现文字识别呢?自己实现显然不现实,自己也不会啊,在百度上搜索了一下,我决定使用百度提供的文字识别API。为了使整个过程变得简便,最终决定使用Python语言实现整个过程。

    申请百度识别API

    我们先来申请一下百度的文字识别API。
    百度搜索百度AI开放平台:
    在这里插入图片描述
    点第一个官方链接,进去后点击控制台:
    在这里插入图片描述
    然后会让你注册,有账号的话登录就可以了,登录之后就可以看到控制台,点击左侧导航栏中的文字识别:
    在这里插入图片描述
    然后点击创建应用,信息随便填一填就好了,我这里已经创建好了:
    在这里插入图片描述
    创建好了就先放着,这三个数据到后面是有用的。

    模块介绍

    在写代码之前,我得先介绍一下要使用的模块,先来说说我想实现的功能:
    首先通过截图(QQ截图、微信截图、电脑自带的截图工具都可以)截取需要的文字内容,然后将图片保存到电脑中,接着通过文字识别把图片中的文字进行提取,最后输出。
    先给大家看看效果:
    在这里插入图片描述
    大致功能就是这样,大家也可以根据自己的想法进行拓展。

    keyboard

    先来介绍一下keyboard模块,因为我们要直接获取到截图的图片,肯定不能自己去保存,那样太麻烦,我们要截图完成后自动将图片进行保存,所以我们先监听到键盘的输入。
    先安装keyboard模块,在cmd窗口执行指令:

    pip install keyboard
    

    来体验一下这个模块。

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

    通过该模块的wait函数可以等待键盘输入,函数参数表示等待的热键,意思是说当执行该程序后,程序会一直等待,直到你键盘按下了’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("结束截图")
    

    运行之后,我们正常执行一次截图操作,看下运行结果:

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

    这样监听截图操作就完成了。

    ImageGrab

    这是一个非常优秀的图像处理库,我们通过它来保存截取的图片,先安装一下该模块:

    pip install Pillow
    

    这是PIL(全程: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("结束截图")
    

    使用也很简单,先通过keyboard模块的wait函数等待我们截图,当按下enter后截图结束,使用ImageGrab模块的grabclipboard函数将截图获取出来,该函数的功能是抓取当前剪切板的快照,然后封装成image返回,接着用image的save函数进行保存,若只写文件名,则图片将保存在当前目录。

    现在我们运行一下项目,然后随意截取一张图片:
    在这里插入图片描述
    虽然这样实现了截图的保存,但细心的同学肯定能发现,第一次截图的时候报错了,然而第二次截图的时候,保存的却是第一次截图的内容,这是为什么呢?
    这是因为grabclipboard函数有一个缓存的问题,操作太快,有时候它就会读取上一次的内容,因为第一个没有读取到图像,所以报错了。
    问题找到了,该如何解决呢?既然是操作太快导致读取了缓存,那就让它慢一点呗,我们加上一个时间的延迟就可以了,代码修改如下:

    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("结束截图")
    

    这里在保存剪切板快照之前进行了0.1秒的延迟,就能很好地解决这个问题,使用sleep函数需要导入time模块,下载模块指令:

    pip install time
    

    到这里,截取的图片就保存完毕了。

    baidu-aip

    下面介绍百度的文字识别API。
    关于文字识别API的介绍,大家可以查看百度官方的技术文档,我这里只介绍需要使用到的。

    AipOcr

    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函数通过一个图片的路径将图片转换成二进制数据进行返回,这里的image即为指定图片的二进制数据,有了二进制数据后,就能进行文字识别了。

    • basicGeneral
    • basicAccurate

    这两个方法都可以进行文字识别,不过basicAccurate方法是高精度版本的,具体用哪个方法看大家喜好。

    下面来测试一下我们能否成功提取到图片文字,比如下面的一张图片:
    在这里插入图片描述

    from aip import AipOcr
    
    # 调用百度API识别图片内容
    APP_ID = '18076523'
    API_KEY = 'vlLcZ6VGb88qoAr5IN0OTShw'
    SECRET_KEY = '8KzHr2AvEREYGGwdwIMFZSwTUoPB6LC4'
    
    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中,每个列表由一个字典组成,文本内容的键为words,所以接下来取出文本内容就很简单了:

    from aip import AipOcr
    
    # 3、调用百度API识别图片内容
    APP_ID = '18076523'
    API_KEY = 'vlLcZ6VGb88qoAr5IN0OTShw'
    SECRET_KEY = '8KzHr2AvEREYGGwdwIMFZSwTUoPB6LC4'
    
    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 = '8KzHr2AvEREYGGwdwIMFZSwTUoPB6LC4'
    
    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文字的内容,因为在哪里都可以进行截图操作,所以诸如一些百度文库的地方,无法复制文字内容,就可以通过这种方式曲线复制。

    最后

    最后我想说的是,要把学习当做自己的乐趣,编程是灵活的,自己遇到一些问题的时候,可以想着自己制作一些小工具,既解决了自己的问题,又能够从中学到很多知识,何乐而不为呢?

    展开全文
  • java复制pdf并且往pdf文件中添加内容

    千次阅读 2017-02-22 13:43:56
    import java.io.File;import java.io.FileOutputStream;import com.itextpdf.text.*;import com.itextpdf.text.pdf.PdfWriter;public class CreatePDF { public static void main(String[] args) throws Except...

    import java.io.File;
    import java.io.FileOutputStream;
    import com.itextpdf.text.*;
    import com.itextpdf.text.pdf.PdfWriter;

    public class CreatePDF {
        public static void main(String[] args) throws Exception {
            Document pdfDoc = new Document();
            // 将要生成的 pdf 文件的路径输出流
            FileOutputStream pdfFile = new FileOutputStream(new File(
                    "F:firstPdf.pdf"));

            // pdf 文件中的一个文字段落
            Paragraph paragraph = new Paragraph(
                    "My first PDF file with an image ...");
            Image image = Image.getInstance("images/pdftest.png");

            // 用 Document 对象、File 对象获得 PdfWriter 输出流对象
            PdfWriter.getInstance(pdfDoc, pdfFile);
            pdfDoc.open(); // 打开 Document 文档

            // 添加一个文字段落、一张图片
            pdfDoc.add(paragraph);
            pdfDoc.add(image);

            pdfDoc.close();
        }
    }

     

     

     

     

     

     

    import java.io.File;
    import java.io.FileOutputStream;

    import com.itextpdf.text.Element;
    import com.itextpdf.text.Image;
    import com.itextpdf.text.pdf.BaseFont;
    import com.itextpdf.text.pdf.PdfArray;
    import com.itextpdf.text.pdf.PdfContentByte;
    import com.itextpdf.text.pdf.PdfDictionary;
    import com.itextpdf.text.pdf.PdfName;
    import com.itextpdf.text.pdf.PdfObject;
    import com.itextpdf.text.pdf.PdfReader;
    import com.itextpdf.text.pdf.PdfStamper;

    public class CAPdf{
       

        public static void main(String[] args) throws Exception {
              FileUtil.fileChannelCopy(new File("F:\\firstPdf.pdf"),new File("f:\\firstPdf_temp.pdf"));
              PdfReader reader = new PdfReader("f:firstPdf.pdf");
              PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("f:firstPdf_temp.pdf"));
              PdfContentByte overContent = stamper.getOverContent(1);
             
              //添加文字
              BaseFont font = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
              overContent.beginText();
              overContent.setFontAndSize(font, 10);
              overContent.setTextMatrix(200, 200);
              overContent.showTextAligned(Element.ALIGN_CENTER,"需要添加的文字",180,530,0);
              overContent.endText();
             
              //添加图片
              PdfDictionary pdfDictionary = reader.getPageN(1);
              PdfObject pdfObject = pdfDictionary.get(new PdfName("MediaBox"));
              PdfArray pdfArray = (PdfArray) pdfObject;
              Image image = Image.getInstance("images/pdftest.png");
              image.setAbsolutePosition(100,100);
              overContent.addImage(image);
             
              //添加一个红圈
              overContent.setRGBColorStroke(0xFF, 0x00, 0x00);
              overContent.setLineWidth(5f);
              overContent.ellipse(250, 450, 350, 550);
              overContent.stroke();
              stamper.close();
        }
       
       
    }

    展开全文
  • 通过最新ABBYY FineReader 14中的PDF编辑器,用户现在可以从PDF文档中复制文本、照片和表格到其他应用程序中,这些功能适用于任何类型的PDF文档,即便PDF文档中只有扫描文件。复制文本请遵循以下步骤:1、选中想要...

    通过最新ABBYY FineReader 14中的PDF编辑器,用户现在可以从PDF文档中复制文本、照片和表格到其他应用程序中,这些功能适用于任何类型的PDF文档,即便PDF文档中只有扫描文件。

    FineReader 14

    复制文本请遵循以下步骤:

    1、选中想要复制的文本。

    2、右击选中的文本,在快捷菜单中点击‘复制文本’,或者在出现在文本上面的弹出工具栏上点击其中一个图标。

    复制文本

    3、将文本粘贴到目标应用程序中。

    注意:若要从已经有文本层(不管是原始的还是通过背景识别过程创建)的页面复制文本,则选中该文本,右击,然后从快捷菜单中点击‘复制文本’。

    复制表格请遵循以下步骤:

    1、选中想要复制的表格。

    2、右击选中的表格,在快捷菜单上点击‘复制表格’, 或者在出现在表格上面的弹出工具栏上点击其中一个图标。

    你也可以在复制表格之前使用表格上面的弹出工具栏编辑表格,添加垂直和水平分隔符到表格,删除分隔符、拆分或合并表格单元格。

    复制表格

    注意:复制表格不会修改原文件里的表格。编辑完表格之后,再次点击‘复制表格’。

    3、将表格粘贴到目标应用程序中。

    如果复制的内容与原文档差别很大:

    •如果文档没有文本层,需检查是否选择了正确的OCR语言。

    •如果要复制的页面内容的文本层质量太差,需替换文本层。

    将页面片段复制为图像请遵循以下步骤:

    1、选中想要复制的区域。

    2、右击选中的区域,从快捷菜单中点击‘复制图像’,或者点击出现在该区域上面的弹出工具栏上的其中一个图标,如果选中的区域包含文本,该文本将不会被识别,并且将复制为图像的一部分。

    3、将图像粘贴到目标应用程序。

    有关ABBYY FineReader 14的更多内容,请点击访问ABBYY教程了解更多信息。

    展开全文
  • pdf复制去除换行

    千次阅读 2019-11-10 09:15:29
    2.默认开启了划词翻译,在pdf一样的选中需要复制内容。 3.从有道弹出的内容中,右击全选、复制 4.已经去除了大部分换行,剩余的少量换行手动删除即可 最终效果: 已经基本恢复了原始排版,偶尔几个换行手动删除...

    问题
    因为pdf的排版,从pdf复制的文本会有很多意外的换行
    原始pdf
    直接复制粘贴的效果:
    复制出来的文本

    方法

    1.下载有道词典,Windows、Linux都有
    2.默认开启了划词翻译,在pdf一样的选中需要复制的内容。
    3.从有道弹出的内容中,点击进入翻页页面
    4.在有道翻译的待翻译栏目中点击一次,然后ctrl+a全选,ctrl+c复制即可
    在这里插入图片描述

    最终效果:

    已经基本恢复了原始排版,稍微调即可
    在这里插入图片描述

    展开全文
  • 解决有的PDF内容不能复制的问题

    千次阅读 2014-12-31 18:32:15
    PDF中的内容有的是图片的形式存在导致不能复制里面的内容,这里有个简单的办法: 用cajviewer打开pdf文件,然后用“文字识别”工具就可以解决复制的问题。
  • PDF内容不允许复制的解决方法!

    千次阅读 2014-10-08 00:13:00
    PDF文档的内容不允许复制解决方法! PDF的加密有两个级别: 一个是Owner级别,就是打开文档时需要输入密码PDF Password Remover可以用来破解Owner级别的口令,但是不能用于破解User级别的口令。关于PDF Password ...
  • PDF怎么复制页面

    千次阅读 2019-05-14 14:33:43
    在使用PDF文件的时候,有时需要将文件中的页面进行复制,或者对文件的内容进行复制PDF文件在修改的时候需要借助都PDF编辑器,那么,对于PDF文件该如何进行操作呢,小编今天就来和大家说说PDF怎么复制页面,需要的...
  • 代码如下:可以直接创建一个空的pdf带密码的,但是我想让他为只读,也就是不让复制里面的内容!如何做到 String newPdfUrl = "c:\\Users\\Administrator\\Desktop\\pdfWater\\new.pdf"; Rectangle rect = new ...
  • 一般情况下,复制PDF内容并将其粘贴到网页翻译中时,会有额外的换行符,导致翻译出现乱码,翻译结果简直不忍直视。如下图百度翻译的这样: ![在这里插入图片描述]...
  • PDF怎么转换成Word等一系列的问题,当然PDF复制页面也是相对来说比较难操作的,今天就为大家分享一下PDF复制页面的操作方法,希望对大家有帮助,下面就一起来看吧。 首先需要确定自己的PDF文件是不是文本型PDF...
  • 一般情况下,复制PDF内容并将其粘贴到网页翻译中时,会有额外的换行符,导致翻译出现乱码. 在CopyTranslator中,只需复制一下,悬浮窗就会自动出现翻译结果,不需要额外处理换行问题,翻译文本还能编辑。除此之外,...
  • 复制pdf文字出来是乱码的一种可能的解决方案
  • 有时我们在下载了一些PDF的资料,需要用到文档中的某一段文字内容时,要怎样才能直接复制这些文本呢?为什么有一些文档中的文字无法选中更不能复制呢? 现在PDF文档的使用越来越多,很多文件都是通过不同的方式生成...
  • 免费开源PDF复制格式整理神器

    千次阅读 2019-06-18 14:08:58
    解决PDF复制出来格式错乱等问题,如果实在复制不了,还提供截图识字功能,自己写的小工具,希望对大家有用 自己在写论文时Ctrl C + Ctrl V PDF内容出来格式各种问题,写了点代码来解决问题,顺便封装个GUI 当然...
  • 利用itext7复制PDF文件、添加水印(支持中文) 、设置密码 ** maven依赖 <dependency> <groupId&...
  • 概述 PDF被加密了,可以查看,可以打印,但是复制...2.将pdf文件拖进浏览器,浏览器会显示pdf内容 3.关键的一步:点击打印,选择“另存为pdf” 谷歌会创建一个 xxxxx.pptx.pdf的新pdf文件 4.打开xxxxx.pptx.pd...
  • 为了使PDF中的图为矢量图,在Visio选定图后复制到word再用Adobe Acrobat导出PDF后部分内容缺失 此时将visio图转化为emf再插入word问题未解决。 解决方法: 1.将visio那部分内容提取到另一visio文件,并导出为...
  • 如何复制加密PDF文件的文档信息

    千次阅读 2018-12-27 15:14:32
    在看论文时发现文档被加密了,无法复制...将想复制内容截图,粘贴到OneNote里,然后右键,选择“复制图片中的文本” 方法三: 用Google浏览器,然后打开加密的PDF文件 → 打印 → 另存为PDF,即可解密; 方法四...
  • PDF文件复制文本为乱码

    万次阅读 2018-11-05 23:38:14
    PDF文件可能会出现复制文本粘贴成乱码的现象。原因是PDF中所用的字体无法在电脑中找到,点击编辑器的”文件-属性“,查看字体,如果字体可以下载,可以在网上下载安装,就可以进行复制粘贴。 但有的PDF为保护内容,...
  • 使用FOP技术,配合xsl模板及XML数据生成PDF报表和线上打印业务

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 52,662
精华内容 21,064
关键字:

复制pdf内容