Itext操作PDF
<!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
<dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.13</version> </dependency> //源码 package test; import java.io.FileNotFoundException; import java.io.FileOutputStream; import com.itextpdf.text.BaseColor; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Image; import com.itextpdf.text.Rectangle; import com.itextpdf.text.RectangleReadOnly; import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.PdfContentByte; import com.itextpdf.text.pdf.PdfWriter; public class ReadPDF { private final static String FILE_DIR="D:\\"; /** * pdf文件基本操作 * @param args * @throws documentumentException * @throws FileNotFoundException * @throws DocumentException */ public static void main(String[] args) throws FileNotFoundException, DocumentException { try { //页面大小 //Rectangle rect = new Rectangle(PageSize.B5.rotate()); //rotate()宽和高交替数值 Rectangle rect = new Rectangle(new RectangleReadOnly(282.86f,424.99f));//宽、高 单位/厘 //创建 Document document = new Document(rect); //写入pdf PdfWriter writer=PdfWriter.getInstance(document, new FileOutputStream(FILE_DIR + "createSamplePDF.pdf")); //页边空白 document.setMargins(0, 0, 0, 0); document.open(); //开始向文档正文添加内容 //内容:—————————————— PdfContentByte cbHG = writer.getDirectContent(); BaseFont bfHG= BaseFont.createFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); cbHG.beginText(); cbHG.setFontAndSize(bfHG, 15.6f); cbHG.setTextMatrix(0, 52); cbHG.showText("————————————————————————————————————————————"); cbHG.endText(); //内容:YYZ PdfContentByte cbYYZ = writer.getDirectContent(); BaseFont bfYYZ = BaseFont.createFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); cbYYZ.beginText(); cbYYZ.setFontAndSize(bfYYZ, 15.6f); cbYYZ.setTextMatrix(225, 10); cbYYZ.showText("YYZ"); cbYYZ.endText(); //内容:Order NO: PdfContentByte cbOrderNO = writer.getDirectContent(); BaseFont bfOrderNO = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); cbOrderNO.beginText(); cbOrderNO.setFontAndSize(bfOrderNO, 9.36f); cbOrderNO.setTextMatrix(133, 40); cbOrderNO.showText("Order NO:"); cbOrderNO.endText(); //内容:Order NO: PdfContentByte cbNO = writer.getDirectContent(); BaseFont bfNO = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); cbNO.beginText(); cbNO.setFontAndSize(bfNO, 9.36f); cbNO.setTextMatrix(180, 40); cbNO.showText("JCS0858491222WS"); cbNO.endText(); //内容:SKU: 6204430090*1; PdfContentByte cbSKU = writer.getDirectContent(); BaseFont bfSKU = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); cbSKU.beginText(); cbSKU.setFontAndSize(bfSKU, 9.36f); cbSKU.setTextMatrix(133, 30); cbSKU.showText("SKU:6204430090*1;"); cbSKU.endText(); //内容:IN/NIF 442 SPEC 3696 V2 PdfContentByte cbNIF = writer.getDirectContent(); BaseFont bfNIF = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); cbNIF.beginText(); cbNIF.setFontAndSize(bfNIF, 10.32f); cbNIF.setTextMatrix(5, 45); cbNIF.showText("IN/NIF 442 SPEC 3696 V2"); cbNIF.endText(); /* * Paragraph tParagraphYYZ = new Paragraph(); Font fontYYZ = new * Font(Font.FontFamily.UNDEFINED, 15.6f, Font.BOLD, BaseColor.BLACK); * //字体,字体大小,粗体、字体选择黑色 Chunk YYZ = new Chunk("YYZ", fontYYZ); * tParagraphYYZ.setIndentationLeft(228f);// 左缩进 * //tParagraph.setIndentationRight(12);// 右缩进 * //tParagraph.setFirstLineIndent(228);// 首行缩进 //tParagraph.setLeading(400f);// * 行间距 YYZ.setTextRise(-383f); tParagraphYYZ.add(YYZ); */ Image imgOIT = Image.getInstance("D:\\1573461775(1).png"); imgOIT.setAlignment(Image.LEFT); imgOIT.setBorder(Image.BOX); imgOIT.setBorderColor(BaseColor.WHITE); imgOIT.scaleToFit(35, 17);// 大小 imgOIT.setAbsolutePosition(160,10); Image imgYIWEI = Image.getInstance("D:\\barcode.png"); imgYIWEI.setAlignment(Image.LEFT); imgYIWEI.setBorder(Image.BOX); imgYIWEI.setBorderColor(BaseColor.WHITE); imgYIWEI.scaleToFit(200, 30);// 大小 imgYIWEI.setAbsolutePosition(13,8); /* * Paragraph tParagraphOrderNO = new Paragraph(); Font fontOrderNO = new * Font(Font.FontFamily.UNDEFINED, 9.36f, Font.NORMAL, BaseColor.BLACK); * //字体,字体大小,粗体、字体选择黑色 Font fontNO = new Font(Font.FontFamily.UNDEFINED, 10.32f, * Font.NORMAL, BaseColor.BLACK); //字体,字体大小,粗体、字体选择黑色 Chunk orderNO = new * Chunk("Order NO: ",fontOrderNO); * tParagraphOrderNO.setIndentationLeft(130f);// 左缩进 * //tParagraphOrderNO.setLeading(350f);//行间距 orderNO.setTextRise(-365f); * tParagraphOrderNO.add(orderNO); Chunk NO = new * Chunk("JCS0858491222WS",fontNO); NO.setTextRise(-365f); * tParagraphOrderNO.add(NO); * * * * * Paragraph tParagraphSKU = new Paragraph(); Chunk SKU = new * Chunk("SKU: 6204430090*1;",fontOrderNO); * tParagraphSKU.setIndentationLeft(130f);// 左缩进 SKU.setTextRise(-345f); * tParagraphSKU.add(SKU); */ /* * Paragraph tParagraphNIF= new Paragraph(); Chunk NIF = new * Chunk("IN/NIF 442 SPEC 3696 V2",fontNO); //NIF.setTextRise(-350f); * tParagraphNIF.add(NIF); * * document.add(tParagraphNIF); */ document.add(imgOIT); document.add(imgYIWEI); /* * document.add(tParagraphOrderNO); document.add(tParagraphYYZ); * document.add(tParagraphSKU); */ document.close(); }catch (Exception e) { // TODO: handle exception System.out.println(e); }finally { System.out.println("执行完成!"); } } }
package test; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import com.itextpdf.text.BaseColor; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Image; import com.itextpdf.text.PageSize; import com.itextpdf.text.Rectangle; import com.itextpdf.text.RectangleReadOnly; import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.PdfContentByte; import com.itextpdf.text.pdf.PdfImportedPage; import com.itextpdf.text.pdf.PdfReader; import com.itextpdf.text.pdf.PdfStamper; import com.itextpdf.text.pdf.PdfTemplate; import com.itextpdf.text.pdf.PdfWriter; import com.itextpdf.text.pdf.parser.PdfTextExtractor; public class Test { public static void main(String[] args) throws DocumentException, IOException { PdfStamper stamper = null; try { PdfReader reader = new PdfReader("D://JCS1104017038IN.pdf"); String pageContent = PdfTextExtractor.getTextFromPage(reader, 1); stamper = new PdfStamper(reader,new FileOutputStream("d:/help2.pdf")); stamper.setRotateContents(true); //获得pdfstamper在当前页的上层打印内容.也就是说 这些内容会覆盖在原先的pdf内容之上. PdfContentByte over = stamper.getOverContent(1); //开始写入文本 over.beginText(); //设置字体和大小 BaseFont bfSKU = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); over.setFontAndSize(bfSKU, 10); over.setColorFill(BaseColor.RED); //设置字体的输出位置 over.setTextMatrix(0, -10); //要输出的text over.showText("YYN"); over.endText(); System.out.println("执行完成"); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); }finally { stamper.close(); } } /** * 获取来的pdf 更改页面大小 * @param args * @throws DocumentException * @throws IOException */ public static void main(String[] args) throws DocumentException, IOException { PdfReader reader = new PdfReader("D://JCS1104017038IN.pdf"); Document doc = new Document(new RectangleReadOnly(282.86f,424.99f), 0, 0, 0, 0); PdfWriter writer = PdfWriter.getInstance(doc, new FileOutputStream("d:/help2.pdf")); doc.open(); PdfContentByte cb = writer.getDirectContent(); for(int i=1; i<=reader.getNumberOfPages(); i++){ doc.newPage(); PdfImportedPage page = writer.getImportedPage(reader, i); // cb.addTemplate(page, 1, 0, 0, 1, 1, 1); cb.addTemplate(page, 0,45);//调整原有pdf页面的格式改变坐标位置 } //内容:—————————————— PdfContentByte cbHG = writer.getDirectContent(); BaseFont bfHG= BaseFont.createFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); cbHG.beginText(); cbHG.setFontAndSize(bfHG, 15.6f); cbHG.setTextMatrix(0, 52); cbHG.showText("————————————————————————————————————————————"); cbHG.endText(); //内容:YYZ PdfContentByte cbYYZ = writer.getDirectContent(); BaseFont bfYYZ = BaseFont.createFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); cbYYZ.beginText(); cbYYZ.setFontAndSize(bfYYZ, 15.6f); cbYYZ.setTextMatrix(225, 10); cbYYZ.showText("YYZ"); cbYYZ.endText(); //内容:Order NO: PdfContentByte cbOrderNO = writer.getDirectContent(); BaseFont bfOrderNO = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); cbOrderNO.beginText(); cbOrderNO.setFontAndSize(bfOrderNO, 9.36f); cbOrderNO.setTextMatrix(133, 40); cbOrderNO.showText("Order NO:"); cbOrderNO.endText(); //内容:Order NO: PdfContentByte cbNO = writer.getDirectContent(); BaseFont bfNO = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); cbNO.beginText(); cbNO.setFontAndSize(bfNO, 9.36f); cbNO.setTextMatrix(180, 40); cbNO.showText("JCS8888888888WS"); cbNO.endText(); //内容:SKU: 6204430090*1; PdfContentByte cbSKU = writer.getDirectContent(); BaseFont bfSKU = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); cbSKU.beginText(); cbSKU.setFontAndSize(bfSKU, 9.36f); cbSKU.setTextMatrix(133, 30); cbSKU.showText("SKU:688888888*1;"); cbSKU.endText(); //内容:IN/NIF 442 SPEC 3696 V2 PdfContentByte cbNIF = writer.getDirectContent(); BaseFont bfNIF = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); cbNIF.beginText(); cbNIF.setFontAndSize(bfNIF, 10.32f); cbNIF.setTextMatrix(5, 45); cbNIF.showText("IN/NIF 888 SPEC 8888 V2"); cbNIF.endText(); Image imgOIT = Image.getInstance("D:\\1573461775(1).png"); imgOIT.setAlignment(Image.LEFT); imgOIT.setBorder(Image.BOX); imgOIT.setBorderColor(BaseColor.WHITE); imgOIT.scaleToFit(35, 17);// 大小 imgOIT.setAbsolutePosition(160,10); Image imgYIWEI = Image.getInstance("D:\\barcode.png"); imgYIWEI.setAlignment(Image.LEFT); imgYIWEI.setBorder(Image.BOX); imgYIWEI.setBorderColor(BaseColor.WHITE); imgYIWEI.scaleToFit(200, 30);// 大小 imgYIWEI.setAbsolutePosition(13,8); doc.add(imgOIT); doc.add(imgYIWEI); doc.close(); } }
效果图:
原图:
更改过: