目录
为PDF文件生成二维码
为PDF文件增加文字水印
为PDF文件增加图片水印
PDF文件转为base64
将base64转为PDF文件
为PDF文件生成二维码
@GetMapping("createQrcodeOfPdf")public void createQrcodeOfPdf() throws IOException, DocumentException {//生成PDF文件的路径String path = "/Users/mudisheng/Desktop/mudisheng/";//生成PDF文件FileOutputStream fileOutputStream = new FileOutputStream(path+"qrCodePdf.pdf");//PDF文件所用字体BaseFont baseFont = BaseFont.createFont("STSong-Light","UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);//PDF文件中所用字体大小Font fontOne = new Font(baseFont,16,Font.NORMAL);Font fontTwo = new Font(baseFont,15,Font.NORMAL);Font fontThree = new Font(baseFont,22,Font.BOLD);Font fontFour = new Font(baseFont,16,Font.BOLD);Font fontFive = new Font(baseFont,10,Font.NORMAL);Document document = new Document(PageSize.A4,53,53,45,20);PdfWriter pdfWriter = PdfWriter.getInstance(document,fileOutputStream);document.open();Paragraph textTitle = new Paragraph("这是我测试为PDF文件增加二维码的文件",fontThree);textTitle.setAlignment(Element.ALIGN_CENTER);document.add(textTitle);String linkString = "/mudisheng0202?spm=1001.2101.3001.5343";//生成的二维码BarcodeQRCode barcodeQRCode = new BarcodeQRCode(linkString,100,100,null);Image qrCodeImage = barcodeQRCode.getImage();qrCodeImage.setAbsolutePosition(40,720);qrCodeImage.scalePercent(120f);document.add(qrCodeImage);Phrase phrase = new Phrase("扫一下可关注",fontFive);Paragraph paragraph = new Paragraph();paragraph.add(phrase);paragraph.setIndentationLeft(20);paragraph.setLeading(40f);document.add(paragraph);document.close();}
效果展示:
为PDF文件增加文字水印
public static void setTextWaterMarkForPdf(String inputFile,String outputFile,String textWaterMark){try {PdfReader pdfReader = new PdfReader(inputFile);PdfStamper pdfStamper = new PdfStamper(pdfReader,new FileOutputStream(outputFile));BaseFont baseFont = BaseFont.createFont("STSong-Light","UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);int pdfNumber = pdfReader.getNumberOfPages()+1;PdfContentByte pdfContentByte = null;for (int i=1;i<pdfNumber;i++){//在内容下方加水印OverContentpdfContentByte = pdfStamper.getUnderContent(i);PdfGState pdfGState = new PdfGState();//设置透明度pdfGState.setStrokeOpacity(0.5f);pdfContentByte.setGState(pdfGState);pdfContentByte.beginText();//修改水印颜色pdfContentByte.setColorFill(BaseColor.LIGHT_GRAY);//修改水印文字大小pdfContentByte.setFontAndSize(baseFont,30);//x轴坐标,y轴坐标,角度pdfContentByte.showTextAligned(Element.ALIGN_CENTER,textWaterMark,350,600,55);pdfContentByte.endText();}pdfStamper.close();pdfReader.close();} catch (IOException | DocumentException e) {e.printStackTrace();}}
为PDF文件增加图片水印
public static void imageWaterMark(String inputFile,String outputFile,String imageFile){try {PdfReader pdfReader = new PdfReader(inputFile);PdfStamper pdfStamper = new PdfStamper(pdfReader,new FileOutputStream(outputFile));Image image = Image.getInstance(imageFile);image.setAbsolutePosition(0,0);Rectangle rectangle = new Rectangle(PageSize.A4);image.scaleToFit(rectangle);int pdfNumber = pdfReader.getNumberOfPages()+1;PdfContentByte pdfContentByte = null;PdfGState pdfGState = new PdfGState();//设置透明度pdfGState.setFillOpacity(0.2f);for (int i=1;i<pdfNumber;i++){//在内容下方加水印OverContentpdfContentByte = pdfStamper.getUnderContent(i);pdfContentByte.setGState(pdfGState);pdfContentByte.addImage(image);}pdfStamper.close();pdfReader.close();} catch (IOException | DocumentException e) {e.printStackTrace();}}
效果展示:
PDF文件转为base64
/*** 将PDF文件转化为base64* @param filePath* @return*/public static String pdfFileToBase64(String filePath){File file = new File(filePath);if(!file.exists()){return null;}FileInputStream fileInputStream = null;BufferedInputStream bufferedInputStream = null;ByteArrayOutputStream byteArrayOutputStream = null;BufferedOutputStream bufferedOutputStream = null;try {fileInputStream = new FileInputStream(file);bufferedInputStream = new BufferedInputStream(fileInputStream);byteArrayOutputStream = new ByteArrayOutputStream();bufferedOutputStream = new BufferedOutputStream(byteArrayOutputStream);byte [] buffer = new byte[1024];int length = bufferedInputStream.read(buffer);while(length != -1){bufferedOutputStream.write(buffer,0,length);length = bufferedInputStream.read(buffer);}bufferedOutputStream.flush();byte [] bytes = byteArrayOutputStream.toByteArray();BASE64Encoder base64Encoder = new BASE64Encoder();return base64Encoder.encodeBuffer(bytes).trim();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {try {fileInputStream.close();bufferedInputStream.close();bufferedOutputStream.close();} catch (IOException e) {e.printStackTrace();}}return null;}
将base64转为PDF文件
/*** 将base64转为PDF文件* @param base64*/public static void base64ToPdf(String base64){BASE64Decoder base64Decoder = new BASE64Decoder();BufferedInputStream bufferedInputStream = null;ByteArrayInputStream byteArrayInputStream = null;BufferedOutputStream bufferedOutputStream = null;FileOutputStream fileOutputStream = null;try {byte [] bytes = base64Decoder.decodeBuffer(base64);byteArrayInputStream = new ByteArrayInputStream(bytes);bufferedInputStream = new BufferedInputStream(byteArrayInputStream);//文件存储路径String filePath = "/Users/mudisheng/Desktop/mudisheng/base64Pdf.pdf";File file = new File(filePath);fileOutputStream = new FileOutputStream(file);bufferedOutputStream = new BufferedOutputStream(fileOutputStream);byte [] buffer = new byte[1024];int length = bufferedInputStream.read(buffer);while(length != -1){bufferedOutputStream.write(buffer,0,length);length = bufferedInputStream.read(buffer);}bufferedOutputStream.flush();} catch (IOException e) {e.printStackTrace();}finally {try {bufferedInputStream.close();bufferedOutputStream.close();fileOutputStream.close();} catch (IOException e) {e.printStackTrace();}}