itext7 PDF添加水印,获取页面高度,添加到页面右上角
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(); } }
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。