JAVA PDFBOX 读取PDF表格

最近在帮公司做工具,需要读取PDF中表格的数据。网上查了,大部分PDFBox读取的代码都大致相同,一行一行从头读到尾。尝试读取PDF表格的人可能会遇到表格有空数据时,列与列就会对不齐,这样就不能很好地进行数据的处理了。网上看到一个例子,用iText坐标精确读取的例子,参考以后出现了亚洲语种字体不支持,添加了语言包iTextAsian.jar导入字体后,结果发现打印的都是空格无法处理。后找到了PDFBox坐标读取的方法,相当给力。在此过程中了解到有很多人遇到了我这样的问题。所以写下来望对现在还未解决问题还有以后遇到此问题的人提供帮助。

上代码:

package com.pdfbox.util.test;

import org.apache.pdfbox.exceptions.InvalidPasswordException;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.util.PDFTextStripperByArea;

import java.awt.Rectangle;

import java.util.List;


public class ExtractTextByArea
{
    private ExtractTextByArea()
    {

    }

    public static void main( String[] args ) throws Exception
    {
    String file = "H:\123.pdf";
            PDDocument document = null;
            try
            {
                document = PDDocument.load( file);
                if( document.isEncrypted() )
                {
                    try
                    {
                        document.decrypt( "" );
                    }
                    catch( InvalidPasswordException e )
                    {
                        System.err.println( "Error: Document is encrypted with a password." );
                        System.exit( 1 );
                    }
                }
                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" ) );

            }
            finally
            {
                if( document != null )
                {
                    document.close();
                }
            }
    }

}


PDFBox.jar最好用1.7及以上版本的,它包含了fontbox和jempbox等辅助包。希望能帮助一些人解决问题。

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 26
    评论
PDFBox是一个用于处理PDF文档的Java库,可以用来读取和写入PDF文档。PDF表格通常是由表格框架和单元格组成的。因此,要读取PDF表格,我们需要做以下几个步骤: 1. 加载PDF文档 我们可以使用PDFBox库的PDFDocument类来加载PDF文档。示例代码如下: ``` PDDocument document = PDDocument.load(new File("example.pdf")); ``` 2. 遍历文档页面 PDF文档表格通常在页面。我们可以使用PDFBox库的PDFTextStripper类遍历所有页面,并获取页面的所有文本。示例代码如下: ``` PDFTextStripper stripper = new PDFTextStripper(); for (int i = 1; i <= document.getNumberOfPages(); i++) { stripper.setStartPage(i); stripper.setEndPage(i); String text = stripper.getText(document); // 处理页面文本 } ``` 3. 解析表格 在页面文本表格通常是由一系列的单元格组成。我们可以使用正则表达式或其他方法来解析这些单元格,以获取表格的内容和结构。示例代码如下: ``` String[] lines = text.split("\\r?\\n"); for (String line : lines) { String[] cells = line.split("\t"); for (String cell : cells) { // 处理单元格内容 } } ``` 4. 关闭文档 在读取PDF文档后,我们需要关闭它以释放资源。示例代码如下: ``` document.close(); ``` 这些步骤可以帮助我们读取PDF表格。但是,请注意,这种方法可能会在复杂的表格结构出现问题。对于更复杂的表格,我们可能需要使用PDFBox库的其他功能,例如PDF表格提取器(PDFBox Table Extractor)。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值