精华内容
下载资源
问答
  • 在评论中,OP澄清说他从pdf文件中的表中找到文本值他要提取提供X和Y坐标因此,虽然这个问题最初听起来像是从PDF中通用提取表格数据(至少可能很困难),但它实际上主要是从坐标给出的页面上的矩形区域中提取文本。...

    在评论中,OP澄清说他从pdf文件中的表中找到文本值他要提取

    提供X和Y坐标

    因此,虽然这个问题最初听起来像是从PDF中通用提取表格数据(至少可能很困难),但它实际上主要是从坐标给出的页面上的矩形区域中提取文本。

    这可以使用您提到的任何一个库(当然也包括其他库)。

    iText的

    要限制要从中提取文字的区域,您可以使用RegionTextRenderFilter中的FilteredTextRenderListener,例如:

    /**

    * Parses a specific area of a PDF to a plain text file.

    * @param pdf the original PDF

    * @param txt the resulting text

    * @throws IOException

    */

    public void parsePdf(String pdf, String txt) throws IOException {

    PdfReader reader = new PdfReader(pdf);

    PrintWriter out = new PrintWriter(new FileOutputStream(txt));

    Rectangle rect = new Rectangle(70, 80, 490, 580);

    RenderFilter filter = new RegionTextRenderFilter(rect);

    TextExtractionStrategy strategy;

    for (int i = 1; i <= reader.getNumberOfPages(); i++) {

    strategy = new FilteredTextRenderListener(new LocationTextExtractionStrategy(), filter);

    out.println(PdfTextExtractor.getTextFromPage(reader, i, strategy));

    }

    out.flush();

    out.close();

    reader.close();

    }

    (来自iText in Action,第2版的ExtractPageContentArea样本)

    请注意,iText会根据内容流中的基本文本块提取文本,而不是基于此类块中的每个字形。因此,如果只有最细小的部分在该区域内,则处理整个块。

    这可能适合您,也可能不适合您。

    如果遇到的问题是提取的内容比您想要的多,那么您应该事先将这些块拆分成它们的构成字形。 This stackoverflow answer解释了如何做到这一点。

    PDFBox的

    要限制要从中提取文字的区域,您可以使用PDFTextStripperByArea,例如:

    PDDocument document = PDDocument.load( args[0] );

    if( document.isEncrypted() )

    {

    document.decrypt( "" );

    }

    PDFTextStripperByArea stripper = new PDFTextStripperByArea();

    stripper.setSortByPosition( true );

    Rectangle rect = new Rectangle( 10, 280, 275, 60 );

    stripper.addRegion( "class1", rect );

    List allPages = document.getDocumentCatalog().getAllPages();

    PDPage firstPage = (PDPage)allPages.get( 0 );

    stripper.extractRegions( firstPage );

    System.out.println( "Text in the area:" + rect );

    System.out.println( stripper.getTextForRegion( "class1" ) );

    (来自PDFBox 1.8.8示例的ExtractTextByArea)

    展开全文
  • java读取pdf文件内容

    2009-08-28 01:20:00
    java读取pdf文件内容 在java中要读取pdf文件内容,我们可以借助第三方软件实现。常用是xpdf,本文就简单介绍在linux下如何安装xpdf,及在java中如何利用xpdf读取pdf文件内容。一.安装xpdf 在fc系列下,不用安装...

    java读取pdf文件内容
             在java中要读取pdf文件内容,我们可以借助第三方软件实现。常用的是xpdf,本文就简单介绍在linux下如何安装xpdf,及在java中如何利用xpdf读取pdf文件内容。
    一.安装xpdf

           在fc系列下,不用安装,可以直接yum,但是笔者建议还是下载安装的好,因为笔者曾经碰到过这样的问题,客户服务器上的xpdf是yum安装的,有一些特殊的pdf文件就无法预览,但是将yum安装的xpdf卸载,然后下载xpdf安装程序,再重新安装后,就可以了。
    1.下载
    ok,我们需要下载的xpdf安装包主要有三个:

    主程序:ftp://ftp.foolabs.com/pub/xpdf/xpdf-3.01pl2-linux.tar.gz
    简体中文支持:ftp://ftp.foolabs.com/pub/xpdf/xpdf-chinese-simplified.tar.gz
    繁体中文支持:ftp://ftp.foolabs.com/pub/xpdf/xpdf-chinese-traditional.tar.gz

    2.安装部署
    (1)进入下载目录,将主程序解压至/usr,也可以是其他地方,根据个人情况而定。
    #tar zvfx xpdf-3.01pl2-linux.tar.gz -C /usr
    #cd usr然后将其重命名,这样看起来简单点
    mv xpdf-3.01pl2-linux/ xpdf(2)建立中文支持。回到下载目录,依次执行:
    #tar zvfx xpdf-chinese-simplified.tar.gz -C /usr/xpdf
    #mv  /usr/xpdf/xpdf-chinese-simplified /usr/xpdf/chinese-simplified
    #tar zvfx xpdf-chinese-traditional.tar.gz -C /usr/xpdf
    #mv  /usr/xpdf/xpdf-chinese-traditional /usr/xpdf/chinese-traditional(3)配置环境
    #vi /etc/bashrc增加如下内容
    export PATH=/usr/xpdf/:$PATH
    确保重启机器后,在控制台输入xpdf不会提示找不到命令或文件即可。
    (4)资源配置
    #cd /usr/xpdf
    #cp sample-xpdfrc xpdfrc
    #vi xpdfrc*在文件开始处增加如下内容(将/usr/xpdf替换为xpdf的实际路径)*
    #----- begin Chinese Simplified support package (2004-jul-27)
    cidToUnicode Adobe-GB1 "/usr/xpdf/chinese-simplified/Adobe-GB1.cidToUnicode"
    unicodeMap         ISO-2022-CN "/usr/xpdf/chinese-simplified/ISO-2022-CN.unicodeMap"
    unicodeMap         EUC-CN "/usr/xpdf/chinese-simplified/EUC-CN.unicodeMap"
    unicodeMap         GBK "/usr/xpdf/chinese-simplified/GBK.unicodeMap"
    cMapDir Adobe-GB1 "/usr/xpdf/chinese-simplified/CMap"
    toUnicodeDir "/usr/xpdf/chinese-simplified/CMap"
    #displayCIDFontTT Adobe-GB1 /usr/..../gkai00mp.ttf
    #----- end Chinese Simplified support package
    #----- begin Chinese Traditional support package (2004-jul-27)
    cidToUnicode Adobe-CNS1 "/usr/xpdf/chinese-traditional/Adobe-CNS1.cidToUnicode"
    unicodeMap Big5 "/usr/xpdf/chinese-traditional/Big5.unicodeMap"
    unicodeMap Big5ascii "/usr/xpdf/chinese-traditional/Big5ascii.unicodeMap"
    cMapDir Adobe-CNS1 "/usr/xpdf/chinese-traditional/CMap"
    toUnicodeDir "/usr/xpdf/chinese-traditional/CMap"
    #displayCIDFontTT Adobe-CNS1 /usr/..../bkai00mp.ttf
    #----- end Chinese Traditional support package然后再执行:
    #cp xpdfrc /usr/local/etc/好了,到这里我们也就安装完成了。下面介绍如何利用xpdf读取pdf文件的内容

    二.利用xpdf读取pdf文件的内容

    方法很简单,利用著名的Runtime.getRuntime()即可,如下:     /** *//**
         * @param filePath  pdf文件路径
         * @return
         */
        public String getPdfContent(String filePath)...{
            String excute="pdftotext";

            String[] cmd=new String[]...{excute, "-enc", "UTF-8", "-q", filePath,"-"};
            Process p=null;
            try ...{
                p=Runtime.getRuntime().exec(cmd);
            } catch (IOException e) ...{
                e.printStackTrace();
            }

            BufferedInputStream bis=new BufferedInputStream(p.getInputStream());

            InputStreamReader reader=null;

            try ...{
                reader=new InputStreamReader(bis,"UTF-8");
            } catch (UnsupportedEncodingException e1) ...{
                e1.printStackTrace();
            }

            StringBuffer sb=new StringBuffer();

            try ...{
                BufferedReader br = new BufferedReader(reader);
                String line = br.readLine();           
                sb = new StringBuffer();
                while (line != null) ...{
                    sb.append(line);
                    sb.append(" ");
                    line = br.readLine();
                }
            } catch (Exception e) ...{
                e.printStackTrace();
            }
           
            return sb.toString();
        }

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hbcui1984/archive/2007/06/01/1634268.aspx

    展开全文
  • JAVA读取PDF文件

    2010-02-03 22:27:00
    java中要读取pdf文件内容,我们可以借助第三方软件实现。常用是xpdf,本文就简单介绍在linux下如何安装xpdf,及在java中如何利用xpdf读取pdf文件内容。一.安装xpdf 在fc系列下,不用安装,可以直接yum,但是...

    在java中要读取pdf文件内容,我们可以借助第三方软件实现。常用的是xpdf,本文就简单介绍在linux下如何安装xpdf,及在java中如何利用xpdf读取pdf文件内容。
    一.安装xpdf

           在fc系列下,不用安装,可以直接yum,但是笔者建议还是下载安装的好,因为笔者曾经碰到过这样的问题,客户服务器上的xpdf是yum安装的,有一些特殊的pdf文件就无法预览,但是将yum安装的xpdf卸载,然后下载xpdf安装程序,再重新安装后,就可以了。
    1.下载
    ok,我们需要下载的xpdf安装包主要有三个:

    主程序:ftp://ftp.foolabs.com/pub/xpdf/xpdf-3.01pl2-linux.tar.gz
    简体中文支持:ftp://ftp.foolabs.com/pub/xpdf/xpdf-chinese-simplified.tar.gz
    繁体中文支持:ftp://ftp.foolabs.com/pub/xpdf/xpdf-chinese-traditional.tar.gz

    2.安装部署
    (1)进入下载目录,将主程序解压至/usr,也可以是其他地方,根据个人情况而定。
    #tar zvfx xpdf-3.01pl2-linux.tar.gz -C /usr
    #cd usr然后将其重命名,这样看起来简单点
    mv xpdf-3.01pl2-linux/ xpdf(2)建立中文支持。回到下载目录,依次执行:
    #tar zvfx xpdf-chinese-simplified.tar.gz -C /usr/xpdf
    #mv  /usr/xpdf/xpdf-chinese-simplified /usr/xpdf/chinese-simplified
    #tar zvfx xpdf-chinese-traditional.tar.gz -C /usr/xpdf
    #mv  /usr/xpdf/xpdf-chinese-traditional /usr/xpdf/chinese-traditional(3)配置环境
    #vi /etc/bashrc增加如下内容
    export PATH=/usr/xpdf/:$PATH
    确保重启机器后,在控制台输入xpdf不会提示找不到命令或文件即可。
    (4)资源配置
    #cd /usr/xpdf
    #cp sample-xpdfrc xpdfrc
    #vi xpdfrc*在文件开始处增加如下内容(将/usr/xpdf替换为xpdf的实际路径)*
    #----- begin Chinese Simplified support package (2004-jul-27)
    cidToUnicode Adobe-GB1 "/usr/xpdf/chinese-simplified/Adobe-GB1.cidToUnicode"
    unicodeMap         ISO-2022-CN "/usr/xpdf/chinese-simplified/ISO-2022-CN.unicodeMap"
    unicodeMap         EUC-CN "/usr/xpdf/chinese-simplified/EUC-CN.unicodeMap"
    unicodeMap         GBK "/usr/xpdf/chinese-simplified/GBK.unicodeMap"
    cMapDir Adobe-GB1 "/usr/xpdf/chinese-simplified/CMap"
    toUnicodeDir "/usr/xpdf/chinese-simplified/CMap"
    #displayCIDFontTT Adobe-GB1 /usr/..../gkai00mp.ttf
    #----- end Chinese Simplified support package
    #----- begin Chinese Traditional support package (2004-jul-27)
    cidToUnicode Adobe-CNS1 "/usr/xpdf/chinese-traditional/Adobe-CNS1.cidToUnicode"
    unicodeMap Big5 "/usr/xpdf/chinese-traditional/Big5.unicodeMap"
    unicodeMap Big5ascii "/usr/xpdf/chinese-traditional/Big5ascii.unicodeMap"
    cMapDir Adobe-CNS1 "/usr/xpdf/chinese-traditional/CMap"
    toUnicodeDir "/usr/xpdf/chinese-traditional/CMap"
    #displayCIDFontTT Adobe-CNS1 /usr/..../bkai00mp.ttf
    #----- end Chinese Traditional support package然后再执行:
    #cp xpdfrc /usr/local/etc/好了,到这里我们也就安装完成了。下面介绍如何利用xpdf读取pdf文件的内容

    二.利用xpdf读取pdf文件的内容

    方法很简单,利用著名的Runtime.getRuntime()即可,如下:     /** *//**
         * @param filePath  pdf文件路径
         * @return
         */
        public String getPdfContent(String filePath)...{
            String excute="pdftotext";

            String[] cmd=new String[]...{excute, "-enc", "UTF-8", "-q", filePath,"-"};
            Process p=null;
            try ...{
                p=Runtime.getRuntime().exec(cmd);
            } catch (IOException e) ...{
                e.printStackTrace();
            }

            BufferedInputStream bis=new BufferedInputStream(p.getInputStream());

            InputStreamReader reader=null;

            try ...{
                reader=new InputStreamReader(bis,"UTF-8");
            } catch (UnsupportedEncodingException e1) ...{
                e1.printStackTrace();
            }

            StringBuffer sb=new StringBuffer();

            try ...{
                BufferedReader br = new BufferedReader(reader);
                String line = br.readLine();           
                sb = new StringBuffer();
                while (line != null) ...{
                    sb.append(line);
                    sb.append(" ");
                    line = br.readLine();
                }
            } catch (Exception e) ...{
                e.printStackTrace();
            }
           
            return sb.toString();
        }
     

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/tropica/archive/2007/12/17/1943071.aspx

    展开全文
  • Hello,个周末没能搞事情,被一个代码需求给绊住了:朋友在平时工作中会经常重复性地打开不同PDF文件,选取其中特定几组信息复制粘贴到不同Word文档中,完成一份PDF文件平均耗时15分钟,想试试Python代码能否...

    Hello,上个周末没能搞事情,被一个代码需求给绊住了:朋友在平时工作中会经常重复性地打开不同PDF文件,选取其中特定的几组信息复制粘贴到不同的Word文档中,完成一份PDF文件平均耗时15分钟,想试试Python代码能否帮忙。

    b80f951bb5f7fd1ad217f712c6794120.pngff72d953ad570030c8b8aa55e52d32b8.png由于其涉及文件隐私,将需求简化如下:我这提供一份PDF版《笨办法学Python》,想把其中第五页的第1段和第4段填充到Word文档 “笔记.docx” 特定位置:46fd5097f78d134288c3b58e1ee4d805.png

    上图为PDF中的目标文字;下图为Word文档要填充的位置:

    e79e869c58471d363e432bf2ac9be867.png思路

    首先利用PDFMiner模块解析PDF文件,转化成PDF内容的文本列表;根据目标位置在列表中提取目标文本;利用Python处理Word文档的库docx-mailmerge模块,进行文本填充。

    PDFMiner模块

    PDFMiner是一个专注于从PDF文档中提取、分析文本信息的工具。它不仅可以获取特定页码特定位置处的信息,也能获得字体等信息。其工作原理如图所示:

    8bb610e6f352df944c3fffebc35f05ff.png

    看不懂原理图没关系,我们关心的是应用问题。首先安装PDFMiner,注意Python3要安装pdfminer3k,可以通过pip install pdfminer3k进行安装

    解析PDF涉及代码步骤较多,先不展开,文末提供注释源码供参考。通过PDFMiner解析,文本内容按区域存到不同页码的文本list中;每一页又作为元素存入整个文档的list中。即假设content代表整个PDF文本信息,content[0]为第一页信息,content[4]即我们想要的第五页信息。而第五页中,按照list元素顺序,我们想要的第一段和第四段就可以通过content[4][1]和content[4][4]拿到了:

    b458085b4e313ec46757692ffe22572f.png

    docx-mailmerge模块

    这个模块的应用类似于你先在Word文档中特定位置去定义好变量,之后在代码中通过MailMerge函数为变量赋值

    首先是安装:pip install docx-mailmerge

    接下来去Word文档中定义要插入的变量,在要插入文本的位置选择 “插入”→“文档部件”→“域”

    ec564ff5d9ee12a97ef573783d6c1f15.png

    在弹出的窗口中选择mailmerge变量,中文直译“邮件合并”,域名是自己定义的变量名,这里我用firstTED 来代表第一段:

    b058c22e97efdafee3ab354bb41ecae4.png

    设置完成后会看到<>出现在Word文档中。同理,我们设置fourthTED来代表第四段,最终结果如图:

    85bfef8960843adbfda8d7ddadf9d7ec.png

    至此,Word文档中变量定义完成,继续回到代码中。我们已经拿到了第一段和第四段的文本,接下来就是将其和新定义的firstTED 和 fourthTED 融合:

    template = "../读书笔记.docx"document = MailMerge(template)
    document.merge(firstTED = content[4][1],fourthTED = content[4][4],
    )
    document.write("读书笔记更新.docx")

    最终在PDF文件旁会生成新的“读书笔记更新.docx”:

    ff080dc90566e8572e80e9c63396eff9.png

    其内容如图:

    5ca7a4969a7c981fbd4f74e88a4b6021.png

    目标达成!写给朋友的初版代码,对于能拿到的文本信息准确度也是很高的,而且可以批量处理文档。代码运行几秒钟,便将人力几个小时的工作完成了,余下的是相对轻松的校验和修正。可能你一天的繁琐工作,对代码而言就是几秒的事情

    回顾

    就实现效果来看,达到了预期,但仍有待提高。最终效果与PDF文件的格式是否规范有直接关系,有许多扫描件PDF文档每页都像是图片,就无法通过PDFMiner顺利获取到文本信息。后续我们将尝试先把PDF转图片,再通过OCR识别图片中文字信息的思路来搞定

    此外,为了展示,选用的PDF和Word文档以及要插入的信息都较规范简洁,在实际需求中,因为批量操作,也会遇到各种大小问题,这些都要在实战中去不断完善。

    代码下载

    后台回复 文档处理 获取演示用代码下载

    最后附上朋友对初版代码的反应,令人很有成就感!

    a9335fcd0d76801bdb02764247405368.png

    正在学Python或水平挺不错的朋友,不妨问问身边朋友有没有什么繁琐的工作可以用代码改进,如果有,反手甩他一个代码,也是很不错的体验哦~

    618409d40a4067a52fab8972ac0d18f2.pnga8b03921636f7871a969805699373f82.png向上滑动ed55b20589649bbdb553b07d12200420.pngb47d728dcd3c9c22366cd2b946b6f7cf.png文章好看就点这里37c3d047a659c56fb7d0563e6a77407e.gif
    展开全文
  • 对打开和转换ceb进行进一步优化,转换ceb文件成pdf,根据pdf的关键字读取文档相关信息,Java ceb转pdf(包含web用浏览器打开ceb和手机端打开转换后pdf,ceb转换pdf的在线网站和工具软件),有使用各方面细节说明和...
  • 就用到了读取pdf内容,合并pdf文件,以及拆分pdf处理。废话不多说,直接代码。import java.io.File;import java.io.IOException;import java.util.List;import org.apache.pdfbox.multipdf.Splitter;import org....
  • 在某一页pdf中获取某一块区域的内容和图片 这样就能获取想要的东西了 代码 这里需要注意maven 是两部分 <!-- pdf转换 --> <dependency> <groupId>e-iceblue</groupId> <...
  • 我多年前曾在Acrobat工作,并在初始版本中使用了文本搜索工具,因此我对文本编码问题有了相当深刻理解.主要问题是PDF每个字符串都以某种方式编码.这是因为PDF是在Unicode通常可用之前制作,并且在PostScript...
  • 在《全民一起VBA 实战篇》中,我们讲到过怎样使用 Acrobat 官方控件,在...事实,Acrobat官方控件本身就支持 PDF 内容读取,而且毫无疑问,其解读能力是最权威、最准确。但遗憾是,只有安装了价格昂贵专业...
  • 我想阅读BLOB内容,然后编辑并输出编辑过的内容.我需要做的编辑是:>在BLOB内容上方添加标题>在每页添加水印>在每个页面添加页脚然后我需要输出文件,而不会在响应流中创建任何物理文件.我尝试使用itext...
  • 在实际应用中有这么一个场景,用户希望在页面有一个下载按钮,点击按钮时把当前页的内容生产一个PDF文件下载下来。这个需求有两种表现形式,一种是当用户点击按钮时直接在浏览器中弹出保存框下载PDF文件,另一种是...
  • 在实际应用中有这么一个场景,用户希望在页面有一个下载按钮,点击按钮时把当前页的内容生产一个PDF文件下载下来。这个需求有两种表现形式,一种是当用户点击按钮时直接在浏览器中弹出保存框下载PDF文件,另一种是...
  • JXL读取excel,然后把读到的内容写到pdf中;但是没有对excel中合并的单元格进行处理。以后有时间再研究一下补吧!把写的代码发上来,希望能帮有用的人;如果有更好的方法或建议,请留言一起学习; ...
  • 今天快下班的时候收到了一个群友的问题,大意是读取文本文件中的内容,找出文件中的手机号和邮箱,我自己写了一个读取文档的内容的正则查询示例,用于匹配文件中是否含有邮箱或者手机号,这个等于是对之前的文本处理...
  • 第四讲 Java 的异常处理和 输入输出流 1 课程内容安排 Android JSP和Servlet 应用编程 Java 图形 异常处理与 线程... 如何读取硬盘上的某个文件内容 3. 如何知道文件系统中有哪些目录和子目录 4. 如何往硬盘上写文件 5.
  • Java2核心技术第7版全两卷.pdf中文高清

    千次下载 热门讨论 2012-09-14 14:22:28
    包括:多线程、集合框架、网络api、数据库编程、分布式对象等,深入探究了swing、java 2d api、javabean、java安全模式、xml、注释、元数据等主题,同时涉及本地方法、国际化以及jdk 5.0的内容。本书适合软件开发...
  • 10.2.1、访问四种属性范围的内容 10.2.2、调用内置对象操作 10.2.3、接收请求参数 10.3、集合操作 10.4、在MVC中应用表达式语言 10.5、运算符 10.6、本章摘要 10.7、开发实战讲解(基于Oracle数据库) 第11...
  • java范例开发大全(pdf&源码)

    热门讨论 2013-07-04 13:04:40
    实例137 读取PDF文件中的内容 203 实例138 用iText生成Word文件 205 实例139 利用POI读取Word文件中的内容 208 7.3 字符流 209 实例140 按顺序创建文件 210 实例141 按顺序读取文件 211 实例142 追加文件内容 211 ...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
     在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note将被发送给消息发送者,发送一个e-mail通知给由recipient参数确定的e-...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 132
精华内容 52
关键字:

java读取pdf上的内容

java 订阅