大家好,欢迎来到IT知识分享网。
java操作pdf之iText快速入门
iText是著名的开放项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。
iText官网: http://itextpdf.com/
官网示例: http://itextpdf.com/examples/
更多示例: https://kb.itextpdf.com/home/it5kb/examples
Maven依赖:
<!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf --> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.13</version> </dependency> <!-- https://mvnrepository.com/artifact/com.itextpdf/itext-asian --> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.2.0</version> </dependency>
添加水印
文字水印
public class PdfWaterMark { public static final String RESULT = "src/main/resources/font_water_mark.pdf"; public static void main(String[] args) throws FileNotFoundException, DocumentException { Document document = new Document(); PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(RESULT)); // 打开文档 document.open(); // 加入水印 PdfContentByte waterMar = pdfWriter.getDirectContentUnder(); // 开始设置水印 waterMar.beginText(); // 设置水印透明度 PdfGState gs = new PdfGState(); // 设置填充字体不透明度为0.4f gs.setFillOpacity(0.4f); try { // 设置水印字体参数及大小 (字体参数,字体编码格式,是否将字体信息嵌入到pdf中(一般不需要嵌入),字体大小) waterMar.setFontAndSize(BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED), 60); // 设置透明度 waterMar.setGState(gs); // 设置水印对齐方式 水印内容 X坐标 Y坐标 旋转角度 waterMar.showTextAligned(Element.ALIGN_RIGHT, "www.newland.com", 500, 430, 45); // 设置水印颜色 waterMar.setColorFill(BaseColor.GRAY); //结束设置 waterMar.endText(); waterMar.stroke(); } catch (IOException e) { e.printStackTrace(); } // 加入文档内容 document.add(new Paragraph("my first pdf demo")); // 关闭文档 document.close(); pdfWriter.close(); } }
图片水印
public class PdfWaterMark { public static final String RESULT = "src/main/resources/img_water_mark.pdf"; public static void main(String[] args) throws FileNotFoundException, DocumentException { Document document = new Document(); PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(RESULT)); // 打开文档 document.open(); // 加入水印 PdfContentByte waterMar = pdfWriter.getDirectContentUnder(); // 开始设置水印 waterMar.beginText(); // 设置水印透明度 PdfGState gs = new PdfGState(); // 设置填充字体不透明度为0.4f gs.setFillOpacity(0.4f); try { Image image = Image.getInstance("D:\\Folder\\image\\logo.png"); // 设置坐标 绝对位置 X Y image.setAbsolutePosition(200, 300); // 设置旋转弧度 image.setRotation(30);// 旋转 弧度 // 设置旋转角度 image.setRotationDegrees(45);// 旋转 角度 // 设置等比缩放 image.scalePercent(30);// 依照比例缩放 // image.scaleAbsolute(200,100);//自定义大小 // 设置透明度 waterMar.setGState(gs); // 添加水印图片 waterMar.addImage(image); // 设置透明度 waterMar.setGState(gs); //结束设置 waterMar.endText(); waterMar.stroke(); } catch (IOException e) { e.printStackTrace(); } // 加入文档内容 document.add(new Paragraph("hello world")); // 关闭文档 document.close(); pdfWriter.close(); } }
给已经存在的pdf添加文字水印
/** * 已有的pdf文件添加水印 * @param inputFile:要加水印的源文件的路径 * @param outputFile:加水印后文件的输出路径 * @param waterMarkName:要加的水印名 */ public static void waterMark(String inputFile,String outputFile, String waterMarkName) { try { PdfReader reader = new PdfReader(inputFile); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outputFile)); BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED); PdfGState gs = new PdfGState(); //改透明度 gs.setFillOpacity(0.5f); gs.setStrokeOpacity(0.4f); int total = reader.getNumberOfPages() + 1; JLabel label = new JLabel(); label.setText(waterMarkName); PdfContentByte under; // 添加一个水印 for (int i = 1; i < total; i++) { // 在内容上方加水印 under = stamper.getOverContent(i); //在内容下方加水印 //under = stamper.getUnderContent(i); gs.setFillOpacity(0.5f); under.setGState(gs); under.beginText(); //改变颜色 under.setColorFill(BaseColor.LIGHT_GRAY); //改水印文字大小 under.setFontAndSize(base, 100); under.setTextMatrix(70, 200); //后3个参数,x坐标,y坐标,角度 under.showTextAligned(Element.ALIGN_CENTER, waterMarkName, 300, 350, 55); under.endText(); } stamper.close(); reader.close(); } catch (Exception e) { e.printStackTrace(); } }
给已经存在的pdf添加图片水印
/** * @param inputFile:要加水印的源文件的路径 * @param outputFile:加水印后文件的输出路径 * @param pocturePath: 图片的位置 */ public static void pictureWaterMark(String inputFile, String outputFile, String pocturePath) { try { PdfReader reader = new PdfReader(inputFile); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outputFile)); PdfGState gs = new PdfGState(); //设置透明度 gs.setFillOpacity(0.3f); gs.setStrokeOpacity(0.4f); int total = reader.getNumberOfPages() + 1; PdfContentByte waterMar; // 添加一个水印 for (int i = 1; i < total; i++) { // 在内容上方加水印 waterMar = stamper.getOverContent(i); //在内容下方加水印 //under = stamper.getUnderContent(i); waterMar.setGState(gs); waterMar.beginText(); Image image = Image.getInstance(pocturePath); // 设置坐标 绝对位置 X Y image.setAbsolutePosition(150, 250); // 设置旋转弧度 image.setRotation(30);// 旋转 弧度 // 设置旋转角度 image.setRotationDegrees(45);// 旋转 角度 // 设置等比缩放 image.scalePercent(30);// 依照比例缩放 // image.scaleAbsolute(200,100);//自定义大小 // 添加水印图片 waterMar.addImage(image); // 设置透明度 waterMar.setGState(gs); //结束设置 waterMar.endText(); waterMar.stroke(); } stamper.close(); reader.close(); } catch (Exception e) { e.printStackTrace(); } }
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/54028.html