当前位置: 首页 > news >正文

最新网站哈尔滨专业做网站推广

最新网站,哈尔滨专业做网站推广,做网站设计怎么样,禅知 wordpressitext PDF文件打印水印 前言#xff1a;公司有个需求#xff0c;打印的合同模板要加上水印#xff0c;但是由于itext版本问题#xff0c;网上千篇一律的方法基本都没办法有效使用#xff0c;然后自己琢磨下#xff0c;记录下实现水印的功能的笔记。多页上都加上水印…itext PDF文件打印水印 前言公司有个需求打印的合同模板要加上水印但是由于itext版本问题网上千篇一律的方法基本都没办法有效使用然后自己琢磨下记录下实现水印的功能的笔记。多页上都加上水印核心就是加上自定义处理器实现水印功能. PS: 这个也不是适用于itextpdf的所有版本项目中引用的版本是 com.itextpdf:kernel:7.2.3如其他版本不适用请自行调整代码 1.实现文字水印 实现的效果水印加上透明度不影响原先的内容文字45度倾斜文体是自定义字体然后就是平铺真个整个页面。 TextWatermarkEventHandler import com.itextpdf.kernel.colors.ColorConstants; import com.itextpdf.kernel.events.Event; import com.itextpdf.kernel.events.IEventHandler; import com.itextpdf.kernel.events.PdfDocumentEvent; import com.itextpdf.kernel.font.PdfFont; import com.itextpdf.kernel.geom.Rectangle; import com.itextpdf.kernel.pdf.PdfDocument; import com.itextpdf.kernel.pdf.PdfPage; import com.itextpdf.kernel.pdf.canvas.PdfCanvas; import com.itextpdf.kernel.pdf.extgstate.PdfExtGState; import lombok.extern.slf4j.Slf4j;Slf4j public class TextWatermarkEventHandler implements IEventHandler {private String watermarkText;private PdfFont font;private float fontSize;private static final float WIDTH_SPACING 20;private static final float HEIGHT_SPACING 130;private static final float ANGLE 45;private static final float TRANSPARENCY 0.3f;// 构造函数传入水印文字、字体、大小、水平间距、垂直间距和旋转角度public TextWatermarkEventHandler(String text, PdfFont font, float fontSize) {this.watermarkText text;this.font font;this.fontSize fontSize;}Overridepublic void handleEvent(Event event) {PdfDocumentEvent docEvent (PdfDocumentEvent) event;PdfDocument pdfDoc docEvent.getDocument();PdfPage page docEvent.getPage();// 获取页面大小Rectangle pageSize page.getPageSize();PdfCanvas canvas new PdfCanvas(page.newContentStreamBefore(), page.getResources(), pdfDoc);// 计算可用的页面宽度和高度float availableWidth pageSize.getWidth();float availableHeight pageSize.getHeight();// 创建图形状态并设置透明度PdfExtGState gState new PdfExtGState();gState.setFillOpacity(TRANSPARENCY); // 设置透明度为 0.3// 文字的宽度float textWidth font.getWidth(watermarkText, fontSize);// 调整初始绘制位置float startXOffset -textWidth; // 从负数开始float startYOffset -availableWidth; // 从负数开始// 绘制每一行水印文字for (float startY startYOffset; startY availableHeight fontSize; startY fontSize HEIGHT_SPACING) {// 保存当前画布状态确保透明度只影响水印canvas.saveState();// 设置透明度仅影响水印canvas.setExtGState(gState);// 设置字体和大小canvas.setFontAndSize(font, fontSize);// 设置文字颜色灰色水印canvas.setFillColor(ColorConstants.LIGHT_GRAY);// 整行旋转canvas.concatMatrix((float) Math.cos(Math.toRadians(ANGLE)), (float) Math.sin(Math.toRadians(ANGLE)),(float) -Math.sin(Math.toRadians(ANGLE)), (float) Math.cos(Math.toRadians(ANGLE)),0, startY);// 绘制这一行的文字水印for (float x startXOffset; x availableWidth textWidth; x textWidth WIDTH_SPACING) {canvas.beginText();canvas.moveText(x, 0);canvas.showText(watermarkText);canvas.endText();}// 恢复画布状态确保透明度只影响水印canvas.restoreState();}// 释放画布资源canvas.release();} }调用TextWatermarkEventHandler监听器 // 自定义字体 String fontPath WebUtils.getClasspath() File.separator static File.separator font File.separatorsimsun.ttf; PdfFont watermarkFont PdfFontFactory.createFont(fontPath, PdfEncodings.IDENTITY_H, PdfFontFactory.EmbeddingStrategy.PREFER_EMBEDDED); TextWatermarkEventHandler watermarkEventHandler new TextWatermarkEventHandler(你是个大聪明呀,watermarkFont,30); pdf.addEventHandler(PdfDocumentEvent.END_PAGE, watermarkEventHandler);实现的效果(截取部分) 2.实现图片水印 实现的效果水印加上透明度不影响原先的内容图片45度倾斜图片进行缩放处理然后就是平铺真个整个页面。ps此处的图片是经过缩放处理后的图片了 ImageWatermarkEventHandler import com.itextpdf.io.image.ImageData; import com.itextpdf.io.image.ImageDataFactory; import com.itextpdf.kernel.events.Event; import com.itextpdf.kernel.events.IEventHandler; import com.itextpdf.kernel.events.PdfDocumentEvent; import com.itextpdf.kernel.geom.Rectangle; import com.itextpdf.kernel.pdf.PdfDocument; import com.itextpdf.kernel.pdf.PdfPage; import com.itextpdf.kernel.pdf.canvas.PdfCanvas; import com.itextpdf.kernel.pdf.extgstate.PdfExtGState; import com.itextpdf.kernel.pdf.xobject.PdfImageXObject; import lombok.extern.slf4j.Slf4j;Slf4j public class ImageWatermarkEventHandler implements IEventHandler {private String imagePath;private static final float SCALE 1;private static final float WIDTH_SPACING 20;private static final float HEIGHT_SPACING 130;private static final float ANGLE 45;private static final float TRANSPARENCY 0.3f;// 构造函数传入水印图片路径public ImageWatermarkEventHandler(String imagePath) {this.imagePath imagePath;}Overridepublic void handleEvent(Event event) {// 获取事件类型PdfDocumentEvent docEvent (PdfDocumentEvent) event;PdfDocument pdfDoc docEvent.getDocument();PdfPage page docEvent.getPage();// 获取页面尺寸Rectangle pageSize page.getPageSize();PdfCanvas canvas new PdfCanvas(page.newContentStreamBefore(), page.getResources(), pdfDoc);ImageData imageData null;try {imageData ImageDataFactory.create(imagePath);PdfImageXObject watermarkImage new PdfImageXObject(imageData);// 获取图片的原始宽高按比例缩放float imgWidth watermarkImage.getWidth() ;float imgHeight watermarkImage.getHeight() ;// 计算可用的页面宽度和高度float availableWidth pageSize.getWidth(); // float availableHeight pageSize.getHeight();// 创建图形状态并设置透明度PdfExtGState gState new PdfExtGState();gState.setFillOpacity(TRANSPARENCY); // 设置透明度为 0.3// 在页面上平铺水印图片for (float y -availableWidth; y pageSize.getHeight()*2; y imgHeight HEIGHT_SPACING) {for (float x 0; x pageSize.getWidth()*2; x imgWidth WIDTH_SPACING) {// 保存当前的画布状态canvas.saveState();// 设置水印的透明度canvas.setExtGState(gState);// 将图片水印旋转canvas.concatMatrix(Math.cos(Math.toRadians(ANGLE)),Math.sin(Math.toRadians(ANGLE)),-Math.sin(Math.toRadians(ANGLE)), Math.cos(Math.toRadians(ANGLE)),0, 0); // 旋转canvas.addXObjectAt(watermarkImage, x, y); // x, y 位置// 恢复画布状态canvas.restoreState();}}// 结束页面修改canvas.release();} catch (Exception e) {log.error(pdf添加水印报错:{},e.getMessage());}} }调用TextWatermarkEventHandler监听器 String watermarkImagePath WebUtils.getClasspath() File.separator static File.separator image File.separatorxxxx.jpg; ImageWatermarkEventHandler watermarkEventHandler new ImageWatermarkEventHandler(watermarkImagePath); pdf.addEventHandler(PdfDocumentEvent.END_PAGE, watermarkEventHandler);实现的效果(截取部分)
http://www.dnsts.com.cn/news/247565.html

相关文章:

  • 网站工信部超链接怎么做福州公司网站建设
  • 旅游网站的目的如何在建设部网站查企业资质
  • 湖北省建设主管网站wordpress cms主题
  • 建筑企业招聘网站百度推广怎么收费的
  • 北京网站建公司新闻茶叶网站程序
  • 网站建设 规范公众号怎么进入
  • 长春企业模板建站活动策划费用明细
  • 做网站负责人风险综合服务门户网站建设
  • 网络舆情监测seo优化软件购买
  • 适合个人做的网站有哪些东西吗asp企业营销型网站建设
  • wordpress站长统计代码wordpress数据查询系统
  • 建设银行手机银行下载官方网站下载手机上的免费销售网站建设
  • 怎样做网站不花钱太原全网推广
  • 高大上 网站怎么建立
  • 做网站如何把支付宝微信吧西昌网站制作
  • 自己做网站步骤 域名网站建设技术的发展
  • 金华做网站如何做自己网站的访问记录
  • 站长工具百科centos wordpress伪静态
  • 江苏省建设执业资格中心网站网站上的产品介绍如何做
  • 优秀网站设计php网站开发百度百科
  • 易班网站建设的意义二网站手
  • 网站服务费做管理费用网站 功能呢
  • 网站制作比较好的制作公司惠州网站建设制作公司
  • 建一个所在区域网站需要多少资金软件下载中心
  • 朝阳区手机网站建设服务wordpress 影音插件
  • 大学生课程设计网站挂机宝可以做网站
  • 企业网站的建立要做的准备广州百度网站推广
  • 俱乐部网站php源码违法人员都是怎么建设网站的
  • 郑州建设网站的公司网站主题设计特色
  • 交易网站建设需要学什么自己怎么给网站做优化