Java使用itextpdf实现生成PDF并添加图片,水印和文字
一、概述
在上一篇博客中,介绍了excel转pdf的方法;在这里,整理了一些方法:在生成pdf时,插入图片、新增水印、添加文字等。
二、依赖
依赖和上一篇博客相同,在这里不再赘述。
三、相关工具类
1. FontGenerater.java (在上篇博客中,已贴出)
2. Excel2Pdf.java (在上篇博客中,已贴出)
3. PDFUtil.java
public class PDFUtil { /** * 给pdf添加图片水印 * @param waterMar * @param imgpath 图片路径 * @throws Exception */ public static void addImgWaterMark(PdfContentByte waterMar, String imgpath) throws Exception { waterMar.beginText(); PdfGState gs = new PdfGState(); // 设置填充字体不透明度为0.4f gs.setFillOpacity(0.2f); waterMar.setFontAndSize(FontGenerater.getFont(FontGenerater.FONT_SONTI_NAME), 40); // 设置透明度 waterMar.setGState(gs); // 设置水印对齐方式 水印内容 X坐标 Y坐标 旋转角度 Image img = Image.getInstance(imgpath); img.setAbsolutePosition(200, 380); img.scaleAbsolute(200, 200); waterMar.addImage(img); // 设置水印颜色 waterMar.setColorFill(BaseColor.GRAY); //结束设置 waterMar.endText(); waterMar.stroke(); } /** * 给pdf添加文字水印(平铺) * @param waterMar * @param text 水印文本 * @throws Exception */ public static void addTextFullWaterMark(PdfContentByte waterMar, String text) throws Exception { waterMar.beginText(); PdfGState gs = new PdfGState(); // 设置填充字体不透明度为0.4f gs.setFillOpacity(0.2f); waterMar.setFontAndSize(FontGenerater.getFont(FontGenerater.FONT_SONTI_NAME), 40); // 设置透明度 waterMar.setGState(gs); // 设置水印对齐方式 水印内容 X坐标 Y坐标 旋转角度 for (int x = 0; x <= 700; x += 200) { for (int y = 0; y <= 800; y += 200) { waterMar.showTextAligned(Element.ALIGN_RIGHT, text, x, y, 35); } } // 设置水印颜色 waterMar.setColorFill(BaseColor.GRAY); //结束设置 waterMar.endText(); waterMar.stroke(); } /** * 给pdf添加文字水印(单个) * @param waterMar * @param text 水印文本 * @throws Exception */ public static void addTextWaterMark(PdfContentByte waterMar, String text) throws Exception { waterMar.beginText(); PdfGState gs = new PdfGState(); // 设置填充字体不透明度为0.4f gs.setFillOpacity(0.2f); waterMar.setFontAndSize(FontGenerater.getFont(FontGenerater.FONT_SONTI_NAME), 80); // 设置透明度 waterMar.setGState(gs); // 设置水印对齐方式 水印内容 X坐标 Y坐标 旋转角度 waterMar.showTextAligned(Element.ALIGN_RIGHT, text, 475, 600, 45); // 设置水印颜色 waterMar.setColorFill(BaseColor.GRAY); //结束设置 waterMar.endText(); waterMar.stroke(); } /** * 添加页眉、页脚 * @param writer * @param content * @param pagewidth * @param pageheight * @throws Exception */ public static void addText(PdfWriter writer, String content, int pagewidth, int pageheight) throws Exception { PdfPTable table = new PdfPTable(1); table.setTotalWidth(530); PdfPCell cell = new PdfPCell(new Phrase(content, Excel2Pdf.getFont(FontGenerater.FONT_SONTI_NAME, 12, false))); cell.setBorder(0); // cell.setPaddingLeft(30f); cell.setPaddingTop(-15f); cell.setPaddingRight(20f); table.addCell(cell); Header event = new Header(table, pagewidth, pageheight); writer.setPageEvent(null); writer.setPageEvent(event); } //页眉事件 private static class Header extends PdfPageEventHelper { public static PdfPTable header; public int pagewidth; public int pageheight; public Header(PdfPTable header, int pagewidth, int pageheight) { Header.header = header; this.pagewidth = pagewidth; this.pageheight = pageheight; } @Override public void onEndPage(PdfWriter writer, Document document) { //把页眉表格定位 header.writeSelectedRows(0, -1, this.pagewidth, this.pageheight, writer.getDirectContent()); } } /** * 添加图片 * @param document * @param imgPath * @param newWidth * @param newHeight * @param absoluteX * @param absoluteY * @throws IOException * @throws DocumentException */ public static void addImg(Document document, String imgPath, float newWidth, float newHeight, float absoluteX, float absoluteY) throws IOException, DocumentException { Image img1 = Image.getInstance(imgPath); img1.setAbsolutePosition(absoluteX, absoluteY); img1.scaleAbsolute(newWidth, newHeight); document.add(img1); } }
四、示例
1.添加图片水印
// A4大小 RectangleReadOnly shuban = new RectangleReadOnly(PageSize.A4); Document document = new Document(shuban); // 获取一个pdfwriter实例 FileOutputStream stream = new FileOutputStream("D:\\website\\demo.pdf"); PdfWriter writer = PdfWriter.getInstance(document, stream); // 打开document document.open(); // 新增页 document.newPage(); // **************添加水印************** PdfContentByte waterMar = writer.getDirectContentUnder(); PDFUtil.addImgWaterMark(waterMar, "D:\\website\\java.png"); // **************完成图片水印添加*********** // 关闭 document.close(); writer.close(); stream.close();
添加图片水印示例
2.添加平铺的文字水印
// **************添加平铺的文字水印************** PdfContentByte waterMar = writer.getDirectContentUnder(); String text = "这是一个示例"; PDFUtil.addTextFullWaterMark(waterMar, text); // **************完成水印***********************
添加平铺的文字水印示例
3.添加单个文字水印
// **************添加单个的文字水印************** PdfContentByte waterMar = writer.getDirectContentUnder(); String text = "这是一个示例"; PDFUtil.addTextWaterMark(waterMar, text); // **************完成水印***********************
添加单个文字水印示例
4.插入文字、图片
// 插入文字,最后两个参数是文字的位置 PDFUtil.addText(writer, "这是一段文字", 480, 802); // 插入图片,第二、三个参数表示图片宽高,第四、五个参数表示位置 PDFUtil.addImg(document, "D:\\website\\start.png", 100, 100, 70, 700);
插入文字、图片示例
以上就是Java使用itextpdf实现生成PDF并添加图片,水印和文字的详细内容,更多关于Java itextpdf生成PDF的资料请关注脚本之家其它相关文章!
相关文章
SpringSecurity自定义AuthenticationProvider无法@Autowire的解决
这篇文章主要介绍了SpringSecurity自定义AuthenticationProvider无法@Autowire的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-12-12java 用redisTemplate 的 Operations存取list集合操作
这篇文章主要介绍了java 用redisTemplate 的 Operations存取list集合操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-08-08Clojure 与Java对比少数据结构多函数胜过多个单独类的优点
这篇文章主要介绍了Clojure 与Java对比少数据结构多函数胜过多个单独类的优点,在Clojure中,我们一次又一次地使用相同的数据结构,并在其上运行许多函,更多相关介绍需要的朋友可以参考一下下面文章内容2022-06-06
最新评论