目录:
- 概述
- 软件要求
- 实现过程
[一]、概述
前面已经介绍了如何实现对HTML中文字符的转换以及HTML文件生成PDF文件的基本方法,本文主要演示下如何把URL地址对应的内容直接转换生成PDF文件,这个需求也有很多的应用场景,最简单的应用场景比如:自己blog中的文章如[……]
本文主要演示iText生成PDF的书签功能,详细介绍和注意点直接看代码中的注释部分吧,下面直接上代码:
[一]、Java代码:
Demo4BookMark.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
package com.micmiu.pdf.itext; import java.io.FileOutputStream; import com.itextpdf.text.BaseColor; import com.itextpdf.text.Chapter; import com.itextpdf.text.Chunk; import com.itextpdf.text.Document; import com.itextpdf.text.Element; import com.itextpdf.text.Font; import com.itextpdf.text.Paragraph; import com.itextpdf.text.Section; import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.PdfWriter; import com.itextpdf.text.pdf.draw.LineSeparator; /** * * @author <a href="http://www.micmiu.com">Michael Sun</a> */ public class Demo4BookMark { /** * @param args */ public static void main(String[] args) throws Exception { String fileName = "d:/test/itext/demo-bookmark.pdf"; Demo4BookMark.testBookMarks(fileName); } /** * * @param fileName * @throws Exception */ public static void testBookMarks(String fileName) throws Exception { BaseFont bfCN = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", false); // 章的字体 Font chFont = new Font(bfCN, 12, Font.NORMAL, BaseColor.BLUE); // 节的字体 Font secFont = new Font(bfCN, 12, Font.NORMAL, new BaseColor(0, 204, 255)); // 正文的字体 Font textFont = new Font(bfCN, 12, Font.NORMAL, BaseColor.BLACK); Document document = new Document(); PdfWriter.getInstance(document, new FileOutputStream(fileName)); document.open(); int chNum = 1; Chapter chapter = new Chapter(new Paragraph("Michael介绍", chFont), chNum++); Section section = chapter.addSection(new Paragraph("基本信息", secFont)); // section.setNumberDepth(2); // section.setBookmarkTitle("基本信息"); section.setIndentation(10); section.setIndentationLeft(10); section.setBookmarkOpen(false); section.setNumberStyle(Section.NUMBERSTYLE_DOTTED_WITHOUT_FINAL_DOT); section.add(new Paragraph("苦逼的码农一枚。。。", textFont)); Section section2 = chapter.addSection(new Paragraph("SNS", secFont)); section2.setIndentation(10); section2.setIndentationLeft(10); section2.setBookmarkOpen(false); section2.setNumberStyle(Section.NUMBERSTYLE_DOTTED_WITHOUT_FINAL_DOT); section2.add(new Paragraph("SNS地址分类:", textFont)); section = section2.addSection(new Paragraph(new Chunk("我的博客", secFont) .setUnderline(0.2f, -2f).setAnchor("http://www.micmiu.com"))); section.setBookmarkOpen(false); section.setIndentation(10); section.setIndentationLeft(10); section.setNumberStyle(Section.NUMBERSTYLE_DOTTED_WITHOUT_FINAL_DOT); section.add(new Paragraph(new Chunk("我的blog地址:http://www.micmiu.com", textFont).setUnderline(0.2f, -2f).setAnchor( "http://www.micmiu.com"))); section.add(new Paragraph("分享自己的技术心得。", textFont)); section = section2.addSection(new Paragraph(new Chunk("我的weibo", secFont).setUnderline(0.2f, -2f).setAnchor( "http://weibo.com/ctosun"))); section.setIndentation(10); section.setIndentationLeft(10); section.setBookmarkOpen(false); section.setNumberStyle(Section.NUMBERSTYLE_DOTTED_WITHOUT_FINAL_DOT); section.add(new Paragraph(new Chunk("我的weibo:http://weibo.com/ctosun", textFont).setUnderline(0.2f, -2f).setAnchor( "http://weibo.com/ctosun"))); section.add(new Paragraph("发表下心情,分享下技术,转转乱七八糟的新闻。", textFont)); section = section2.addSection(new Paragraph(new Chunk("twitter", secFont))); section.setIndentation(10); section.setIndentationLeft(10); section.setBookmarkOpen(false); section.setNumberStyle(Section.NUMBERSTYLE_DOTTED_WITHOUT_FINAL_DOT); section.add(new Paragraph(new Chunk("twitter:@suncto", textFont) .setUnderline(0.2f, -2f).setAnchor("http://twitter/cuncto"))); section.add(new Paragraph("一个常常被墙的地方", textFont)); LineSeparator line = new LineSeparator(1, 100, new BaseColor(204, 204, 204), Element.ALIGN_CENTER, -2); Paragraph p_line = new Paragraph("分割线"); p_line.add(line); chapter.add(p_line); document.add(chapter); chapter = new Chapter(new Paragraph("Miu的介绍", chFont), chNum++); section = chapter.addSection(new Paragraph("基本信息", secFont)); section.setIndentation(10); section.setIndentationLeft(10); section.setBookmarkOpen(false); section.setNumberStyle(Section.NUMBERSTYLE_DOTTED_WITHOUT_FINAL_DOT); section.add(new Paragraph("90后一枚,喜欢美食和旅游。。。", textFont)); document.add(chapter); document.close(); } } |
[二]、运行结果:
本文介绍到此结束@[……]
目录:
[一]、介绍
iText是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF文档,而且可以将HTML网页转化为PDF文件,同时它可以很方便的和web或者其他应用整合使用。
iText 官网:http://www.[……]
错误代码:
java.lang.OutOfMemoryError: GC overhead limit exceeded
原因分析:
该错误为JDK6新增错误类型。当GC为释放很小空间占用大量时间时抛出。
一般是因为堆太小,导致异常的原因:没有足够的内存。
解决办法:[……]
Java判断一个字符串是否有中文一般情况是利用Unicode编码(CJK统一汉字的编码区间:0x4e00–0x9fbb)的正则来做判断,但是其实这个区间来判断中文不是非常精确,因为有些中文的标点符号比如:,。等等是不能识别的。
以下是比较完善的判断方法:CharUtil.java
[cra[……]
我们在shell 脚本命令中会经常看到类似这样内容:/dev/null 2>&1,这条命令的意思是将标准输出和错误输出全部重定向到 /dev/null 空设置中,也就是将产生的所有信息丢弃。
[一]、命令的解释
>/dev/null 2>&1 可以拆分[……]
近期评论