小学网站怎么做,重庆市造价信息网,厦门手机网站建设是什么,上海装修公司哪家好一点ps: pdf添加水印#xff0c;内容多的时候会往下跑#xff0c;修改为获取当前页面高度#xff0c;进行固定在顶部#xff0c;其他需要可以自己进行调整#xff0c;直接贴代码。
public static void main(String[] args) throws IOException {String localFilePath …ps: pdf添加水印内容多的时候会往下跑修改为获取当前页面高度进行固定在顶部其他需要可以自己进行调整直接贴代码。
public static void main(String[] args) throws IOException {String localFilePath C://1/1.pdf;// 页面高度float pageHeight 0;// 获取当前工作目录的路径String outputFilePath C://1/watermarked.pdf;try {// 创建一个字节数组输出流ByteArrayOutputStream outputStream new ByteArrayOutputStream();// 读取pdf文件PdfReader reader new PdfReader(localFilePath);PdfStamper stamper new PdfStamper(reader, outputStream);// 设置字体和编码BaseFont base BaseFont.createFont(STSong-Light, UniGB-UCS2-H, BaseFont.EMBEDDED);// 改透明度PdfGState gs new PdfGState();gs.setFillOpacity(0.9f);gs.setStrokeOpacity(0.1f);// 在内容上方加水印PdfContentByte under stamper.getOverContent(1);// pageNumber:获取高度的页码PdfDictionary page reader.getPageN(1);PdfArray mediabox (PdfArray) page.get(PdfName.MEDIABOX);if (mediabox ! null) {float llx mediabox.getAsNumber(0).floatValue();float lly mediabox.getAsNumber(1).floatValue();float urx mediabox.getAsNumber(2).floatValue();float ury mediabox.getAsNumber(3).floatValue();// 创建一个 Rectangle 对象包含页面的大小Rectangle pageSize new Rectangle(llx, lly, urx, ury);// 获取页面的高度pageHeight pageSize.getHeight();System.out.println(当前页面高度为 pageHeight);}// 设置保存当前状态under.saveState();// 设置透明度under.setGState(gs);// 开始添加文本under.beginText();// 设置水印字体大小under.setFontAndSize(base, 10);// 设置位置和偏移度右上角under.showTextAligned(Element.ALIGN_BASELINE, 水印内容, 390, pageHeight-20, 0);// 结束添加文本under.endText();stamper.close();reader.close();// 将输出流中的内容转换为字节数组byte[] pdfBytes outputStream.toByteArray();// 将字节数组进行Base64编码byte[] encodedBytes Base64.getEncoder().encode(pdfBytes);byte[] decodedBytes cn.hutool.core.codec.Base64.decode(new String(encodedBytes));FileUtil.writeBytes(decodedBytes, outputFilePath);} catch (Exception e) {e.printStackTrace();}}