关于java操作pdf,同时上传文件服务器

编程入门 行业动态 更新时间:2024-10-07 15:18:29

关于java操作pdf,同时<a href=https://www.elefans.com/category/jswz/34/1770844.html style=上传文件服务器"/>

关于java操作pdf,同时上传文件服务器

前言:本章节采用的文件服务器是七牛云的,不同的文件服务器可以根据实际api不同作出相应的操作
好了废话不多说,开始撸代码

First:导入pom依赖

		<!-- 操作pdf --><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.10</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency><!-- 操作七牛云--><dependency><groupId>com.qiniu</groupId><artifactId>qiniu-java-sdk</artifactId><version>[7.2.0, 7.2.99]</version></dependency>

导入好了pom依赖后记得更新maven 工程哦

Second:制作好一个上传七牛云的工具类

import com.google.gson.Gson;
import com.qiniumon.QiniuException;
import com.qiniumon.Zone;
import com.qiniu.http.Response;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.storage.persistent.FileRecorder;
import com.qiniu.util.Auth;
import lombok.extern.java.Log;import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.nio.file.Paths;@Log
public class QiniuUtil {//设置好账号的ACCESS_KEY和SECRET_KEYprivate static final String ACCESS_KEY = "****";private static final String SECRET_KEY = "****";//要上传的空间 bucket nameprivate static final String BUCKET_NAME = "****";/*** 简单上传* @param localFilePath* @param fileName* @return* @throws QiniuException*/public static String easyUpLoad(File localFilePath, String fileName) throws QiniuException {return intoResult(null,localFilePath,null, fileName,null);}/*** 字节数组上传* @param uploadBytes* @param fileName* @return* @throws QiniuException*/public static String byteUpLoad(byte[] uploadBytes, String fileName) throws QiniuException {return intoResult(uploadBytes,null,null, fileName,null);}/*** 数据流上传* @param byteInputStream* @param fileName* @return* @throws QiniuException*/public static String byteArrayInputStreamUpLoad(ByteArrayInputStream byteInputStream, String fileName) throws QiniuException {return intoResult(null,null,byteInputStream, fileName,null);}/*** 断点续上传* @param localFilePath* @param fileName* @return*/public static String recorderUpLoad(File localFilePath, String fileName) {String localTempDir = Paths.get(System.getenv("java.io.tmpdir"), BUCKET_NAME).toString();try {//设置断点续传文件进度保存目录FileRecorder fileRecorder = new FileRecorder(localTempDir);return intoResult(null,localFilePath,null,fileName,fileRecorder);} catch (IOException ex) {ex.printStackTrace();return ex.getMessage();}}private static String intoResult(byte[] uploadBytes, File localFilePath, ByteArrayInputStream byteInputStream, String fileName, FileRecorder fileRecorder) throws QiniuException {Configuration cfg = new Configuration(Zone.zone2());UploadManager uploadManager = new UploadManager(cfg, fileRecorder);
//        String substring = fileName.substring(fileName.lastIndexOf("."));String key = "hlm/images/"+fileName;Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);String upToken = auth.uploadToken(BUCKET_NAME);Response response = null;try {if(uploadBytes != null && localFilePath == null && byteInputStream == null){response = uploadManager.put(uploadBytes, key, upToken);}if(localFilePath != null && uploadBytes == null && byteInputStream == null){response = uploadManager.put(localFilePath, key, upToken);}if(byteInputStream != null  && uploadBytes == null && localFilePath == null){response = uploadManager.put(byteInputStream,key,upToken,null, null);}if(response == null){return "参数错误";}//解析上传成功的结果DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);return putRet.key;} catch (QiniuException ex) {Response r = ex.response;throw new QiniuException(r);}}
}

Third:制作生成pdf的方法

直接通过固定模板生成

	@RequestMapping(value = "/pdf",method = RequestMethod.GET)public String exportPdf(HttpServletResponse response) throws UnsupportedEncodingException {// 指定解析器System.setProperty("javax.xml.parsers.DocumentBuilderFactory","com.sun.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");String filename="XXXXX.pdf";String path="C:\\XXX\\XXXX\\Desktop";response.setContentType("application/pdf");response.setHeader("Content-Disposition", "attachment;fileName="+ URLEncoder.encode(filename, "UTF-8"));ByteArrayOutputStream byteArrayOutputStream = null;PdfStamper ps = null;String s = null;PdfReader reader = null;try {byteArrayOutputStream = new ByteArrayOutputStream();// 2 读入pdf表单reader = new PdfReader(path+ "/"+filename);// 3 根据表单生成一个新的pdfps = new PdfStamper(reader, byteArrayOutputStream);// 4 获取pdf表单AcroFields form = ps.getAcroFields();// 5给表单添加中文字体BaseFont bf = BaseFont.createFont("STSongStd-Light","UniGB-UCS2-H", false);form.addSubstitutionFont(bf);// 6查询数据Map<String, Object> data = new HashMap<String, Object>();data.put("username", "康怀安");data.put("idcard", "360302188888888888");data.put("mobile", "15888888888");// 7遍历data 给pdf表单表格赋值for (String key : data.keySet()) {form.setField(key,data.get(key).toString());}// 如果为false那么生成的PDF文件还能编辑,一定要设为trueps.setFormFlattening(true);ps.close();reader.close();s = QiniuUtil.byteUpLoad(byteArrayOutputStream.toByteArray(), filename);System.out.println(s);//-----------------------------pdf 添加图片----------------------------------// 通过域名获取所在页和坐标,左下角为起点
//            System.out.println("pdf 添加图片");
//            String imgpath="C:\\Users\\Dell\\Desktop\\小图标\\qr\\92021339.jpg";
//            int pageNo = form.getFieldPositions("icon").get(0).page;
//            Rectangle signRect = form.getFieldPositions("icon").get(0).position;
//            float x = signRect.getLeft();
//            float y = signRect.getBottom();
//            // 读图片
//            Image image = Image.getInstance(imgpath);
//            // 获取操作的页面
//            PdfContentByte under = ps.getOverContent(pageNo);
//            // 根据域的大小缩放图片
//            image.scaleToFit(signRect.getWidth(), signRect.getHeight());
//            // 添加图片
//            image.setAbsolutePosition(x, y);
//            under.addImage(image);//-------------------------------------------------------------System.out.println("===============PDF导出成功=============");} catch (Exception e) {System.out.println("===============PDF导出失败=============");e.printStackTrace();} finally {try {if(ps != null){ps.close();}if(reader != null){reader.close();}byteArrayOutputStream.close();} catch (Exception e) {e.printStackTrace();}}return s;}

读取七牛模板生成pdf(编写一个下载的工具)

 private static InputStream download(String url) {OkHttpClient client = new OkHttpClient();System.out.println(url);Request req = new Request.Builder().url(url).build();Response resp = null;try {resp = client.newCall(req).execute();System.out.println(resp.isSuccessful());if (resp.isSuccessful()) {ResponseBody body = resp.body();return body.byteStream();}} catch (IOException e) {e.printStackTrace();System.out.println("Unexpected code " + resp);}return null;}
PdfReader reader = new PdfReader(download);

根据一个固定的模板生成pdf,如果你需要下载生成好的模板,可以将byteArrayOutputStream 流改为response.getOutptStream
注意:
PdfStamper 生成的文件要在close之后才会写入传进去的流里面,所有当你不是预留给浏览器下载的时候,记得close再来操作你存储流的对象

你的pdf制作需要使用Adobe Acrobat 9 Pro软件制作

制作方法


制作的话还是很简单啦~~~~~~~~~~

这个时候,你是不是需要这个软件啦~~~~~~~~~~~~

下载的也很多资源的,我还没有上传百度云,所有不能给出下载连接了,但是直接搜这个Adobe Acrobat 9 Pro软件的话网络上也是有很多资源的

更多推荐

关于java操作pdf,同时上传文件服务器

本文发布于:2024-03-09 06:13:11,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1724112.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:上传文件   操作   服务器   java   pdf

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!