在HtmlAgilityPack中常用到的类有HtmlDocument、HtmlNodeCollection、
HtmlNode和HtmlWeb等。
其流程一般是先获取HTML,这个可以通过HtmlDocument的Load()或LoadHtml()来加载静态内容,或者也可以HtmlWeb的Get()或Load()方法来加载网络上的URL对应的HTML。
得到了HtmlDocument的实例之后,就可以用HtmlDocument的DocumentNode属性,这是整个HTML文档的根节点,它本身也是一个HtmlNode,然后就可以利用HtmlNode的SelectNodes()方法返回多个HtmlNode的集合对象HtmlNodeCollection,也可以利用HtmlNode的SelectSingleNode()方法返回单个HtmlNode。
HtmlAgilityPack确实是一个功能强大、体积小的开源HTML解析类库,在本篇仅仅是介绍了其中几个类的用法,但光这些就足以供周公快速实现了许久没有实现的功能,如果让周公用正则表达式来实现类似的功能,时间肯定要比用这个长得多。
java中利用第三方jar包iText 5.4.2就可以实现html转为pdf。
比如有如下index.html文件:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>HTML to PDF</title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h1>HTML to PDF</h1>
<p>
<span class="itext">itext</span>5.4.2 <span class="description">converting HTML to PDF</span>
</p>
<table>
<tr>
<th class="label">Title</th>
<td>iText - Java HTML to PDF</td>
</tr>
<tr>
<th>URL</th>
<td>http://hmkcode.com/itext-html-to-pdf-using-java</td>
</tr>
</table>
</body>
</html>
样式文件:
h1 {
color:#ccc
}
table tr td{
text-align:center
border:1px solid gray
padding:4px
}
table tr th{
background-color:#84C7FD
color:#fff
width: 100px
}
.itext{
color:#84C7FD
font-weight:bold
}
.description{
color:gray
}
后台转换的接口:
package com.hmkcode
import java.io.FileInputStream
import java.io.FileOutputStream
import java.io.IOException
import com.itextpdf.text.Document
import com.itextpdf.text.DocumentException
import com.itextpdf.text.pdf.PdfWriter
import com.itextpdf.tool.xml.XMLWorkerHelper
public class App
{
public static void main( String[] args ) throws DocumentException, IOException
{
// step 1
Document document = new Document()
// step 2
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("pdf.pdf"))
// step 3
document.open()
// step 4
XMLWorkerHelper.getInstance().parseXHtml(writer, document,
new FileInputStream("index.html"))
//step 5
document.close()
System.out.println( "PDF Created!" )
}
}
转换结果:
Java中字符串转码,根据实际运用的环境有以下三种方式
使用Java.lang.String这是最常用的方法,先用对应编码获取字节,然后重新构造新编码,示例代码如下:String s = "清山"
byte[] b = s.getBytes("utf-8")//编码
String sa = new String(b, "gb2312")//解码:用什么字符集编码就用什么字符集解码
java.io.InputStreamReader/OutputStreamWriter:桥转换读写文件的应用中,可以使用这种方式,直接在IO流构造中转换,示例代码如下:
InputStream is = new FileInputStream("C:/项目进度跟踪.txt")//文件读取
InputStreamReader isr = new InputStreamReader(is, "utf-8")//解码
OutputStream os = new FileOutputStream("C:/项目进度跟踪_gb2312.txt")//文件输出
OutputStreamWriter osw = new OutputStreamWriter(os, "gb2312")//开始编码
java.nio.Charset使用nio中的Charset转换字符,示例代码如下:Charset inSet = Charset.forName("utf-8") // 解码字符集
Charset outSet = Charset.forName("gb2312") // 编码字符集
CharsetDecoder de = inSet.newDecoder() // 解码器
CharsetEncoder en = outSet.newEncoder()// 编码
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)