记录工作 记录生活

jfinal 添加附件 并上传水印文字(crm)

导入相关的pom文件

<dependency><groupId>com.itextpdf.tool</groupId><artifactId>xmlworker</artifactId><version>5.5.10</version>
</dependency>
<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.10</version>
</dependency>

设置该工具类

  /*** @param inputFile 你的PDF文件地址* @param outputFile 添加水印后生成PDF存放的地址* @param waterMarkName 你的水印* @return*/public static boolean waterMark(String inputFile,String outputFile, String waterMarkName) {try {PdfReader reader = new PdfReader(inputFile);PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outputFile));//这里的字体设置比较关键,这个设置是支持中文的写法BaseFont base = BaseFont.createFont(PathKit.getWebRootPath() + "/upload/ttf/pf.ttf",BaseFont.IDENTITY_H , BaseFont.EMBEDDED);// 使用系统字体int total = reader.getNumberOfPages() + 1;PdfContentByte under;Rectangle pageRect = null;for (int i = 1; i < total; i++) {pageRect = stamper.getReader().getPageSizeWithRotation(i);// 计算水印X,Y坐标float x = pageRect.getWidth()/2;float y = pageRect.getHeight()/2-10;// 获得PDF最顶层under = stamper.getOverContent(i);under.saveState();// set TransparencyPdfGState gs = new PdfGState();// 设置透明度为0.2gs.setFillOpacity(0.2f);under.setGState(gs);under.restoreState();under.beginText();under.setFontAndSize(base, 60);under.setColorFill(BaseColor.LIGHT_GRAY);// 水印文字成45度角倾斜under.showTextAligned(Element.ALIGN_CENTER, waterMarkName, x,y, 55);// 添加水印文字under.endText();under.setLineWidth(1f);under.stroke();}stamper.close();return true;} catch (Exception e) {e.printStackTrace();return false;}}

这里字体比较关键

里面放这个代码,用来设置字体

苹方 常规Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ab aspernatur consequatur distinctio eligendi eos esse harum illo iste libero magnam, natus quisquam quod repellat repudiandae rerum sapiente, similique. Amet beatae, consequuntur doloremque eaque eius eos, esse excepturi fuga harum numquam, placeat quae quas recusandae saepe sequi similique sunt vero voluptates.

代用工具类,编写相对应的接口,通过控制水印的开关 来进行是否添加水印

    /*** 获取附件地址*/public void credit() {try {Map<String, Object> params = getParamsMap();Map<String, Object> paramss = new HashMap<>();Record record = Db.findFirst(Db.getSqlPara("customer.customer_credit.queryCredit", params));// 获取水印的开关Record status = Db.findFirst("select * from of_sys_param where param_name='mark_switch'");// 获取图片路径// Record Recordpath_status = Db.findFirst("select * from of_sys_param where param_name='mark_image'");if (status.getStr("param_value").equals("1")) {// ImageMarkUtile.waterMarkName(PathKit.getWebRootPath() + record.getStr("remark"), PathKit.getWebRootPath() + record.getStr("remark") + ".pdf", PathKit.getWebRootPath() + path_status.getStr("param_value"));Boolean b = PdfTextMarkUtil.waterMark(record.getStr("remark"), PathKit.getWebRootPath() + "/upload/image/" + record.getStr("name") + ".pdf", getUser().getLoginName());paramss.put("b", "T");paramss.put("name", record.getStr("name"));paramss.put("path", "/upload/image/" + record.getStr("name") + ".pdf");rendSuccessJson(paramss);} else {paramss.put("b", "F");paramss.put("name", record.getStr("name"));paramss.put("path", record.getStr("remark"));rendSuccessJson(paramss);}} catch (Exception e) {e.printStackTrace();rendFailedJson(ErrorCode.get("9999"));}}

页面上文件的下载

<input type="file" id="file"style="display: none">
<buttonclass="layui-btn layui-btn-sm"type="button" onclick="download({{d.id}})"
>下载
</button>

JS代码部分 这里主要关于文件下载的, 也是主要针对于pdf

<script>/*** 文件链接转文件流下载--主要针对pdf 解决谷歌浏览器a标签下载pdf直接打开的问题* @param url  :文件链接* @param fileName  :文件名;* @param type  :文件类型;*/function fileLinkToStreamDownload(url, fileName, type) {console.log(url, fileName, type);var reg = /^([hH][tT]{2}[pP]:\/\/|[hH][tT]{2}[pP][sS]:\/\/)(([A-Za-z0-9-~]+).)+([A-Za-z0-9-~\/])+$/;// if (!reg.test(url)) {//     throw new Error("传入参数不合法,不是标准的文件链接");// } else {var xhr = new XMLHttpRequest();xhr.open('get', url, true);xhr.setRequestHeader('Content-Type', 'application/' + type);xhr.responseType = "blob";xhr.onload = function () {if (this.status == 200) {//接受二进制文件流var blob = this.response;downloadExportFile(blob, fileName, type)}};xhr.send();// }}/***下载导出文件* @param blob  :返回数据的blob对象或链接* @param tagFileName  :下载后文件名标记* @param fileType  :文件类 word(docx) excel(xlsx) ppt等*/function downloadExportFile(blob, tagFileName, fileType) {var downloadElement = document.createElement('a');var href = blob;if (typeof blob === 'string') {downloadElement.target = '_blank';} else {href = window.URL.createObjectURL(blob); //创建下载的链接}downloadElement.href = href;downloadElement.download = tagFileName + '.' + fileType; //下载后文件名document.body.appendChild(downloadElement);downloadElement.click(); //点击下载document.body.removeChild(downloadElement); //下载完成移除元素if (typeof blob !== 'string') {window.URL.revokeObjectURL(href); //释放掉blob对象}}
</script>

连接口,传id 传入服务器的时候 要改成HTTPS 为了安全,一个是加水印 一个是不加水印的判断和控制

function download(id){$.post("${webroot}/admin/administrator/accessories.json",{id:id},function (res) {// window.open("${webroot}"+res.data.remark);var data = res.data;if(data.b == 'T'){fileLinkToStreamDownload("https://" + window.location.host + "${webroot}" + data.path, data.name, 'pdf')}else{fileLinkToStreamDownload(data.path, data.name, 'pdf')}})}
记录一下  。。

下载文件同时添加水印文字相关推荐

  1. java文件下载并添加水印_Java下载文件加文字水印(Excel、PDF、图片)

    一.导出Excel加文字水印 方法:通过实现准备一个带有水印的Excel文件,然后将数据覆盖该文件然后输出. 比如我准备了如下的一个带水印的模板,我起名为water.xlsx(网上有如何给Excel加 ...

  2. itext 5.3.0实现对pdf文件添加(文字和图片)水印

    在itext 较新的版本中, 对中文的支持还是存在着问题,在网络上得到的信息和多方尝试下,将字体文件xx.TTF放到项目里面,然后加载到BaseFont 中,可行.如下: BaseFont font ...

  3. 怎么在pdf文件上添加水印

    如果文档被盗用或泄露,可以通过水印来追踪责任人并维护自己的权益. 其次,水印可以保护文档的安全性.一些机密的文档,例如财务报表.合同协议等,需要限制访问权限.在这种情况下,可以通过添加水印来标识文档的 ...

  4. 咖啡汪日志——JAVA导出pdf文件加水印 文字+图片、文字

    咖啡汪日志--JAVA导出pdf文件加水印 文字和图片.文字 hello,又大家见面了! 作为一只不是在戏精就是在戏精路上的哈士奇,今天要展示给大家的就是如何快捷地给pdf文件增加各种水印.嗷呜呜,前 ...

  5. pdf拼版插件_pdf文件中的文字批量转曲的办法

    如果PDF格式文件仅仅用于传阅,文件件中的文字转不转曲不会有多大区别,不会影响阅读.但是如果文件用于印刷,从一个电脑传送到另外一台电脑上后,对方电脑中没有pdf文件中所使用的字体,这时对方打开pdf文 ...

  6. Android下载文件

    2019独角兽企业重金招聘Python工程师标准>>> package com.test; import java.io.File; import java.io.FileOutpu ...

  7. 解析:如何在 ASP.NET 中下载文件

    解析:如何在 ASP.NET 中下载文件 来源:博客园 作者:dotnetWalker 这是笔者常被问到的一个问题,如何通过ASP.NET来下载文件,这个问题可大可小,我们先从小的开始.当我们要让用户 ...

  8. 手机端php mime设置,php,_如何使用MIME协议配合表单在iphone手机上下载文件?,php - phpStudy...

    如何使用MIME协议配合表单在iphone手机上下载文件? 做了一个在线下载音乐网站的工具,使用PHP编写,包含MIME协议中的Content-type&Content-Disposition ...

  9. ps快捷图标在哪个文件夹_在PS中制作一个下载文件夹的图标

    在PS中制作一个下载文件夹的图标 出处:多特软件站  时间:2011-03-17  人气:1287我要提问我来说两句 核心提示:在这个教程里,我们将介绍到如何在PS中运用不同的形状和反射制作一个下载文 ...

最新文章

  1. 【收集】前端技能知识图谱
  2. 操作系统复习笔记 07 Process Synchronization 进程同步
  3. 《java入门第一季》之面向对象(包概述)
  4. tensorflow入门_TensorFlow法律和统计入门
  5. RuoYi-Cloud 部署篇_04(windows环境 mysql+nginx版本)
  6. 迷你MVVM框架 avalonjs 学习教程20、路由系统
  7. mysql不可重复读是锁的表吗,Mysql事务,并发问题,锁机制-- 幻读、不可重复读(转)...
  8. Android P2P语音通话实现(思路探讨)
  9. nosql第二章课后习题
  10. MySQL命令行乱码问题的解决
  11. WPF DataGrid的列标题样式设计
  12. 面试大厂,你需要掌握这些面试技巧
  13. QQ群 会话颜色参照表
  14. 《深入理解计算机系统》学习笔记——处理器体系结构
  15. dya-11(周一)新的知识点
  16. 双官能交联剂点击试剂DBCO-PEG4-DBCO
  17. 垃圾分类毕设java程序_北京垃圾分类首日:垃圾怎么分不用手抄,有个小程序助识别...
  18. springboot打jar包步骤
  19. hdunbsp;相遇周期
  20. Rocky Linux ISO国内镜像下载

热门文章

  1. OpenCV初学(5)--------矩阵操作
  2. vant 固定定位不生效
  3. 基于51单片机的智能自动感应垃圾桶
  4. 使用pydicom实现Dicom文件读取与CT图像窗宽窗位调整
  5. 单代号网络图计算例题_还在熬夜计算工期?不会优化工期?学会双代号网络图效率提高80%,升职加薪其实不难...
  6. SQL Server之SQL Trace选项
  7. pointpillars--kitti训练
  8. jpg转换为word可编辑的怎么转换呢
  9. python 选择排序 快速排序
  10. 三菱PLC编程学习1-----PLC驱动电动机正反转梯形图