标签:line ann html get 攻略 流程 其他 经历 trace
项目在变,需求在变,不变的永远是敲击键盘的程序员.....
PDF 生成后,有时候需要在PDF上面添加一些其他的内容,比如文字,图片....
经历几次失败的尝试,终于获取到了正确的代码书写方式。
在此记录总结,方便下次以不变应万变,需要的 jar 请移步:生成PDF全攻略
PdfReader reader = new PdfReader("E:\\A.pdf"); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("E:\\B.pdf")); PdfContentByte overContent = stamper.getOverContent(1);
上述的这段代码算是在原有 PDF 上面添加内容的核心代码,具体流程如下
FileUtil.fileChannelCopy(A.pdf,A + "tmp".pdf)); PdfReader reader = new PdfReader(A + "tmp".pdf); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(A.pdf)); PdfContentByte overContent = stamper.getOverContent(1);
代码流程就变做下面这个样子
管道复制代码如下:
public static void fileChannelCopy(File sources, File dest) { try { FileInputStream inputStream = new FileInputStream(sources); FileOutputStream outputStream = new FileOutputStream(dest); FileChannel fileChannelin = inputStream.getChannel();//得到对应的文件通道 FileChannel fileChannelout = outputStream.getChannel();//得到对应的文件通道 fileChannelin.transferTo(0, fileChannelin.size(), fileChannelout);//连接两个通道,并且从in通道读取,然后写入out通道 inputStream.close(); fileChannelin.close(); outputStream.close(); fileChannelout.close(); } catch (Exception e) { e.printStackTrace(); } }
完整的在已有PDF添加其他内容代码如下:
FileUtil.fileChannelCopy(new File("E:\\A.pdf"),new File("E:\\A+"tmp".pdf")); PdfReader reader = new PdfReader("E:\\A+"tmp".pdf"); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("E:\\A.pdf")); PdfContentByte overContent = stamper.getOverContent(1); //添加文字 BaseFont font = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); overContent.beginText(); overContent.setFontAndSize(font, 10); overContent.setTextMatrix(200, 200); overContent.showTextAligned(Element.ALIGN_CENTER,"需要添加的文字",580,530,0); overContent.endText(); //添加图片 PdfDictionary pdfDictionary = reader.getPageN(1); PdfObject pdfObject = pdfDictionary.get(new PdfName("MediaBox")); PdfArray pdfArray = (PdfArray) pdfObject; Image image = Image.getInstance("D:\\1.jpg"); image.setAbsolutePosition(100,100); overContent.addImage(image); //添加一个红圈 overContent.setRGBColorStroke(0xFF, 0x00, 0x00); overContent.setLineWidth(5f); overContent.ellipse(250, 450, 350, 550); overContent.stroke(); stamper.close();
标签:line ann html get 攻略 流程 其他 经历 trace
原文地址:http://www.cnblogs.com/zhengxingpeng/p/6674825.html