java实现image转pdf

63 阅读2分钟

File mOutputPdfFile = new File(mOutputPdfFileName); //输出流

if (!mOutputPdfFile.exists()) {

mOutputPdfFile.deleteOnExit();

return null;

}

return mOutputPdfFile; //反回文件输出流

}

public static int getPercent(float h, float w) {

int p = 0;

float p2 = 0.0f;

if (h > w) {

p2 = 297 / h * 100;

}else {

p2 = 210 / w * 100;

}

p = Math.round(p2);

return p;

}

public static int getPercent2(float h, float w) {

int p = 0;

float p2 = 0.0f;

p2 = 530 / w * 100;

p = Math.round(p2);

return p;

}

/**

  • 最终返回生成的含有水印的pdf文件

  • @param filepath 生成pdf后的存储路径

  • @param filepathW 生成水印之后的pdf存放的路径

  • @param imageUrllist 图片list集合

*/

public static File imgOfPdf(String filepath,String filepathW,List imageUrllist) {

boolean result = true;

String pdfWPath=null;

File fileOut=null;

String pdfUrl = filepath+(new Date().getTime())+".pdf"; //输出pdf文件路径

if(PdfUtilImg.createDirectory(filepath)){

try {

if (result == true) {

File file = PdfUtilImg.Pdf(imageUrllist, pdfUrl);//生成pdf

file.createNewFile();

}

}catch (IOException e){

result=false;

e.printStackTrace();

}

}

/此处是添加水印,这段代码可以不用,不需要添加水印的伙伴可以自行删除至添加水印结束部分/

if(PdfUtilImg.createDirectory(filepathW)){

try {

//开始添加水印

if(result){

String SyPath ="C:\Users\Administrator\Desktop\cscscscscs\shuiyin.png";

pdfWPath=filepathW+(new Date().getTime())+"w.pdf";

new addWaterMarkUtil().addWaterMark(pdfUrl, pdfWPath, "", SyPath, 500, 50, 250, 400);

}

}catch (Exception e){

result = false;

e.printStackTrace();

}

}

/添加水印结束/

if(result&&pdfWPath!=null){

fileOut=new File(pdfUrl);

}

return fileOut;

}

/**

  • 判断该路径下的目录是否存在,不存在就生成此目录

  • @param filePath

  • @return

*/

public static Boolean createDirectory(String filePath){

Boolean result=true;

try {

File file=new File(filePath);

if (!file.exists()) {

file.mkdirs();

}

}catch (Exception e){

result=false;

e.printStackTrace();

}

return result;

}

}

2.如何使用

===================================================================

public static void main(String[] rags) throws Exception {

String filepath="C:\Users\Administrator\Desktop\cscscscscs";

String filepathW="C:\Users\Administrator\Desktop\cscscscscs\shuiyin";

ArrayList imageUrllist=new ArrayList<>();

imageUrllist.add("C:\Users\Administrator\Desktop\cscscscscs\1581323858059.jpg");

File result=PdfUtilImg.imgOfPdf(filepath,filepathW,imageUrllist);

}

3.下面附上给pdf添加水印的工具类,有需要的自己可以参考一下

============================================================================================

package com.e9z.archivesManagement.rpc.service.util;

import com.alibaba.dubbo.common.utils.StringUtils;

import com.e9z.archivesManagement.common.base.BaseResult;

import com.e9z.common.utils.ObjectUtils;

import com.itextpdf.text.BaseColor;

import com.itextpdf.text.DocumentException;

import com.itextpdf.text.Element;

import com.itextpdf.text.Image;

import com.itextpdf.text.pdf.BaseFont;

import com.itextpdf.text.pdf.PdfContentByte;

import com.itextpdf.text.pdf.PdfReader;

import com.itextpdf.text.pdf.PdfStamper;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

public class addWaterMarkUtil {

public BaseResult addWaterMark(String srcFile, String destFile, String text, String imgFile, int textWidth,

int textHeight, int imgWidth, int imgHeight) throws IOException, DocumentException {

BaseResult result = new BaseResult();

// 待加水印的文件

PdfReader reader = new PdfReader(srcFile);

// 加完水印的文件

PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(destFile));

int total = reader.getNumberOfPages() + 1;

PdfContentByte content;

String path = this.getClass().getResource("/").getPath();

// 设置字体

BaseFont font = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); // 水印文字

String waterText = text;

Image image = null;

if (!StringUtils.isBlank(imgFile)) {

image = Image.getInstance(imgFile);

image.setAbsolutePosition(imgWidth, imgHeight);

// 设置图片的显示大小

image.scaleToFit(100, 150);

// 循环对每页插入水印

for (int i = 1; i < total; i++) {

// 水印在之前文本之上

content = stamper.getOverContent(i);

if (image != null) {

content.addImage(image);

}

}

}

int j = waterText.length(); // 文字长度

char c = 0;

int high = 0;// 高度

// 水印的起始

high = 50;

// 水印在之前文本之上

content = stamper.getOverContent(total - 1);

if (ObjectUtils.isNotNull(text)) {

// 开始

content.beginText();

// 设置颜色 默认为蓝色

content.setColorFill(BaseColor.BLACK);

// 设置字体及字号

content.setFontAndSize(font, 15);

// 设置起始位置

content.setTextMatrix(textWidth, textHeight);

// 开始写入水印

content.showTextAligned(Element.ALIGN_LEFT, text, textWidth, textHeight, 0);

content.endText();

}

stamper.close();

result.markSuccess("添加水印到成功",destFile,null);

System.out.print("===" + srcFile + "===添加水印到==" + destFile + "==成功=====");

return result;

} }