Java中在PDF文件中生成二维码/增加文字水印/图片水印/PDF转为base64/base64转为PDF文件等

目录

在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 = "https://blog.csdn.net/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++){
                //在内容下方加水印OverContent
                pdfContentByte =  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++){
                //在内容下方加水印OverContent
                pdfContentByte =  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();
            }
            
        }

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值