目录
在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();
}
}