java pdf 截取n页,生成新文件,转图片,多个pdf 合并
<dependency>
<groupid>com.itextpdf</groupid>
<artifactid>itextpdf</artifactid>
<version>5.5.13</version>
</dependency>
完整代码
import com.itextpdf.text.document;
import com.itextpdf.text.pdf.pdfcopy;
import com.itextpdf.text.pdf.pdfimportedpage;
import com.itextpdf.text.pdf.pdfreader;
import org.apache.pdfbox.pdmodel.pddocument;
import org.apache.pdfbox.pdmodel.pdpagetree;
import org.apache.pdfbox.rendering.pdfrenderer;
import javax.imageio.imageio;
import java.awt.image.bufferedimage;
import java.io.*;
public class pdfutil {
/**
* 截取pdffile的第from页至第end页,组成一个新的文件名
*
* @param pdffile 要切割的pdf文件
* @param newfile 切割后形成的新的pdf文件
* @param from 从第n页开始
* @param end 到第n页结束
*/
public static void partitionpdf(string pdffile, string newfile, int from, int end) {
document document = null;
pdfcopy copy = null;
pdfreader reader = null;
try {
reader = new pdfreader(pdffile);
int pagecount = reader.getnumberofpages();
if (from < 1) {
from = 1;
}
if (from > pagecount) {
from = pagecount;
}
if (end == 0 || end > pagecount) {
end = pagecount;
}
document = new document(reader.getpagesize(1));
copy = new pdfcopy(document, new fileoutputstream(newfile));
document.open();
for (int j = from; j <= end; j++) {
document.newpage();
pdfimportedpage page = copy.getimportedpage(reader, j);
copy.addpage(page);
}
} catch (exception e) {
e.printstacktrace();
} finally {
if (document != null) {
document.close();
}
if (copy != null) {
copy.close();
}
if (reader != null) {
reader.close();
}
}
}
/**
* pdf转图片
*
* @param pdffile pdf 文件
* @param imagefile 输出的图片文件
* @param from 开始页 从1开始
* @param end 结束页 最大为pdf总页数
* @throws exception
*/
public static void pdftoimage(string pdffile, string imagefile, int from, int end) throws exception {
pddocument doc = null;
bytearrayoutputstream os = null;
inputstream stream = null;
outputstream out = null;
try {
//pdf路径
stream = new fileinputstream(pdffile);
// 加载解析pdf文件
doc = pddocument.load(stream);
pdfrenderer pdfrenderer = new pdfrenderer(doc);
pdpagetree pages = doc.getpages();
int pagecount = pages.getcount();
if (from < 1) {
from = 1;
}
if (from > pagecount) {
from = pagecount;
}
if (end == 0 || end > pagecount) {
end = pagecount;
}
for (int i = from; i <= end; i++) {
bufferedimage bim = pdfrenderer.renderimagewithdpi(i - 1, 200); //pdfbox 是从0开始的,from初始值为1,所以这边要减 i-1
os = new bytearrayoutputstream();
imageio.write(bim, "jpg", os);
byte[] datalist = os.tobytearray();
//只取一页,等于传进来的名称,多页时,加上 页号
string imagefilepath = from == end ? saveimgfile : saveimgfile.replace(".jpg", "_" + i + ".jpg");
file file = new file(imagefilepath);
if (!file.getparentfile().exists()) {
// 不存在则创建父目录及子文件
file.getparentfile().mkdirs();
file.createnewfile();
}
out = new fileoutputstream(file);
out.write(datalist);
}
} catch (exception e) {
e.printstacktrace();
} finally {
if (doc != null) {
doc.close();
}
if (os != null) {
os.close();
}
if (stream != null) {
stream.close();
}
if (out != null) {
out.close();
}
}
}
//多个pdf合并成一个
public static void mergepdffiles(list<string> pdffiles, string outputpdf) throws ioexception {
// 创建一个新的 pdf 阅读器对象和一个新的 pdf 写入对象
pdfreader reader = null;
pdfcopy copy = null;
document document = new document();
try {
// 创建 pdf 阅读器对象和写入对象
reader = new pdfreader(pdffiles.get(0));
copy = new pdfcopy(document, new fileoutputstream(outputpdf));
// 打开文档准备写入内容
document.open();
// 将第一个 pdf 的所有页面复制到输出 pdf 中
for (int i = 1; i <= reader.getnumberofpages(); i++) {
pdfimportedpage page = copy.getimportedpage(reader, i);
copy.addpage(page);
}
// 将其它pdf的所有页,输出到 pdf 中
for (int i = 1; i < pdffiles.size(); i++) {
reader = new pdfreader(pdffiles.get(i));
for (int j = 1; j <= reader.getnumberofpages(); j++) {
pdfimportedpage page = copy.getimportedpage(reader, j);
copy.addpage(page);
}
}
} catch (exception e) {
e.printstacktrace();
} finally {
if (document != null) {
document.close();
}
if (copy != null) {
copy.close();
}
if (reader != null) {
reader.close();
}
}
}
}
测试类
@test
void pdf() throws exception {
string pdffile = "d:\\desktop\\20220117.pdf";
string jpgfile = "d:\\desktop\\20220117.jpg";
pdfutil.pdftoimage(pdffile, jpgfile, 1, 1);
}
@test
void testmerge() throws ioexception {
list<string> pdffiles = new arraylist<>();
pdffiles.add("d:\\projects\\20231225180735.pdf");
pdffiles.add("d:\\projects\\20231225182535.pdf");
pdffiles.add("d:\\projects\\20231225184135.pdf");
pdfutil.mergepdffiles(pdffiles, "d:\\projects\\new.pdf");
}到此这篇关于java pdf操作之实现截取n页和多个pdf合并的文章就介绍到这了,更多相关java pdf内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论