最近用java重写了整个网站,耗费了大量的人力物力财力,终于初具规模了,写一些建站心得,也算是技术总结了。技术本身很简单,嘿嘿,别见笑了:)由于采用了java的系统,众多的开源软件为我的网站构建提供了良好的创意支持,礼拜天的时候突发奇想,想给我的博客添上自动的pdf输出和word输出,立马就实践了。
要产生PDF,需要开源的生成组件,我选择了非常成熟的iText系统,他是广泛采用的结构化文本输出工具。在编程的初期我遇到了些困难,如何将HTML转换成PDF成了凶猛的拦路虎,我的博客文本是由OBLOG输出的,所以也没有什么标准的规范实现,无法实现自动转换。查阅了相关的资料,开始使用Jtidy先规范HTML->XHTML,再尝试XHTML->XML,XML->FO,FO->PDF。流水线上虽然顺理成章但战线实在是太长,对于我这样的懒人,这样的规范操作被立即否定了。
后来我尝试自己解析HTML,我的唯一目的只是将博客转换为PDF,对博客中的图片、表格之类的不是太关心,那么只需要将HTML标签去掉,合理分段就好。在之后的尝试过程中异常顺利,我将结束标签(等)转化为换行,然后直接去掉了所有的HTML标签,保留了纯文本的博客正文。转换的结果令我非常满意,iText的便捷也让我尝足了开源软件的好处,现在你可以尝试着点击左边的下载为PDF文档来看看我的杰作吧:)
s = Pattern.compile("<\\/div>", Pattern.CASE_INSENSITIVE).matcher(s)
.replaceAll(SPILIT_WORDS);
s = Pattern.compile("<\\/p>", Pattern.CASE_INSENSITIVE).matcher(s)
.replaceAll(SPILIT_WORDS);
s = Pattern.compile("
", Pattern.CASE_INSENSITIVE).matcher(s)
.replaceAll(SPILIT_WORDS);
s = Pattern.compile(" ", Pattern.CASE_INSENSITIVE).matcher(s)
.replaceAll(SPILIT_WORDS);
s = s.replaceAll("?[^>]+>", ""); // 剔出了的标签
String ss[] = s.split(SPILIT_WORDS);
return ss;
}
try {
String[] paragraphs = getTextParagraphs(log.getLogtext());
PdfWriter.getInstance(doc, new FileOutputStream(f));
"UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
doc.add(Chunk.NEWLINE);
for (String paragraph : paragraphs) { // 正文
paragraph = paragraph.trim();
if (paragraph.equals("")) {
continue;
}
paragraph = " " + paragraph;
Paragraph p = new Paragraph(paragraph, fontNormal);
p.setSpacingBefore(10f);
doc.add(p);
p.add(Chunk.NEWLINE);
}
doc.add(Chunk.NEXTPAGE);
doc.add(new Paragraph("文章信息", fontTitle)); // 结尾信息
} catch (Exception e) {
e.printStackTrace();
}
}
(完)