반응형
0. 사용기 및 왜 사용하게 되었는가?
책을 작두질해서 스캔하여 PDF로 보자니 영 맘에 드는 프로그램이 없다.
책을 이미지로 떠놨는데 PDF로 변환하기 위해서는 유료 프로그램을 사거나
일일이 한땀한땀 만들어야하는데 이걸 노가다한다고?
역시나 찾아보니 아파치 재단에 등록 된 Java PDFBOX 라는 라이브러리가 있다.
사용법도 간단하고 만들기도 편하고 쉽다.
속도도 유료프로그램을 쓰는 것보다 빠르니 아주 유용하였다.
1. Jar 다운로드 or MAVEN 추가
- 공홈: https://pdfbox.apache.org/
- 다운로드 링크: https://pdfbox.apache.org/download.cgi
- Maven : https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox
굳이 메이븐을 안쓰더라도 기본 JAR 를 다운로드 받아서 사용해도 될 만큼 가볍다.
2. Image 2 PDF 예제
package ezk.mybooks.modules.pdf.service;
import java.awt.Image;
import java.io.File;
import java.io.FileFilter;
import javax.imageio.ImageIO;
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;
import org.springframework.stereotype.Component;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Component
public class PdfBoxService {
public static File createPdf(String dirPath, String fileName) throws Exception {
// Directory Check
File dir = new File(dirPath);
if(!dir.exists()) {
dir.mkdir();
}
if(!dir.isDirectory()) {
throw new Exception("dirPath is not dir");
}
// File Check
File pdfFile = new File(dirPath + File.separator + fileName + ".pdf");
if(pdfFile.exists()) {
pdfFile.delete();
}
PDDocument document = new PDDocument();
document.save(pdfFile);
document.close();
System.out.println("PDF created");
return pdfFile;
}
public static void images2Pdf(String sourceDir, String saveTargetDir, String savePdfFileName) throws Exception {
log.debug(" -- Loading All Image Files --");
File dir = new File(sourceDir);
log.debug("\n\n -- Filtering Image Files --");
File[] sourceFiles = dir.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.getName().contains("jpg");
}
});
log.debug("\n\n -- Create New PDF --");
// Loading an existing document
File pdfFile = createPdf(saveTargetDir, savePdfFileName);
PDDocument doc = PDDocument.load(pdfFile);
int totalCnt = 1;
for(File curImgFile : sourceFiles) {
// Read a Image Object
Image curImg = ImageIO.read(curImgFile);
float imgWidth = curImg.getWidth(null);
float imgHeigth = curImg.getHeight(null);
// Fit a PDF Page by Image Height Length
PDImageXObject pdImage = PDImageXObject.createFromFileByContent(curImgFile, doc);
PDRectangle newRect = new PDRectangle(0, 0, imgWidth, imgHeigth);
PDPage newPage = new PDPage(newRect);
doc.addPage(newPage);
// Write a PDImageXObject to PDF
PDPageContentStream contents = new PDPageContentStream(doc, newPage);
contents.drawImage(pdImage, 0, 0, imgWidth, imgHeigth);
contents.close();
log.debug("Page " + (totalCnt++) + " was Drawed at PDF File.");
}
// Saving the document
doc.save(pdfFile);
// Closing the document
doc.close();
}
public static void main(String[] args) throws Exception {
String sourceDir, saveTargetDir, savePdfFileName;
sourceDir = "이미지가 저장 된 폴더경로";
saveTargetDir = "이미지를 저장 할 폴더경로";
savePdfFileName = "PDF 파일명";
images2Pdf(sourceDir, saveTargetDir, savePdfFileName);
}
}
3. 중요 예제 사이트
반응형
'Java & Spring > 도움이 되는' 카테고리의 다른 글
2019년 6월 이클립스 개발필수 Plug-in (0) | 2019.07.02 |
---|---|
JavaScript 클라이언트와 Java 서버간 AES 128 암호화 (1) | 2019.06.17 |
마크다운 Markdown 렌더링Rendering / 컨버터Converter 라이브러리 추천 (0) | 2019.02.14 |
네티 관련 좋은 git URL (0) | 2018.04.11 |
[JAVA] 자바 Jsoup으로 웹 크롤러 만들기 예제(get / post / https) (2) | 2018.04.09 |
WRITTEN BY
,