700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > java springboot使用itext 为PDF添加文字水印并铺满屏

java springboot使用itext 为PDF添加文字水印并铺满屏

时间:2022-04-26 11:25:33

相关推荐

java springboot使用itext 为PDF添加文字水印并铺满屏

java springboot使用itextpdf 为PDF添加文字水印并铺满屏

代码如下如果对你有帮助希望你能点个赞结尾

这是我第一次发博客,也是第一次使用itext添加水印。遇到一些大大小小的问题,不过总算了解决了。再次给大家分享一下我的代码,有什么问题都可以给我发消息、评论,我看到的都会回复。

我使用的是springboot+maven项目

代码如下

pom依赖,不同的版本可能会冲突,这一套我已经试验过不会冲突,可以放心 食用。 jar包下载提取码 26ok

<!--为PDF加水印依赖 start--><!-- /artifact/com.itextpdf/itextpdf --><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13</version></dependency><!-- /artifact/com.itextpdf/itext-asian --><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency><!--end-->

代码部分,这是一个写好的方法直接传参进去就能使用。

private boolean addwaterMark(String inputFile, String outputFile, String waterMarkName,float opacity, int fontsize, int angle, int heightdensity, int widthdensity) {PdfReader reader = null;PdfStamper stamper = null;try {int interval = -5;reader = new PdfReader(inputFile);stamper = new PdfStamper(reader, new FileOutputStream(outputFile));BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);Rectangle pageRect = null;PdfGState gs = new PdfGState();//这里是透明度设置gs.setFillOpacity(opacity);//这里是条纹不透明度gs.setStrokeOpacity(0.2f);int total = reader.getNumberOfPages() + 1;System.out.println("合同页数:" + reader.getNumberOfPages());JLabel label = new JLabel();FontMetrics metrics;int textH = 0;int textW = 0;label.setText(waterMarkName);metrics = label.getFontMetrics(label.getFont());textH = metrics.getHeight(); //字符串的高, 只和字体有关textW = metrics.stringWidth(label.getText()); //字符串的宽PdfContentByte under;//这个循环是确保每一张PDF都加上水印for (int i = 1; i < total; i++) {pageRect = reader.getPageSizeWithRotation(i);under = stamper.getOverContent(i); //在内容上方添加水印//under = stamper.getUnderContent(i); //在内容下方添加水印under.saveState();under.setGState(gs);under.beginText();//under.setColorFill(BaseColor.PINK); //添加文字颜色 不能动态改变 放弃使用under.setFontAndSize(base, fontsize); //这里是水印字体大小for (int height = textH; height < pageRect.getHeight()*2; height = height + textH * heightdensity) {for (int width = textW; width < pageRect.getWidth()*1.5 + textW; width = width + textW * widthdensity) {// rotation:倾斜角度under.showTextAligned(Element.ALIGN_LEFT, waterMarkName, width - textW, height - textH, angle);}}//添加水印文字under.endText();}System.out.println("添加水印成功!");return true;} catch (IOException e) {System.out.println("添加水印失败!错误信息为: " + e);e.printStackTrace();return false;} catch (DocumentException e) {System.out.println("添加水印失败!错误信息为: " + e);e.printStackTrace();return false;} finally {//关闭流if (stamper != null) {try {stamper.close();} catch (DocumentException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}if (reader != null) {reader.close();}}}

方法需要的参数

String inputFile= "C:/watermark/测试数据.pdf"; //需要添加水印的文件String outputFile= "C:/watermark/(已加印)测试数据.pdf"; //添加完水印的文件存放路径String waterMarkName="测试水印"; //需要添加的水印文字float opacity=0.3f;//水印字体透明度int fontsize=30; //水印字体大小int angle=30; //水印倾斜角度(0-360)int heightdensity=20; //数值越大每页竖向水印越少int widthdensity=2; //数值越大每页横向水印越少//调用添加水印方法addwaterMark(inputFile, outputFile, waterMarkName, opacity, fontsize, angle, heightdensity, widthdensity)

如果对你有帮助希望你能点个赞

结尾

有需要源码的也可以直接私信我,留言发邮箱也行。我看到的话邮箱发给你们。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。