文档章节

java操作PDF(PDFBOX和Itext框架)

zimingforever
 zimingforever
发布于 2013/07/24 00:23
字数 702
阅读 5716
收藏 16

java有很多可以操作pdf的框架,pdfbox和itext就是其中的两种

pdfbox有如下作用

提取文本,包括Unicode字符。
和Jakarta Lucene等文本搜索引擎的整合过程十分简单。
加密/解密PDF文档。

从PDF和XFDF格式中导入或导出表单数据。
向已有PDF文档中追加内容。
将一个PDF文档切分为多个文档。
覆盖PDF文档

下面是一个使用pdfbox的测试程序

public class PdfBoxTest {

    public void getText(String file) throws Exception{
        //是否排序
        boolean sort = false;
        //pdf文件名
        String pdfFile = file;
        //输入文本文件名称
        String textFile = null;
        //编码方式
        String encoding = "UTF-8";
        //开始提取页数
        int startPage = 1;
        //结束提取页数
        int endPage = Integer.MAX_VALUE;
        //文件输入流,输入文本文件
        Writer output = null;
        //内存中存储的PDF Document
        PDDocument document = null;

        try{
            try{
                //首先当作一个URL来加载文件,如果得到异常再从本地系统装载文件
                URL url = new URL(pdfFile);
                document = PDDocument.load(url);
                String fileName = url.getFile();

                if(fileName.length() > 4){
                    //以原来pdf名称来命名新产生的txt文件
                    File outputFile = new File(fileName.substring(0, fileName.length()-4) + ".txt");
                    textFile = outputFile.getName();
                }
            }catch(Exception e){
                //如果作为URL装载得到异常则从文件系统装载
                document = PDDocument.load(pdfFile);
                if(pdfFile.length() > 4){
                    textFile = pdfFile.substring(0, pdfFile.length() - 4) + ".txt";
                }
            }
            //文件输出流,写入文件到textFile
            output = new OutputStreamWriter(new FileOutputStream(textFile),encoding);
            //PDFTextStripper来提取文本
            PDFTextStripper stripper = new PDFTextStripper();
            //设置是否排序
            stripper.setSortByPosition(sort);
            //设置起始页
            stripper.setStartPage(startPage);
            //设置结束页
            stripper.setEndPage(endPage);
            //调用PDFTextStripper的writeText提取并输出文本
            stripper.writeText(document, output);
        }finally{
            if(output != null){
                output.close();
            }
            if(document != null){
                document.close();
            }
        }
    }
    /** *//**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        PdfBoxTest test = new PdfBoxTest();
        try{
            test.getText("E://test.pdf");
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}
iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。 

下面是一个使用itext生成pdf的例子

public class ITextTest {
    public static void main(String args[]){
        writePdf();
    }

    public static void writePdf(){
        Document document = new Document();
        try {
            PdfWriter.getInstance(document, new FileOutputStream("Helloworld.pdf"));
        } catch (DocumentException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        } catch (FileNotFoundException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        }
        document.open();
        try {
            document.add(new Paragraph("Hello World"));
        } catch (DocumentException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        }
        document.close();
    }

}

默认的iText字体设置不支持中文字体,需要下载远东字体包iTextAsian.jar,否则不能往PDF文档中输出中文字体。通过下面的代码就可以在文档中使用中文了: 


BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); 
com.lowagie.text.Font FontChinese = new com.lowagie.text.Font(bfChinese, 12, com.lowagie.text.Font.NORMAL);
Paragraph pragraph=new Paragraph("你好", FontChinese);   

参考文档:http://yuleihome.iteye.com/blog/181348

http://www.cnblogs.com/hejycpu/archive/2009/01/19/1378380.html

http://gohands.iteye.com/blog/160534

总结一下,本文采用pdfbox和itext分别演示了如何读取pdf和生成pdf的简单方法。

© 著作权归作者所有

共有 人打赏支持
zimingforever
粉丝 143
博文 264
码字总数 300408
作品 0
杭州
程序员
请问有什么可以将PDF转换成HTML的开源工具推荐的?

想要将PDF转成标签语义比较明确的HTML页面,目前找到的开源框架PDFBox和iText都只支持对划定坐标区域的表格进行识别转换而不能自动识别,因为PDF文件格式不一,坐标区域不确定,所以这种方案...

文小杰
06/23
0
0
Apache PDFBox 2.0.12 和 1.8.16 版本发布

Apache PDFBox 2.0.12 已发布,包含以下改进: [PDFBOX-4184] - [PATCH]: Support simple lossless compression of 16 bit RGB images [PDFBOX-4253] - Optimize PDFunctionType3.eval() [P......

王练
10/06
0
0
Apache PDFBox 2.0.11 和 1.8.15, Java 的 PDF 处理类库

Apache PDFBox 2.0.11 和 1.8.15 已发布。Apache PDFBox 库是一个开源的用于处理 PDF 文档的 Java 工具库。 Apache PDFBox 2.0.11 是基于 2.0.10 版本的增量式 bug 修复版本,包含了几个修复...

局长
07/01
0
0
Apache PDFBox 2.0.10 发布,Java 的 PDF 处理类库

Apache PDFBox 2.0.10 发布,Apache PDFBox 库是一个开源的用于处理 PDF 文档的 Java 工具。更新内容如下: Bug [PDFBOX-3585] - National characters not correctly displayed in text form......

淡漠悠然
06/23
0
0
用xpdf和pdfbox来处理中文PDF文档及其比较(转载)

我在以前的项目中使用的是pdfbox,在读取中文文档时可以读出大部分的文字,但是在数字、分页等地方还是不可避免的出现乱码。于是我在网上搜索,看有没有什么解决方法,看到有说法: “PDFBo...

张xtpgyaps
2011/07/13
0
1

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周三乱弹 —— 我们无法成为野兽

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ _刚刚好: 霸王洗发水这波很骚 手机党少年们想听歌,请使劲儿戳(这里) hahahahahahh @嘻酱:居然忘了喝水。 让你喝可乐的话, 你准忘不了...

小小编辑
24分钟前
0
0
vm GC 日志 配置及查看

-XX:+PrintGCDetails 打印 gc 日志 -XX:+PrintTenuringDistribution 监控晋升分布 -XX:+PrintGCTimeStamps 包含时间戳 -XX:+printGCDateStamps 包含时间 -Xloggc:<filename> 可以将数据保存为......

Canaan_
昨天
0
0
学习设计模式——生成器模式

1. 认识生成器模式 1. 定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 2. 组成: Builder:生成器接口,定义创建一个Product对象所需要的各个组件的操作,...

江左煤郎
昨天
0
0
C语言精要(第二章:基本数据类型)

2.1 C语言基本数据类型 在计算机术语中,把⼆进制数中的某⼀位数又称为⼀个⽐特(bit)。⽐特这个单位对于计算机⽽⾔,在度量上是最⼩的单位。除了⽐特之外,还有字节(byte)这个术语。⼀个...

ryanliue
昨天
0
0
实现下拉菜单多选框效果

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><li>工作意愿地:<%-- <c:forEach items="${list}" var="list"><input type="checkbox" value="${list......

lanjian28
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部