`

java读取pdf(可分页读取)

 
阅读更多

此文非原创,来源:http://www.2cto.com/kf/201109/104526.html

 

需要pdfbox和log4j的包
举个例子:
import org.pdfbox.pdfparser.*;
import org.pdfbox.util.PDFTextStripper;
import java.io.*;
/**
 * 测试pdfbox
 * @author kingfish
 * @version 1.0
 */
public class TestPdf {
  public static void main(String[] args) throws Exception{
    FileInputStream fis = new FileInputStream("c://intro.pdf");
    PDFParser p = new PDFParser(fis);
    p.parse();   
    PDFTextStripper ts = new PDFTextStripper();   
    String s = ts.getText(p.getPDDocument());
    System.out.println(s);
    fis.close();
  }
}

--------------------------------------------------------------------------------

import java.io.*;
import java.util.*;
import com.etymon.pj.*;
import com.etymon.pj.object.*;
import com.etymon.pj.exception.*;
/**
* This is a wrapper for the Pj PDF parser
*/
public class PjWrapper {
Pdf pdf;
PjCatalog catalog;
PjPagesNode rootPage;
public PjWrapper(String PdfFileName,String TextFileName)throws
IOException, PjException {
pdf = new Pdf(PdfFileName);
// hopefully the catalog can never be a reference...
catalog = (PjCatalog) pdf.getObject(pdf.getCatalog());
// root node of pages tree is specified by a reference in the catalog
rootPage = (PjPagesNode) pdf.resolve(catalog.getPages());
}
public static void main (String [] args) throws IOException, PjException
{
/*PjWrapper testWrapper = new PjWrapper(args[0]);
LinkedList textList = testWrapper.getAllText();*/
}
/**
* Returns as much text as we can extract from the PDF.
* This currently includes:
*
* NOTE: Pj does not support LZW, so some text in some PDF's may not
* be indexable
*/
public LinkedList getAllText() throws PjException {
LinkedList stringList = new LinkedList();
Iterator streamIter = getAllContentsStreams().iterator();
PjStream stream;
String streamData;
String streamText;
boolean moreData;
int textStart, textEnd;
//System.out.println("Going through streams...");
while(streamIter.hasNext()) {
//System.out.println("Getting next stream");
stream = (PjStream) streamIter.next();
//System.out.println("Adding text from stream with filter: "
+getFilterString(stream);
stream = stream.flateDecompress();
//System.out.println("Adding text from stream with filter
afterdecompress: " + getFilterString(stream));
streamData = new String(stream.getBuffer());
streamText = new String();
moreData = true;
textStart = textEnd = 0;
while(moreData) {
if ((textStart = streamData.indexOf('(', textEnd + 1)) < 0) {
moreData = false;
break;
}
if ((textEnd = streamData.indexOf(')', textStart + 1)) < 0) {
moreData = false;
break;
}
try {
streamText +=
PjString.decodePdf(streamData.substring(textStart,textEnd + 1));
} catch (Exception e) {
System.out.println("malformed string: " +
streamData.substring(textStart, textEnd + 1));
}
}
//if(streamText.equals("inserted text"))
System.out.println(streamText);
if (streamText.length() > 0)
stringList.add(streamText);
}
return stringList;
}
public static String getFilterString(PjStream stream) throws PjException
{
String filterString = new String();
PjObject filter;
//System.out.println("getting filter from dictionary");
if ((filter = stream.getStreamDictionary().getFilter()) == null) {
//System.out.println("Got null filter");
return "";
}
//System.out.println("got it");
// filter should either be a name or an array of names
if (filter instanceof PjName) {
//System.out.println("getting filter string from simple name");
filterString = ((PjName) filter).getString();
} else {
//System.out.println("getting filter string from array of names");
Iterator nameIter;
Vector nameVector;
if ((nameVector = ((PjArray) filter).getVector()) == null) {
//System.out.println("got null vector for list of names");
return "";
}
nameIter = nameVector.iterator();
while (nameIter.hasNext()) {
filterString += ((PjName) nameIter.next()).getString();
if (nameIter.hasNext())
filterString += " ";
}
}
//System.out.println("got filter string");
return filterString;
}
/**
* Performs a post-order traversal of the pages tree
* from the root node and gets all of the contents streams
* @returns a list of all the contents of all the pages
*/
public LinkedList getAllContentsStreams() throws
InvalidPdfObjectException {
return getContentsStreams(getAllPages());
}
/**
* Get contents streams from the list of PjPage objects
* @returns a list of all the contents of the pages
*/
public LinkedList getContentsStreams(LinkedList pages) throws
InvalidPdfObjectException {
LinkedList streams = new LinkedList();
Iterator pageIter = pages.iterator();
PjObject contents;
while(pageIter.hasNext()) {
contents = pdf.resolve(((PjPage)pageIter.next()).getContents());
// should only be a stream or an array of streams (or refs to
streams)
if (contents instanceof PjStream)
streams.add(contents);
else{
Iterator streamsIter = ((PjArray)contents).getVector().iterator();
while(streamsIter.hasNext())
streams.add(pdf.resolve((PjObject)streamsIter.next()));
}
}
return streams ;
}
/**
* Performs a post-order traversal of the pages tree
* from the root node.
* @returns a list of all the PjPage objects
*/
public LinkedList getAllPages() throws InvalidPdfObjectException {
LinkedList pages = new LinkedList();
getPages(rootPage, pages);
return pages;
}
/**
* Performs a post-order traversal of the pages tree
* from the node passed to it.
* @returns a list of all the PjPage objects under node
*/
public void getPages(PjObject node, LinkedList pages) throws
InvalidPdfObjectException {
PjPagesNode pageNode = null;
// let's hope pdf's don't have pointers to pointers
if (node instanceof PjReference)
pageNode = (PjPagesNode) pdf.resolve(node);
else
pageNode = (PjPagesNode) node;
if (pageNode instanceof PjPage) {
pages.add(pageNode);
return;
}
// kids better be an array and not a reference to one
Iterator kidIterator = ((PjArray) ((PjPages)
pageNode).getKids()).getVector().iterator();
while(kidIterator.hasNext()) {
getPages((PjObject) kidIterator.next(), pages);
}
}
public Pdf getPdf() {
return pdf;
}
}

分享到:
评论

相关推荐

    JAVA读取PDF中的文件内容需要的jar

    在这个场景中,"JAVA读取PDF中的文件内容需要的jar"指的是这些库的Java Archive (JAR) 文件,它们包含了处理PDF文件所需的类和方法。 Apache PDFBox是Apache软件基金会的一个开源项目,提供了丰富的API来读取、写入...

    java集成pdf.js 在线阅览pdf文件

    当用户请求查看PDF时,这个接口会读取服务器上的PDF文件,并将其内容作为二进制流返回。 4. **前端交互**:在HTML页面中,使用`&lt;script&gt;`标签引入PDF.js库,并配置相应的配置项。例如,设置PDF文件的URL、初始页码...

    JAVA删除PDF空白页

    对于删除PDF空白页,我们可以通过读取PDF页面的内容,检查其是否为空,然后决定是否删除。iTextPDF中的`PdfReader`和`PdfStamper`类是关键。`PdfReader`用于打开PDF文档,获取所有页面的信息,而`PdfStamper`则可以...

    java将PDF文件转成png图片格式

    2. **读取PDF**:使用`PdfReader`类读取PDF文件,创建一个`PdfDocument`对象。 ```java PdfReader reader = new PdfReader("path_to_your_pdf_file"); PdfDocument pdfDoc = new PdfDocument(reader); ``` 3. *...

    Java Excel转为PDF(aspose)工具类 复造轮子

    本篇将详细讲解如何利用Aspose.Cells来实现Java中Excel到PDF的转换,以及处理包含图片的单元格。 首先,你需要在项目中引入Aspose.Cells的依赖。如果使用Maven,可以在pom.xml文件中添加如下依赖: ```xml ...

    超强PDF解析器 可分页解析 页码跳转

    "超强PDF解析器 可分页解析 页码跳转"是一个专门针对PDF文档设计的应用,它具备了高级功能,如分页解析和页码跳转,以及支持缩放和改变文字大小,这些都是处理PDF文档时非常实用的特性。 分页解析是PDF解析器的核心...

    JAVA中PDF转JPG

    Apache PDFBox是一个广泛使用的开源库,它可以方便地读取、操作PDF文档,并且支持转换为图像格式。要使用PDFBox,你需要将其添加到你的项目依赖中。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml...

    java 实现PDF 在线阅读

    这些库允许我们读取、解析和操作PDF内容。在这个场景下,我们可能主要关注PDFBox,因为它提供了方便的API来获取PDF页面内容。 2. **服务器端处理**: 当用户上传PDF文件时,服务器端需要接收并存储文件。可以使用...

    在线预览pdf(pdf.js)java示例

    在Java后端,你可以使用Apache PDFBox、iText等库读取PDF文件,并将其转换为Base64编码的字符串,然后通过HTTP响应返回给前端。前端接收到Base64数据后,可以使用PDF.js的`PDFDocumentProxy`接口来解码并加载PDF文档...

    利用itext操作pdf从数据库导出大量数据

    iText是一个开源的Java库,它提供了创建、读取、更新和签署PDF文档的功能。它支持多种复杂的PDF操作,如添加文本、图像、表格、超链接等,并且可以进行页面操作、书签管理、数字签名等。 2. **从数据库导出数据**...

    java根据模板导出PDF详细教程(包含统计图)

    它提供了丰富的API,可以用来添加文本、图像、表格等各种元素到PDF中,同时还支持PDF的读取和修改。在我们的场景中,iText将作为生成PDF的主要工具,我们可以通过它来构建动态生成的PDF模板。 FreeMarker则是一个...

    C#生成PDF 读取PDF文本内容 获取PDF内图片

    例如,PDFBox是一个开源的Java库,但也有.NET版本可供C#使用。通过PDFBox的PDDocument类,你可以打开PDF文档,然后使用PDDocumentCatalog和PDPageContentStream等类来遍历和提取文本。另一个选择是iTextSharp,它...

    java 实现 excel,txt转PDF,ziyan.rar java 转pdf

    在处理Excel时,可能需要对单元格样式进行映射,而在处理PDF布局时,可能需要考虑文本换行、分页等问题。因此,理解并熟练使用这些库是实现功能的关键。 在"ziyan.rar"这个压缩包中,可能包含了示例代码或者更详细...

    java web在线预览pdf、word、excel

    这些库能够读取PDF文件并将其转换为流式数据,从而可以通过HTTP响应返回给前端。而对于Word和Excel,我们可以使用Apache POI库,它提供了对Microsoft Office格式的读写支持。 前端部分,我们可以利用JavaScript库如...

    java管理pdf

    2. **读取PDF**: 使用Apache PDFBox,你可以通过`PDDocument.load()`方法加载PDF文件,然后利用`PDFTextStripper`类提取文本内容。例如: ```java PDDocument document = PDDocument.load(new File("ssdasfdsad....

    java pdf转html

    它提供了丰富的API,可以用于创建、编辑和读取PDF。虽然iText主要关注PDF的创建和编辑,但在某些情况下也可以辅助PDF到HTML的转换。 4. **HTML构造**: 解析PDF后,我们需要将获取的数据转换为HTML结构。这包括将...

    java 使用ITextRenderer将html模块生成pdf文件工具类

    在这个方法中,我们创建了一个ITextRenderer实例,设置HTML文档的URL(这里我们将其保存到临时目录,然后读取),然后调用`setDocument()`方法加载HTML,`layout()`方法进行布局计算,最后使用`createPDF()`方法生成...

    PDF阅读器(JAVA)

    这些库提供了API,可以读取PDF文档内容,包括文本、图像、链接等,并支持渲染到屏幕上。 2. **图形用户界面(GUI)**:JAVA中的Swing或JavaFX框架可以用来构建阅读器的用户界面。GUI设计要遵循用户习惯,例如提供页面...

    python自动办公-57 PDF-识别并读取PDF中的文字

    本主题将深入探讨如何使用Python来识别并读取PDF文件中的文字,从而实现自动化处理。 首先,我们需要了解几个关键的Python库,它们对于PDF文本处理至关重要: 1. **PyPDF2**: 这是一个纯Python库,主要用于读取和...

    PDF在线预览java

    这些库提供了读取、解析、操作甚至渲染PDF的能力。在这个项目中,开发者可能使用了其中的一种或几种来实现跨浏览器的兼容性。 2. **预览方式** PDF在线预览主要有两种方式:服务器端渲染和客户端渲染。 - **...

Global site tag (gtag.js) - Google Analytics