场景
批量打印ftp端的PDF文件
思路
将远端的PDF文件读取到本地的临时目录中,合并,再打印合并后的PDF,然后删除临时文件中的PDF文件
导入依赖
itextpdf用于读取远端PDF文件,pdfbox用于合并本地PDF文件
<!-- itextpdf -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>5.5.13</version>
</dependency>
<!-- pdfbox -->
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.12</version>
</dependency>
代码实现
工具类
public class PDFUtil {
// 将远端PDF下载到本地
public static MessageInfo downPfdToLocal(String ftpurl, String localUrl) throws IOException {
MessageInfo mi = new MessageInfo();
try {
PdfReader reader = new PdfReader(ftpurl, "PDF".getBytes());
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(localUrl));
PdfDocument document = stamper.getOverContent(1).getPdfDocument();
// 纸张大小参数参考 com.itextpdf.text.PageSize
Rectangle rectangle = new Rectangle(595.0F, 842.0F);
document.setPageSize(rectangle);
stamper.flush();
stamper.close();
reader.close();
}catch (Exception e) {
e.printStackTrace();
}
return null;
}
// 根据文件路径,将文件转为byte[]
public static byte[] getBytesByFile(String filePath) {
try {
File file = new File(filePath);
//获取输入流
FileInputStream fis = new FileInputStream(file);
//新的 byte 数组输出流,缓冲区容量1024byte
ByteArrayOutputStream bos = new ByteArrayOutputStream(1024);
//缓存
byte[] b = new byte[1024];
int n;
while ((n = fis.read(b)) != -1) {
bos.write(b, 0, n);
}
fis.close();
//改变为byte[]
byte[] data = bos.toByteArray();
//
bos.close();
return data;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
实现方法
将远端的ftp1.pdf和ftp2.pdf合并下载
public void test() throws IOException, DocumentException, PrinterException {
//pdf合并工具类
PDFMergerUtility merger = new PDFMergerUtility();
String folder = "F:/test";
String destinationFileName = "mergedTest.pdf";
String targetPdf = folder + File.separator + destinationFileName;
String pdf1 = "F:/test/1.pdf";
String pdf2 = "F:/test/2.pdf";
//删除原文件
List list = new ArrayList();
PDFUtil.downPfdToLocal("ftp1.pdf",pdf1);
PDFUtil.downPfdToLocal("ftp2.pdf",pdf2);
merger.addSource("F:/test/test.pdf");
merger.addSource("F:/test/test1.pdf");
list.add(pdf1);
list.add(pdf2);
//设置合并生成pdf文件名称
merger.setDestinationFileName(targetPdf);
list.add(targetPdf);
//合并pdf
merger.mergeDocuments(null);
// file转Bytes,后续要用到
byte[] bytes = PDFUtil.getBytesByFile(targetPdf);
PDDocument document = PDDocument.load(bytes);
// 加载成打印文件
PDFPrintable printable = new PDFPrintable(document);
PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintable(printable);
job.print();
//删除原文件
for (int j = 0; j < list.size(); j++) {
File delfile = new File((String) list.get(j));
if(delfile.exists()){
delfile.delete();
}
}
}
设置打印的横向还是纵向
public void test() throws IOException, DocumentException, PrinterException {
//pdf合并工具类
PDFMergerUtility merger = new PDFMergerUtility();
String folder = "F:/test";
String destinationFileName = "mergedTest.pdf";
String targetPdf = folder + File.separator + destinationFileName;
String pdf1 = "F:/test/1.pdf";
String pdf2 = "F:/test/2.pdf";
//删除原文件
List list = new ArrayList();
PDFUtil.downPfdToLocal("ftp1.pdf",pdf1);
PDFUtil.downPfdToLocal("ftp2.pdf",pdf2);
merger.addSource("F:/test/test.pdf");
merger.addSource("F:/test/test1.pdf");
list.add(pdf1);
list.add(pdf2);
//设置合并生成pdf文件名称
merger.setDestinationFileName(targetPdf);
list.add(targetPdf);
//合并pdf
merger.mergeDocuments(null);
// file转Bytes,后续要用到
byte[] bytes = PDFUtil.getBytesByFile(targetPdf);
PDDocument document = PDDocument.load(bytes);
// 加载成打印文件
PDFPrintable printable = new PDFPrintable(document);
Book book = new Book();
PageFormat pageFormat = new PageFormat();
//设置打印方向 PORTRAIT 竖向 REVERSE_LANDSCAPE 横向
pageFormat.setOrientation(PageFormat.REVERSE_LANDSCAPE);
// 设置纸张
book.append(printable, pageFormat, document.getNumberOfPages());
PrinterJob job = PrinterJob.getPrinterJob();
job.setPageable(book);
job.defaultPage();
job.print();
//删除原文件
for (int j = 0; j < list.size(); j++) {
File delfile = new File((String) list.get(j));
if(delfile.exists()){
delfile.delete();
}
}
}