目录
依赖
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
<dependency>
<groupId>org.ofdrw</groupId>
<artifactId>ofdrw-full</artifactId>
<version>1.17.0</version>
</dependency>
导包
import java.nio.charset.StandardCharsets;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.PdfWriter;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
图片转换ofd
/**
* 将图片转换为OFD文件
*
* @param file 上传的图片文件
* @param revolve 图片是否旋转,为空默认不旋转
* @return
* @throws IOException IO异常
*/
private static File generateOfdFile(MultipartFile file, Boolean revolve) throws IOException {
String fileName = file.getOriginalFilename();
String ofdFilePath = path + File.separator + fileName.substring(0, fileName.lastIndexOf(".")) + ".ofd";
Path OfdPath = Paths.get(ofdFilePath).toAbsolutePath();
try (OFDDoc ofdDoc = new OFDDoc(OfdPath)) {
PageLayout pageLayout = ofdDoc.getPageLayout();
VirtualPage vPage = new VirtualPage(pageLayout);
Image image = Image.getInstance(file.getBytes());
float height = image.getHeight();
float width = image.getWidth();
if (revolve != null && revolve) {
BufferedImage src = ImageIO.read(file.getInputStream());
BufferedImage des1 = RotateImage.Rotate(src, 90);
ImageIO.write(des1, FilenameUtils.getExtension(fileName).toLowerCase(), new File(path + "/" + fileName));
float temp = height;
height = width;
width = temp;
}
Path imgPath = Paths.get(path, fileName);
Img img;
if (height / width > pageLayout.getHeight() / pageLayout.getWidth()) {
//上下顶头
img = new Img((pageLayout.getHeight() - 20) * width / height, pageLayout.getHeight() - 20, imgPath);
} else {
//左右顶头
img = new Img((pageLayout.getWidth() - 20), (pageLayout.getWidth() - 20) / width * height, imgPath);
}
double x = (pageLayout.getWidth() - img.getWidth()) / 2;
double y = (pageLayout.getHeight() - img.getHeight()) / 2;
img.setPosition(Position.Absolute).setX(x).setY(y);
vPage.add(img);
ofdDoc.addVPage(vPage);
} catch (BadElementException e) {
e.printStackTrace();
}
File ofdFile = new File(ofdFilePath);
return ofdFile;
}
文件转换pdf
/**
* 将图片转换为PDF文件
*
* @param file上传的图片文件
* @param revolve 是否旋转图片
* @return PDF文件
* @throws IOException IO异常
* @throws DocumentException PDF文档异常
*/
private static File generatePdfFile(MultipartFile file,Boolean revolve) throws IOException, DocumentException {
String fileName = file.getOriginalFilename();
String pdfFileName = fileName.substring(0, fileName.lastIndexOf(".")) + ".pdf";
Document doc = new Document(PageSize.A4, 20, 20, 20, 20);
PdfWriter.getInstance(doc, new FileOutputStream(pdfFileName));
doc.open();
doc.newPage();
Image image = Image.getInstance(file.getBytes());
float height = image.getHeight();
float width = image.getWidth();
int percent = 0;
if(revolve==null||!revolve){
percent = getPercent(height,width);
}else {
image.setRotationDegrees(90);
percent = getPercent(width,height);
}
image.setAlignment(Image.MIDDLE);
image.scalePercent(percent);
doc.add(image);
doc.close();
return new File(pdfFileName);
}
private static int getPercent(float height, float weight) {
float percent = 0.0F;
if (height > weight) {
percent = (PageSize.A4.getHeight()-40) / height * 100;
} else {
percent = (PageSize.A4.getWidth()-40) / weight * 100;
}
return Math.round(percent);
}
下载文件
/**
* 用于下载OFD文件
*
* @param ofdFile OFD文件
* @param response HttpServletResponse
* @throws IOException IO异常
*/
private static void downloadOfdFile(File ofdFile, HttpServletResponse response, String name) throws IOException {
FileInputStream fis = new FileInputStream(ofdFile);
byte[] bytes = new byte[fis.available()];
fis.read(bytes);
fis.close();
response.reset();
response.setHeader("Content-Type", "application/ofd");
response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(name, "UTF-8"));
OutputStream out = response.getOutputStream();
out.write(bytes);
out.flush();
out.close();
}