File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
package itn.com.cmm.util;
import java.awt.Image;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.UUID;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.FileUtils;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
/**
*
* @author : 이호영
* @fileName : PdfUtil.java
* @date : 2023.03.16
* @description : PDF를 다루는 Utils
* ===========================================================
* DATE AUTHOR NOTE
* ----------------------------------------------------------- *
* 2023.04.06 이호영 최초 생성
*
*
*
*/
public final class PdfUtil {
/**
* 휴대폰번호 대시('-') 추가
* 대시 유무 상관없음
* 유효성 맞지 않을시 변환안됨.
* @param response
*/
public static void showPdf(HttpServletResponse response, String pdfFileName) {
FileInputStream fis = null;
BufferedOutputStream bos = null;
try {
File pdfFile = new File(pdfFileName);
// 클라이언트 브라우져에서 바로 보는 방법(헤더 변경)
response.setContentType("application/pdf");
// ★ 이 구문이 있으면 [다운로드], 이 구문이 없다면 바로 target 지정된 곳에 view 해줍니다.
// response.addHeader("Content-Disposition", "attachment; filename=" + pdfFile.getName() + ".pdf");
// 파일 읽고 쓰는 건 일반적인 Write방식이랑 동일합니다. 다만 reponse 출력 스트림 객체에 write.
fis = new FileInputStream(pdfFile);
int size = fis.available(); // 지정 파일에서 읽을 수 있는 바이트 수를 반환
byte[] buf = new byte[size]; // 버퍼설정
int readCount = fis.read(buf);
response.flushBuffer();
bos = new BufferedOutputStream(response.getOutputStream());
bos.write(buf, 0, readCount);
bos.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (fis != null)
fis.close(); // close는 꼭! 반드시!
if (bos != null)
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static String makeImgPdf(String imgDir,String extsn) throws Exception {
PDDocument doc = new PDDocument();
String uuid = UUID.randomUUID().toString();
try {
File copy1 = new File(imgDir);
File copy2 = new File(imgDir + "." +extsn);
FileUtils.copyFile(copy1, copy2);
File imgFiles = new File(imgDir + "." +extsn);
Image img = ImageIO.read(imgFiles);
PDPage page = new PDPage(PDRectangle.A4);
doc.addPage(page);
PDImageXObject pdImage = PDImageXObject.createFromFile(imgFiles.toString(), doc);
int pageWidth = Math.round(page.getCropBox().getWidth());
int pageHeight = Math.round(page.getCropBox().getHeight());
float imgRatio = 1;
if ( pageWidth < img.getWidth(null)) {
imgRatio = (float)img.getWidth(null) / (float)pageWidth;
}
int imgWidth = Math.round(img.getWidth(null) / imgRatio);
int imgHeight = Math.round(img.getHeight(null) / imgRatio);
int pageWidthPosition = (pageWidth - imgWidth) / 2;
int pageHeightPosition = (pageWidth - imgWidth) / 2;
PDPageContentStream contents = new PDPageContentStream(doc, page);
contents.drawImage(pdImage, pageWidthPosition, pageHeightPosition, imgWidth, imgHeight);
contents.close();
doc.save("/usr/local/tomcat/file/sht/pdf/" + uuid + ".pdf");
//doc.save("C:/TEST/" + uuid + ".pdf");
} catch (Exception e) {
System.out.println("Exception! : " + e.getMessage());
}
try {
doc.close();
} catch (IOException e) {
e.printStackTrace();
}
return uuid + ".pdf";
}
}