在java中使用iText拆分PDF文件
使用iText来拆分pdf文件相比PDFBOX要复杂一点。以下示例实现了拆分PDF文件为单页文件,并保存为“文件名-n.pdf”的文件:
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.PdfCopy;
import com.itextpdf.text.pdf.PdfReader;
/**
* PDF文档的工具
*
* @author Howard
*
*/
public class PDFTool {
/**
* 拆分pdf,返回页数
*
* @throws IOException
* @throws DocumentException
* @throws FileFormatException
* @throws FileNotFoundException
*
*/
public int split(String filePath) throws IOException, DocumentException {
PdfReader reader = new PdfReader(filePath);
int pageCnt = reader.getNumberOfPages();
for (int i = 0; i < pageCnt; i++) {
Document document = new Document(reader.getPageSizeWithRotation(i+1));
PdfCopy copy = new PdfCopy(document, new FileOutputStream(filePath
.substring(0, filePath.length() - 4)
+ "-" + (i + 1) + ".pdf"));
document.open();
copy.addPage(copy.getImportedPage(reader, i+1));
document.close();
}
return pageCnt;
}
}
使用的iText处理pdf相比PDFBOX的好处是,目前有些pdf在使用PDFBOX读取时就会报错,但在iText中却不会,具体原因还有待分析。
因为这个错误也尝试过用“PDFClown”,同样也会报错。
相关文档:
在成功实现Java调用C++之后,接下来想到能否通过JNA实现Java调用Fortran,今天试验了一下,还是比较容易的。
网上有一个Java调用F95的例子,但是我考虑不仅要实现F95的调用,还要实现F77的调用,所以费了一些周折。
问题的关键在于F77为过程名自动添加了一个尾部的下划线,所以sub1这个过程,到Java一端,就变成了sub1_, ......
最近在开发过程中发现一个问题:Boolean类型的值无法在flex和java间传递,经过一段研究发现,问题出现在Boolean类型的getter和setter方法上。
按照javabean的规范,小布尔类型的getter是以is做前缀的,但是大布尔类型的getter就成了以get为前缀了(大布尔作为引用类型,已经被视为普通 ......
1. 你需要精通面向对象分析与设计(OOA/OOD)、涉及模式(GOF,J2EEDP)以及综合模式。你应该了解UML,尤其是class、object、interaction以及statediagrams。
2. 你需要学习Java语言的基础知识以及它的核心类库(collections、serialization、streams、networking、multithreading、reflection、event、handling、NIO、localiza ......
1. 创建线程有两种方式:
1)扩展java.lang.Thread类
public class ThreadTest extends Thread{ }
2)实现Runnable接口
public class ThreadTest implements Runnable{ }
2. Thread类代表线程类,有两个最主要的方法:
1)run() 包含线程运行时所执行的代码。
用户的线程类只需要继承Thread类,覆盖Thread类的run( ......
Java中提供了Class类,可以通过Class类获取类的定义信息,包括包名、类名、类上的注释(Annotation)、类的修饰符、父类、继承的接口、构造方法、成员变量和成员方法。这些信息分别使用java.lang.annotation.Annotation、 java.lang.reflect.Constructor、java.lang.reflect.Field、java.lang.reflect.Method、java.lang.re ......