如何用java读取pdf文档的部分内容

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用java读取pdf文档的部分内容相关的知识,希望对你有一定的参考价值。

参考技术A

你需要用到PDFbox api

https://pdfbox.apache.org/1.8/cookbook/textextraction.html

例子如下

import java.io.File; 
import java.io.IOException; 
import org.apache.pdfbox.pdmodel.PDDocument; 
import org.apache.pdfbox.text.PDFTextStripper;
import org.apache.pdfbox.text.PDFTextStripperByArea;

try 
    PDDocument document = null;
    document = PDDocument.load(new File("test.pdf"));
    document.getClass();
    if (!document.isEncrypted()) 
        PDFTextStripperByArea stripper = new PDFTextStripperByArea();
        stripper.setSortByPosition(true);
        PDFTextStripper Tstripper = new PDFTextStripper();
        String st = Tstripper.getText(document);
        System.out.println("Text:" + st);
    
 catch (Exception e) 
    e.printStackTrace();

本回答被提问者采纳

急急急!!!如何用java把可编辑的pdf文档转换成不可编辑的pdf文档

如何用java把可编辑的pdf文档转换成不可编辑的pdf文档

坦率的说,这个问题就是个调用开源框架itext.jar的api问题,复制一段:
书写器(Writer)对象
iText提供了对PDF文件的安全保护,通过书写器(Writer)的setEncryption方法,可以设定文档的用户口令、只读、可打印等属性。

一旦文档(document)对象建立好之后,需要建立一个或多个书写器(Writer)对象与之关联。通过书写器(Writer)对象可以将具体文档存盘成需要的格式,如com.lowagie.text.PDF.PDFWriter可以将文档存成PDF文件, com.lowagie.text.html.HtmlWriter可以将文档存成html文件。
设定文档属性
在文档打开之前,可以设定文档的标题、主题、作者、关键字、装订方式、创建者、生产者、创建日期等属性,调用的方法分别是:
public boolean addTitle(String title)
public boolean addSubject(String subject)
public boolean addKeywords(String keywords)
public boolean addAuthor(String author)
public boolean addCreator(String creator)
public boolean addProducer()
public boolean addCreationDate()
public boolean addHeader(String name, String content)
其中方法addHeader对于PDF文档无效,addHeader仅对html文档有效,用于添加文档的头信息。
当新的页面产生之前,可以设定页面的大小、书签、脚注(HeaderFooter)等信息,调用的方法是:
public boolean setPageSize(Rectangle pageSize)
public boolean add(Watermark watermark)
public void removeWatermark()
public void setHeader(HeaderFooter header)
public void resetHeader()
public void setFooter(HeaderFooter footer)
public void resetFooter()
public void resetPageCount()
public void setPageCount(int pageN)
如果要设定第一页的页面属性,这些方法必须在文档打开之前调用。
对于PDF文档,iText还提供了文档的显示属性,通过调用书写器的setViewerPreferences方法可以控制文档打开时Acrobat Reader的显示属性,如是否单页显示、是否全屏显示、是否隐藏状态条等属性。
iText提供了对PDF文件的安全保护,通过书写器(Writer)的setEncryption方法,可以设定文档的用户口令、只读、可打印等属性。追问

其实我的问题无非就是用java程序把文档版的pdf文档转成电子版(即扫描版-不可选中内容复制)的pdf文档,这也是两年前刚开始上班的时候公司布置的任务。

参考技术A 我写了一段测试代码,通过设置编辑时必须录入密码来控制没有密码的用户不可编辑
package testjava.test;

import java.io.File;
import java.io.IOException;
import org.apache.pdfbox.exceptions.COSVisitorException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.encryption.AccessPermission;
import org.apache.pdfbox.pdmodel.encryption.BadSecurityHandlerException;
import org.apache.pdfbox.pdmodel.encryption.StandardProtectionPolicy;

/**
*
* @author sim_liang
*/
public class TestPDF
public static void setPdfReadonly(File pdfFile) throws IOException, BadSecurityHandlerException, COSVisitorException
PDDocument _pdfDocument = PDDocument.load(pdfFile.getPath());
_pdfDocument.getNumberOfPages();
AccessPermission _accessPermission = new AccessPermission();
_accessPermission.setCanModify(false);
_accessPermission.setReadOnly();
StandardProtectionPolicy spp = new StandardProtectionPolicy("owner-password", "", _accessPermission); //owner-password is modify password
spp.setEncryptionKeyLength(128);
_pdfDocument.protect(spp);
_pdfDocument.save(pdfFile.getPath());
_pdfDocument.close();

//
// fields
//
public static void main(String[] args) throws IOException, BadSecurityHandlerException, COSVisitorException
File pdfFile = new File("D:\\test.pdf");
setPdfReadonly(pdfFile);

参考技术B 渲染一下就可以了追问

会的话就具体说一下,大不了加分,不会就不要故弄玄虚了

追答

直接渲染就可以了,这么简单的问题,还要 故弄玄虚???

参考技术C 学校的作业吧?变成不可以编辑的其实下载个PDF编辑更改器就可以实现。祝你成功。追问

不是学校的作业,要用java程序实现的,投机取巧是不可以的

以上是关于如何用java读取pdf文档的部分内容的主要内容,如果未能解决你的问题,请参考以下文章

急急急!!!如何用java把可编辑的pdf文档转换成不可编辑的pdf文档

如何用java程序读取带密码(密码已知)的office文档。

java 已经获取pdf代码,如何把他pdf文件保存到本机 要求用输出流做

如何用PDF编辑器修改PDF中的内容?有免费好用的软件吗?

java操作office和pdf文件java读取word,excel和pdf文档内容

如何用 Java 实现 wordexcel 等文档在线预览?