Java IText Kütüphanesini Kullanarak HTML İçeriğinden PDF Oluşturmak
07-10-2014
iText kütüphanesi ile HTML içeriğinden PDF dosyası oluşturmak için bir örnek anlatılacaktır.
Örnek:
Css Dosyası
Not: Unicode karakterlerinin desteklenmesi için uygun font seçilmelidir. Biz bu örnekte
Not: Sistem değişkeni Windows işletim sisteminde aşağıdaki gibi düzenlenmelidir:
Maven Dependency
Örnek:
public static void createPDF(String title, String url, String content) {
try {
String html = "<html><head>\n<title>" + url + "</title>\n" +
"</head><body><h2>" + title + "</h2><div class='content'>" + content + "</div></body></html>";
String result = new String(html.getBytes("UTF-8"), "UTF-8");//Unicode karakterlerini desteklemesi icin kullanildi
InputStream is = new ByteArrayInputStream(result.getBytes());
FileOutputStream fos = new FileOutputStream(url + ".pdf");
// step 1
Document document = new Document();
// step 2
PdfWriter writer = PdfWriter.getInstance(document, fos);
writer.setInitialLeading(12.5f);
// step 3
document.open();
HtmlPipelineContext htmlContext = new HtmlPipelineContext(null);
htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory());
// CSS
CSSResolver cssResolver = new StyleAttrCSSResolver();
InputStream csspathtest = Thread.currentThread()
.getContextClassLoader()
.getResourceAsStream("codesenior.css");
CssFile cssfiletest = XMLWorkerHelper.getCSS(csspathtest);
cssResolver.addCss(cssfiletest);
Pipeline<?> pipeline = new CssResolverPipeline(cssResolver,
new HtmlPipeline(htmlContext, new PdfWriterPipeline(
document, writer)));
XMLWorker worker = new XMLWorker(pipeline, true);
XMLParser p = new XMLParser(worker);
p.parse(is);//new FileInputStream("results/demo2/walden.html"));
// step
document.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
}
Css Dosyası
*{
font-family: Calibri, Helvetica, sans-serif;
}
h2 {
font: 1.5em Arial,Helvetica,sans-serif;
}
.content {
background-color: white;
color: black;
width: 100%;
height: 100%;
font-size: 8pt;
font-family: Calibri, Helvetica, sans-serif;
}
pre {
color: #000;
font-family: "Consolas","Bitstream Vera Sans Mono","Courier New",Courier,monospace !important;
font-size: 1em !important;
font-style: normal !important;
font-weight: normal !important;
margin: 4px;
}
.important {
font-weight: bold;
color: red;
}
.comment {
color: #808080
}
.annotation {
font-weight: bold;
color: #808080;
}
.keyword {
color: #006699;
font-weight: bold;
}
#tblContent, #tblContent th, #tblContent td {
border: 1px solid black;
border-collapse: collapse;
}
.title {
font-size: medium;
color: red
}
.link {
color: red;
font-weight: bold;
text-decoration: none
}
.string {
color: blue;
}
code {
white-space: pre-wrap;
padding-right: 5px;
}
code {
font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono,
Courier New, monospace, serif;
background-color: #EEE;
}
Not: Unicode karakterlerinin desteklenmesi için uygun font seçilmelidir. Biz bu örnekte
font-family: Calibri, Helvetica, sans-serif; fontunu seçtik. Not: Sistem değişkeni Windows işletim sisteminde aşağıdaki gibi düzenlenmelidir:
Maven Dependency
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.lt;/version>
</dependency>
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>5.5.lt;/version>
</dependency>