批量打印远端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.PageSizeRectangle 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 数组输出流,缓冲区容量1024byteByteArrayOutputStream 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);//合并pdfmerger.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);//合并pdfmerger.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();}}
}
批量打印远端PDF文件相关推荐
- 如何在OS X中打印到PDF文件
如何在OS X中打印文件到PDF文件? 其实不需要安装任何其他软件,OS X本身支持打印到PDF文件这个功能. 具体操作详见下面文章: Want to save a document or web p ...
- PDF虚拟打印机怎么打印成PDF文件
在日常工作当中我们在处理文件的时候,需要使用打印机将文件打印成pdf文件,可是身边又没有打印机,这时候就需要用到虚拟打印机了,那么PDF虚拟打印机怎么打印成PDF文件呢? 小编在这里给大家介绍PDF虚 ...
- CAD图纸如何批量打印?CAD文件批量打印教程
CAD图纸如何批量打印?CAD图纸作为设计行业当中非常重要的一种图纸文件,经常会被我们拿来使用,如果我们在使用CAD图纸,需要对CAD图纸进行批量打印,那么我们该如何进行批量打印操作?CAD图纸如何批 ...
- pdf打印机下载后如何打印成pdf文件
我们上班的时候,都会用到打印机的,如果我们不方便买打印机的话,可以用虚拟的啊,那么pdf打印机下载后如何打印成pdf文件,别急,我这就告诉你. 1.在百度中去搜索软件关键词迅捷PDF虚拟打印机,然后进 ...
- 【Python】pdfminer3k模块批量转换本地PDF文件
上一篇文章自己研究了一下如何批量将word或者ppt文件转换为PDF文件,但是有时候我们也想要将pdf文件转换为word或者txt文件,方便复制和处理.本文主要通过调用pdfminer3k模块进行处理 ...
- 【Python】comtypes模块Windows环境下使用批量转换成PDF文件
最近在微信看到一篇文章介绍说批量将ppt文件转化为pdf文件,自己尝试了一下,后面想能否自己封装一个类,既能将ppt转换为pdf,而且能够将word转换为pdf,或者其他类型转化为pdf.花了半天时间 ...
- python完成文件夹批量word转pdf文件及pdf文件合并+word文件合并
前言:有同学问我,如何把文件夹中的文件一次性完成打印,由于文件太多,单个打印着实麻烦.这些文件主要有三种类型,分别为PDF,word(.doc和.docx),我决定把他们全部变为PDF文件,然后再合并 ...
- excel中html批量转化为pdf文件,如何将大量的Excel转换成PDF?
大家都知道Excel表,最怕别人修改了,尤其是数据.一旦修改,可能就会有麻烦.那如何是好呢?有一个最简单的办法就是把Excel转换成PDF文件,这样别人只能阅读不能编辑,就不用担心被修改了,哈哈~下面 ...
- 用Python+PIL将目录下jpg图像批量转成pdf文件
一.引言 最近单位有个事,需要将一堆图片文件先转成pdf文件,同事下了个windows下的图形软件,但要一个个转,几百个jpg文件,太过麻烦,因此想用Python批量来做.一查,图像处理库PIL库可以 ...
- excel中html批量转化为pdf文件,excel怎么批量转换成pdf格式
时间:2020-02-10来源:百度经验作者:名字是代称阅读:5 Excel一直以来都是作为表格存入数据作用的,同时编辑数据也非常方便.但是若只用来阅读,却并不方便.而pdf格式很方便阅读,所以有人就 ...
最新文章
- C++右值引用 和 std::move()
- ACCESS中如何比较日期和时间,使用DateDiff函数
- Meanshift图像平滑之opencv实现
- 记一次 @Transactional不生效的问题
- Nginx反向代理+Go服务实践
- OOB与COM交互读写本地文件
- html5 渐变色矩形,使用HTML5画布元素的矩形渐变
- AI专家一席谈:复用算法、模型、案例,AI Gallery带你快速上手应用开发
- DenseNet细节
- 海康视频监控解决方案
- cmd imp导入dmp文件_dmp文件导入抽取方法(示例代码)
- modelica语言学习心得
- 大学生php实训总结_php实训报告.doc
- This is a CONNECT tunnel, through which encrypted HTTPS traffic flows.
- 京东云 linux无法远程,怎样远程登录京东云云主机.pdf
- android实现自动评论脚本,自动点击器评论器app下载
- 高效的 Linux 限流神器Trickle
- 移动无线网卡服务器,贵阳移动无线网卡月租
- 【STM32】一次F105 USB OTG驱动填坑记录
- Project 2013设置节假日日历
热门文章
- 什么叫CDN回源和域名回源,如何采用正确的正确的回源策略
- 4010. Problem E:11的倍数
- php 相加函数,求和函数是什么
- 对于 Latex CJK 的一些解释
- android 原生camera——设置模块修改
- 汽车洒水器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- fyi 在邮件里是什么意思_FYI的完整形式是什么?
- Linux下基于TCP的视频传输(c++ )
- vulhub漏洞复现- ActiveMQ 反序列化漏洞(CVE-2015-5254)
- Mysql 临时表详解(temporary table)