批量打印远端PDF文件

场景

批量打印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();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值