반응형
ajax를 통해서 html을 받아 그 데이터를 pdf파일로 변환하여 다운로드 받는 작업을 해야했다..
여기 저기 검색해보고 나서 나온 결과는 과연?
두구둑두굳굳구둑두구구구구구
아 그전에
compile group: 'com.itextpdf', name: 'itextpdf', version: '5.5.13'
compile group: 'com.itextpdf', name: 'itext-pdfa', version: '5.5.13'
compile group: 'com.itextpdf.tool', name: 'itext-pdfaxmlworker', version: '5.5.13'
* 간혹
compile group: 'com.itextpdf', name: 'itext-xtra', version: '5.5.13'
이거 하라는 게시글 있는데 바로 닫기 누르셈 저거 넣으면 실행안됌 ㅋㅋ
자 다시 두굳구둑둑구두구구구
public MultipartFile createPdf()
throws DocumentException, IOException {
String resourcePath = "리소시스 경로";
//서버 내 파일 주소
String path = "";
File saveFolder = new File(path);
//경로가 없으면 생성한다.
if (!saveFolder.exists() || saveFolder.isFile()) {
saveFolder.mkdirs();
}
//용지 설정이 가능하다. 생략해도 무관
// Document document = new Document(PageSize.A4, 50, 50, 50, 50);
Document document = new Document();
//파일 확장자는 pdf
String filename = "newPDF"
filename += ".pdf";
//전체 경로 파일 확장자 포함
String realName = path;
realName += filename;
File pdfFile = new File(realName);
//파일이 있으면 삭제(같은 이름으로 만들 때마다 새로 쓰기 위해서)
if (pdfFile.isFile()) {
pdfFile.delete();
}
//pdf를 만들기 시작한다.
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(realName));
document.open();
//이미지 태그 절대경로 사용해야 한다.(반드시)
// htmlStr = htmlStr.replaceAll("src=\"/", "src=\"http://127.0.0.1:8080/");
//폰트를 설정한다. 폰트 설정 누락시 한글이 안보이는 경우 발생
htmlStr = "<html><body style='font-family: MalgunGothic;'>"+ 여기 html값 아무거나 +"</body></html>";
XMLWorkerHelper helper = XMLWorkerHelper.getInstance();
//css파일
CSSResolver cssResolver = new StyleAttrCSSResolver();
CssFile cssFile = XMLWorkerHelper.getCSS(new FileInputStream(resourcePath + "sub.css"));
CssFile cssFile2 = XMLWorkerHelper.getCSS(new FileInputStream(resourcePath + "common.css"));
cssResolver.addCss(cssFile);
cssResolver.addCss(cssFile2);
XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
//매우매우 중요!!
//반드시 해당 폰트가 경로내에 있어야한다.
//(폰트 존재하지 않을 시 pdf 생성 후 열리지 않는 에러 발생)
fontProvider.register(resourcePath +"/malgun.ttf", "MalgunGothic"); //MalgunGothic은 font-family용 alias
CssAppliers cssAppliers = new CssAppliersImpl(fontProvider);
HtmlPipelineContext htmlContext = new HtmlPipelineContext(cssAppliers);
htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory());
// html을 pdf로 변환시작
PdfWriterPipeline pdf = new PdfWriterPipeline(document, writer);
HtmlPipeline html = new HtmlPipeline(htmlContext, pdf);
CssResolverPipeline css = new CssResolverPipeline(cssResolver, html);
XMLWorker worker = new XMLWorker(css, true);
//캐릭터 셋 설정
XMLParser xmlParser = new XMLParser(worker, Charset.forName("UTF-8"));
StringReader strReader = new StringReader(htmlStr);
xmlParser.parse(strReader);
document.close();
writer.close();
FileItem fileItem = new DiskFileItem("mainFile", Files.probeContentType(pdfFile.toPath()), false, pdfFile.getName(), (int) pdfFile.length(), pdfFile.getParentFile());
try {
InputStream input = new FileInputStream(pdfFile);
OutputStream os = fileItem.getOutputStream();
IOUtils.copy(input, os);
} catch (IOException ex) {
// do something.
}
MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
return multipartFile;
}
여기서 중요한거 !!
1. html에 input 태그 , br 태그 , col 태그 는 안먹힌다.. 아마 들어가있으면 주석으로 처리를 해줘야합니다.
2. css는 절대 경로로 지정해주어야함. 그리고 html 안에 넣어봤자 따로 설정해줘야하기 때문에 빼서 쓰는게 좋습니다.
3. 그리고 폰트 malgun.ttf 부분도 꼭 넣어줘야함 절대경로로 넣어주시길 바랍니다.
반환은 MultipartFile 로 했는데 따로 file을 변환해준것... 저거는 다시 작성해보겠슴다.!
반응형
'자바' 카테고리의 다른 글
자바 List 를 String 으로 변환!! (0) | 2020.12.22 |
---|---|
자바 File을 MultipartFile로 변환하기 (0) | 2020.12.22 |
자바 스크립트로 글자수 표시하고 제한걸기 (0) | 2020.12.07 |
자바에서 프린트 출력 기능 만들기 두개! (0) | 2020.12.04 |
자바로 파일 압축하는 기능 만들기 (0) | 2020.12.03 |
댓글