Java 提取PDF文本內(nèi)容

概述

一般來說,我們無法對PDF文檔格式的內(nèi)容進(jìn)行修改編輯,但當(dāng)我們確有此需求時(shí),可通過提取文本內(nèi)容的方式來實(shí)現(xiàn)。本文就將介紹如何通過Java代碼來提取PDF文檔中的文本內(nèi)容。

此教程用到的第三方控件是Free Spire.PDF for Java(免費(fèi)版)。根據(jù)不同需求,它可以支持以下三方面的提取功能。

●? 提取PDF文檔中的所有文本內(nèi)容

●? 提取PDF指定頁面的文本內(nèi)容

●? 提取PDF指定區(qū)域的文本內(nèi)容

Jar包的獲取及導(dǎo)入

在運(yùn)行代碼前,需將Free Spire.PDF for Java控件中的Jar包導(dǎo)入IDEA中。導(dǎo)入方式有兩種:其一,在官網(wǎng)上下載產(chǎn)品包,解壓后將lib文件夾下的Spire.Pdf.jar手動導(dǎo)入IDEA;其二,在IDEA中創(chuàng)建一個(gè)Maven項(xiàng)目,然后在pom.xml文件中鍵入以下代碼,最后點(diǎn)擊“Import Changes”即可。

<repositories>

???????<repository>

???????????<id>com.e-iceblue</id>

???????????<url>http://repo.e-iceblue.cn/repository/maven-public/</url>

???????</repository>

??? </repositories>

<dependencies>

??? <dependency>

???????<groupId>e-iceblue</groupId>

???????<artifactId>spire.pdf.free</artifactId>

???????<version>3.9.0</version>

??? </dependency>

</dependencies>

示例代碼

示例1 提取PDF文檔中的所有文本內(nèi)容

import com.spire.pdf.PdfDocument;

import com.spire.pdf.PdfPageBase;

import java.io.*;

public class ExtractAllText {

public static void main(String[] args) {

//創(chuàng)建PdfDocument實(shí)例

PdfDocument doc=new PdfDocument();

//加載PDF文檔

doc.loadFromFile("C:\\Users\\Test1\\Desktop\\Sample.pdf");

//創(chuàng)建StringBuilder實(shí)例

StringBuilder sb=new StringBuilder();

PdfPageBase page;

//遍歷PDF頁面,獲取每個(gè)頁面的文本并添加到StringBuilder對象

for(int i=0;i

page=doc.getPages().get(i);

sb.append(page.extractText(true));

??????? }

FileWriter writer;

try {

//將StringBuilder對象中的文本寫入到文本文件

writer = new FileWriter("output/ExtractText.txt");

writer.write(sb.toString());

writer.flush();

??????? }?catch (IOExceptione) {

??????????? e.printStackTrace();

??????? }

??????? doc.close();

??? }

}

提取效果:

示例2 提取PDF指定頁面的文本內(nèi)容

import com.spire.pdf.*;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

public class ExtractTextFromParticularPage {

public static void main(String[] args) throws IOException{

//加載PDF文檔

PdfDocument pdf = new PdfDocument();

pdf.loadFromFile("C:\\Users\\Test1\\Desktop\\Sample.pdf");

//創(chuàng)建.txt文件,用于保存提取的文本

String result = "output/extractTextFromAParticularPage.txt";

File file=?new File(result);

if(!file.exists()){

??????????? file.delete();

??????? }

file.createNewFile();

FileWriter fw=?new FileWriter(file,true);

BufferedWriter bw=?new BufferedWriter(fw);

//獲取第一頁的文本

PdfPageBase page = pdf.getPages().get(0);

String text = page.extractText(true);

//String text = page.extractText(false);

??????? bw.write(text);

??????? bw.flush();

???? ???bw.close();

??????? fw.close();

??? }

}

提取效果:

示例3 提取PDF指定區(qū)域的文本內(nèi)容

import com.spire.pdf.*;

import java.awt.geom.Rectangle2D;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

public class ExtractTextFromSpecificArea {

public static void main(String[] args) throws IOException{

//加載PDF文檔

PdfDocument pdf = new PdfDocument();

pdf.loadFromFile("C:\\Users\\Test1\\Desktop\\Sample.pdf");

//創(chuàng)建.txt文件,用于保存提取的文本

File file=new File("output/extractTextFromASpecificArea.txt");

if(!file.exists()){

??????????? file.delete();

??????? }

?file.createNewFile();

FileWriter fw=?new FileWriter(file,true);

BufferedWriter bw=?new BufferedWriter(fw);

//獲取第一頁

PdfPageBase page = pdf.getPages().get(0);

//提取第一頁指定區(qū)域的文本

String text = page.extractText(new Rectangle2D.Float(80, 20,500, 110));

bw.write(text);

bw.flush();

bw.close();

fw.close();

??? }

}

提取效果:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 一、前言及環(huán)境構(gòu)建 SmartArt圖形常用于將文字量少、層次較明顯的文本轉(zhuǎn)換為具有各種附屬關(guān)系、并列關(guān)系等關(guān)系結(jié)...
    Tina_Tang閱讀 816評論 0 0
  • 在一篇文章里,配有與文本信息相得益彰的圖片,不僅能夠活躍與美化版面,同時(shí)也有利于提高文章的可讀性和閱讀效果,...
    Tina_Tang閱讀 1,541評論 0 3
  • 程序猿一枚,工作小半年,對Java的理解已經(jīng)遠(yuǎn)超剛剛離開學(xué)校是的那一枚小白了。身邊的學(xué)弟陸陸續(xù)續(xù)入坑,不過經(jīng)常找我...
    黃小丶平閱讀 452評論 0 0
  • 在日常辦公中,掌握對PDF文檔的操作能力尤為重要。在前文中我使用Java程序來演示過如何合并和拆分PDF文檔。本文...
    Tina_Tang閱讀 1,139評論 0 0
  • 漸變的面目拼圖要我怎么拼? 我是疲乏了還是投降了? 不是不允許自己墜落, 我沒有滴水不進(jìn)的保護(hù)膜。 就是害怕變得面...
    悶熱當(dāng)乘涼閱讀 4,347評論 0 13