提供PDF 文件转图片的工具类。
电子签章过程中存在着在网页上对签署文件进行预览、指定签署位置、文件签署等操作,由
于图片在浏览器上的兼容性和友好性优于PDF 文件,所以一般在网页上进行电子签章时,会先
将PDF 文件转换成图片,展示给用户。用户在页面上确定好签署位置,并进行签署时,后端服
务会通过对电子印章/手写签名位置、大小以及PDF 文件的大小进行计算,在PDF 文件的准确位
置上完成文件签署。
import com.resrun.service.pojo.ConvertImage;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.springframework.stereotype.Service;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.List;
/**
* @Description: pdf文件转图片业务
* @Package: com.resrun.service.image
* @ClassName: Pdf2ImageService
* @copyright 北京资源律动科技有限公司
*/
@Service
public class PdfConvertImageService {
private Float resolution = 90f ;
/**图片格式为jpg类型**/
public static final String IMG_JPE = "jpg";
/**图片格式为png类型**/
public static final String IMG_PNG = "png";
public List<ConvertImage> convertImage(byte[] signFileByte){
if(signFileByte == null){
return null ;
}
List<ConvertImage> responseList = new ArrayList<>();
PDDocument doc = null;
try {
//加载pdf文件
doc = PDDocument.load(signFileByte);
PDFRenderer renderer = new PDFRenderer(doc);
int pageCount = doc.getNumberOfPages();
if(pageCount == 0){
return responseList;
}
for (int i = 0; i < pageCount; ++i) {
int page = i ;
BufferedImage image = renderer.renderImageWithDPI(page, resolution);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
ImageIO.write(image, IMG_PNG, stream);
byte[] bytes = stream.toByteArray();
if(bytes != null){
ConvertImage response = new ConvertImage();
response.setImageByte(bytes);
response.setPage(page);
responseList.add(response);
}
}
}catch (Exception e) {
e.printStackTrace();
}
return responseList ;
}
}
更多关于电子签名代码工具可到开源仓库下载:https://gitee.com/kaifangqian