使用java生成PDF并保存到本地服务器中

1.导入maven

<!-- PDF工具包 --><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13</version></dependency><!-- pdf中文处理 --><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency>

2.生成所需的PDF文件

public Map pdf(Long id) throws IOException, DocumentException {Map map = new HashMap();String fileName = "pdfFile.pdf";Document document = new Document(PageSize.A4);    //纵向分布String path="src/main/webapp/PDF/";     //绝对路径File file=new File(path);if (!file.exists()){file.mkdirs();}File pdfFile=new File(path,fileName);PdfWriter pdfWriter=PdfWriter.getInstance(document, new FileOutputStream(pdfFile));document.open();//data为需要创建PDF的数据//创建一个有内容的表格文件PdfPTable table = PdfUtil.createTable(data, document);document.add(table);    //添加表格到PDF中//添加图片//获取图片时,如果直接写url,有时候会拿不到图片,不清楚问题,因此这里将图片处理了下(ImageUtil.image2byte())Image qrcode=Image.getInstance(ImageUtil.image2byte("url"));qrcode.scaleToFit(45,45);qrcode.setAbsolutePosition(500,760);document.add(qrcode);     //添加图片到PDF文件中//中间横线LineSeparator line=new LineSeparator(1f,100,BaseColor.GRAY,Element.ALIGN_CENTER,160f);document.add(line);        //添加横线//顶部横线LineSeparator lineTop=new LineSeparator(1f,110,BaseColor.BLACK,Element.ALIGN_CENTER,300f);document.add(lineTop);            //添加横线//底部横线LineSeparator lineBottom=new LineSeparator(1f,110,BaseColor.BLACK,Element.ALIGN_CENTER,-15f);document.add(lineBottom);      //添加横线//左边竖线PdfContentByte contentByte=pdfWriter.getDirectContent();int x=10,y=493;int x1=10,y2=807;contentByte.saveState();contentByte.moveTo(x,y);contentByte.lineTo(x1,y2);contentByte.stroke();contentByte.restoreState();        //添加竖线//右边竖线PdfContentByte contentByte2=pdfWriter.getDirectContent();int x3=585,y3=493;int x4=585,y4=807;contentByte2.saveState();contentByte2.moveTo(x3,y3);contentByte2.lineTo(x4,y4);contentByte2.stroke();contentByte2.restoreState();document.close();map.put("code",0);map.put("url","url");map.put("msg","OK");return map;}

3.创建PDF表格的方法

//设置空表格PdfPTable table = new PdfPTable(2);//生成一个两列的表格table.getDefaultCell().setBorderWidth(0f);table.setWidthPercentage(100);      //100%宽度填充table.getDefaultCell().setPaddingTop(1f);//设置中文字体BaseFont baseFont=BaseFont.createFont("STSong-Light","UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);Font font = new Font(baseFont,10);BaseFont titleFont=BaseFont.createFont("STSong-Light","UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);Font title=new Font(titleFont,15,Font.BOLD);PdfPCell cell;           //单元格//1.1//插入表格      --用于在单元格中插入表格PdfPTable msgTable = new PdfPTable(3);          //3列的表格msgTable.setWidths(new int[]{400,300,300});  //设置每一列的宽度PdfPCell msgCell;msgCell = new PdfPCell(new Phrase("信息", title));msgCell.setColspan(3);         //合并3个单元格msgCell.setFixedHeight(40f);      //单元格的高度msgCell.setUseAscender(true);      //单元格居中msgCell.setHorizontalAlignment(PdfPCell.ALIGN_LEFT); // 设置水平靠左msgCell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE); // 设置垂直居中msgCell.disableBorderSide(15);     //设置单元格的边框隐藏程度msgTable.addCell(msgCell);         //将单元格的内容添加到表中msgCell = new PdfPCell(new Phrase("编号    ", font));msgCell.setFixedHeight(25f);msgCell.setHorizontalAlignment(PdfPCell.ALIGN_RIGHT); // 设置水平居中msgCell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE); // 设置垂直居中msgCell.disableBorderSide(15);msgTable.addCell(msgCell);msgCell = new PdfPCell(new Phrase("信息   ", font));msgCell.setColspan(2);msgCell.setFixedHeight(25f);msgCell.setHorizontalAlignment(PdfPCell.ALIGN_LEFT); // 设置水平居中msgCell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE); // 设置垂直居中msgCell.disableBorderSide(15);msgTable.addCell(msgCell);//msgTable设置了3列,因此,每一行的单元格(即3个单元格)必须要有内容,不然的话那一行不会显示出来cell = new PdfPCell(msgTable); //把小表格添加到大表格的单元格中cell.setFixedHeight(128);cell.disableBorderSide(15);//cell.setColspan(2);table.addCell(cell);    //把大单元格的内容添加到大表格中//单元格中插入图片//判断图片是否存在if (!isImage()){cell =new PdfPCell(new Phrase("无图片", font));cell.setColspan(2);cell.setFixedHeight(25f);cell.disableBorderSide(15);cell.setUseAscender(true);      //单元格居中cell.setHorizontalAlignment(PdfPCell.ALIGN_LEFT); // 设置水平居中cell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE); // 设置垂直居中table.addCell(cell);}else {Image image = Image.getInstance(ImageUtil.image2byte(url);image.scaleToFit(45, 45);  //修改图片大小,图片太大有时候会导致图片不显示,甚至整行不显示cell.setColspan(2)cell= new PdfPCell(image,true);       //添加图片到单元格中cell.setFixedHeight(25f);cell.disableBorderSide(15);cell.setUseAscender(true);      //单元格居中cell.setHorizontalAlignment(PdfPCell.ALIGN_LEFT); // 设置水平居中cell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE); // 设置垂直居中table.addCell(cell);return table;}

4.处理图片的工具类

public static byte[] image2byte(String path) throws IOException {byte[] data = null;URL url = null;InputStream input = null;try{url = new URL(path);HttpURLConnection httpUrl = (HttpURLConnection) url.openConnection();httpUrl.connect();httpUrl.getInputStream();input = httpUrl.getInputStream();}catch (Exception e) {e.printStackTrace();return null;}ByteArrayOutputStream output = new ByteArrayOutputStream();byte[] buf = new byte[1024];int numBytesRead = 0;while ((numBytesRead = input.read(buf)) != -1) {output.write(buf, 0, numBytesRead);}data = output.toByteArray();output.close();input.close();return data;}

使用java生成PDF并保存到本地服务器中相关推荐

  1. Java生成PDF文件保存到本地磁盘

    使用IText进行创建 代码 package cn.xx.xx.util;import com.itextpdf.text.*; import com.itextpdf.text.pdf.BaseFo ...

  2. java用itextPDF生成PDF文件保存至本地并上传至ftp服务器

    标题java用itextPDF生成PDF文件保存至本地并上传至ftp服务器 所需jar :itext-asian-5.2.0.jar,itextpdf-5.5.5.jar,commons-net-3. ...

  3. html5 js保存token,vue生成token并保存到本地存储中

    这篇文章主要为大家详细介绍了vue生成token并保存到本地存储中,具有一定的参考价值,可以用来参考一下. 感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! 首先回顾一下token: to ...

  4. PHP ajax 远程下载PDF文件保存在本地服务器

    在一些时候我们想ajax方式来保存一些PDF文件,尤其是它放在远程服务器上,并且是保存在我们自己的服务器上存储,这个时候我们需要写一段程序来帮助我们完成这个工作,本文介绍了PHP 远程下载PDF文件保 ...

  5. java生成PDF,并下载到本地

    1.首先要写一个PDF工具类,以及相关工具 2.PDF所需jar包 iText是一种生成PDF报表的Java组件 freemarker是基于模板来生成文本输出 <dependency>&l ...

  6. vue项目token放在哪里_vue开发--生成token并保存到本地存储中

    首先回顾一下token: token认证是RESTFUL.api的一个很重要的部分,通过token认证和token设置,后端会有一个接口传给前台: http://localhost/yiiserver ...

  7. php - 使用 phpqrcode.php 生成二维码图片,同时并将生成的二维码图片保存到本地服务器中(详细示例教程源码)

    效果图 网上的教程都太乱了,不好移植到自己的项目中. 最终效果,如下图所示: 你可以直接复制本文提供的方法,稍微改改就能应用到你的项目中去. 示例代码干净整洁,注释超级详细 示例源码 首先需要引入 p ...

  8. iText5实现Java生成PDF文件完整版,二维码

    iText5实现Java生成PDF文件完整版 vue 项目中分别使用 vue-pdf 插件和内嵌 iframe 实现 PDF 文件预览,缩放,旋转,下载,保存等功能 ? Vue打印文件(v-print ...

  9. java实现保存合同模板_java实现pdf的生成下载打印,java生成pdf电子账单,java生成pdf合同模板...

    最近公司要做个生成pdf电子账单凭证的功能,由于这个公司没有任何代码可借鉴,这个时候我就必须得自己搞明白具体的每一步应该怎么做,引什么jar包?用什么方式去实现?这篇博客中会给出从头到尾及其详细的代码 ...

最新文章

  1. ADI射频电路计算小工具ADIsimRF介绍
  2. PLSQL_解析过程及硬解析和软解析的区别(案例)
  3. ffmpeg使用(多个帧合成视频)
  4. Endless Spin
  5. 终于来了,超详细手眼标定原理与实战视频教程
  6. 注册测绘师20180301-测绘基准
  7. PAT乙级练习题1028 人口普查
  8. 闲置eSATA接口影响Windows7启动速度案例分析
  9. 计算机装机配置单5000元,5000以内的diy装机配置清单推荐
  10. 华为校园招聘面试题目及流程
  11. 计算机办公软件基础知识题库,办公软件基础知识试题--题库.doc
  12. 应用程序清单 Manifest 中各种 UAC 权限级别的含义和效果
  13. 微信,该文件已过期或已被清理
  14. 狗哥历经四个小时整理大佬的内容,你确定不来看一下?
  15. 各大U盘主控有何区别
  16. 3.Trie树(题:最大异或对)
  17. git 与github配置(老师详细版)
  18. C语言输出4*5的矩阵
  19. R在市场调查中的应用--主成分分析
  20. 雷鸟电视卸载自带应用和开机广告+停用自动更新

热门文章

  1. 使用Jacoco生成覆盖率数据
  2. Java和vue实现音乐播放器_vue实现的网易云音乐在线播放和下载功能案例
  3. 技术团队如何维护文档
  4. JS自定义Video的播放按钮并监听该事件
  5. 【原】移动web资源整理(安卓、ios移动端兼容性问题归整)
  6. javaagent技术原理
  7. ifstream seekg( ) read( )文本操作
  8. Java 动物声音“模拟器”
  9. 通过VMware Workstation Pro虚拟机安装ubuntu1804环境
  10. Error:fatal error C1010: unexpected end of file while looking for precompiled head