`

itextpdf简单使用 制作豆瓣日志pdf

 
阅读更多

关于怎么获取豆瓣日志的文章 原来有写过一篇:http://fair-jm.iteye.com/blog/1896575

这个是用htmlparser的 现在的改成jsoup 原理差不多 都是根据tag 还有id来获取 日志的标题 发布时间和内容的

 

先来一张效果图吧 生成的还不错(生成的来源依旧是我姐的豆瓣日志:http://www.douban.com/people/maybedekky/notes) 没错这个工具图片的地址是直接转成图片的...不是text文本..略强大


 

所以这部分就略过了 需要的可以看上面的日志。

 

itextpdf的下载地址是:

http://itextpdf.com/download.php



 为了格式 还需要一个iText XML Worker来直接将html的内容转成pdf(一些css的设置最好全清空了 不然格式会乱七八糟了)

 

这里有个中文支持的问题

看这里:http://blog.csdn.net/kings988/article/details/5393982

不过我自己试了下不用这么麻烦 只要把字体改成支持中文的字体就好了 很简单的一段(因为支持中文的字体也一定支持英文的不是吗?)

com.itextpdf.tool.xml.css.apply下的ChunkCssApplier类中这样修改:(这两个类都是在IText Xml worker的jar下的):



 



 好这样中文问题就解决啦(你想换什么字体就换好了)

 

生成的主要代码只有一行:

	    XMLWorkerHelper.getInstance().parseXHtml(writer, document,

	        new StringReader("<html><body>"+arti.warpInfo()+"</body></html>"));

 三个参数分别是:

com.itextpdf.tool.xml.XMLWorkerHelper  com.itextpdf.text.Document  java.io.Reader

当然还有其他重载的方式

 

 

example代码如下 这段代码做测试用的 生成的文件也是完好的:

package org.cc.abao.test;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.StringReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

import org.cc.abao.vo.Article;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.tool.xml.XMLWorkerHelper;
/**
 * 
 * @author cc fair_jm(http://fair-jm.iteye.com/)
 *
 */
public class TestJsoup {

	public static void main(String[] args) throws MalformedURLException,
			IOException, DocumentException {
		Document doc = Jsoup.parse(new URL(
				"http://www.douban.com/people/maybedekky/notes"), 5000);

		Elements elements = doc.select("a[data-url]");

		List<String> urls = new ArrayList<String>();

		for (Element element : elements) {
			urls.add(element.attr("data-url"));
		}

		System.out.println(urls);
		
		StringBuffer snote=new StringBuffer();

		Article arti=new Article();
		
//		for(String url:urls){
		Document article = Jsoup.parse(new URL(urls.get(0)), 5000);
		Elements notes = article.select("div#link-report");
		Element note = notes.get(0);
		
		arti.setContent(note.html());
		
		arti.setTitle(article.select("title").get(0).text());
	
		arti.setDate(article.select("span[class=pl]").get(0).text());
		
//		snote="<html><body>"+note.html().replaceAll("<div.*>", "")
//				.replaceAll("</div>", "")+"</body></html>";
		
		
//		snote.append(note.html().replaceAll("<div.*>", "").replaceAll("</div>", ""));
//		}
		
		
		com.itextpdf.text.Document document=new com.itextpdf.text.Document();

        String name=TestJsoup.class.getResource("/").getFile().substring(1)+"/results/loremipsum.pdf";
        
        Files.deleteIfExists(Paths.get(name));
        Files.createFile(Paths.get(name));
        
		PdfWriter writer = PdfWriter.getInstance(document,    
		new FileOutputStream(name));
		
		writer.setViewerPreferences(PdfWriter.HideToolbar);


	    document.open();
	    

	    XMLWorkerHelper.getInstance().parseXHtml(writer, document,

	        new StringReader("<html><body>"+arti.warpInfo()+"</body></html>"));
	    
//	    System.out.println(snote);

	    document.close();

	}

}

 代码已经是乱七八糟的了....

还有个Article的vo类:

package org.cc.abao.vo;

public class Article {

	private String title;
	private String date;
	private String content;
	
	private String wrappedInfo;
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getDate() {
		return date;
	}
	public void setDate(String date) {
		this.date = date;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	
	public  String warpInfo(){
		if(wrappedInfo==null){
		  wrappedInfo="<p><span style=\"font-size: xx-large;\">"+title+"</span></p><p>"+date+"</p><br /><hr /><h2>"+
		  content.replaceAll("<div.*>", "").replaceAll("</div>", "")+"</h2><br /><hr />";
		}
		return wrappedInfo;
	}
}

 

具体的代码就不放了 说下流程:

  1. 从日志的首页获取全部的日志页(从全部的http://www.douban.com/people/maybedekky/notes?start=XX中得到 形式 1到13页的话 也就是 start=0 start=10.....start=120)
  2. 获取日志内容(同时生成Article 放在list中并排序)
  3. 生成日志

这三个分别对应三个工具类:



 具体代码就不发了 不是很难 大家有兴趣自己动手下吧

  • 大小: 44.5 KB
  • 大小: 28.4 KB
  • 大小: 28.8 KB
  • 大小: 350.9 KB
  • 大小: 2.9 KB
0
0
分享到:
评论

相关推荐

    android仿豆瓣日志源码

    【Android仿豆瓣日志源码解析】 在Android开发中,我们常常需要实现各种各样的界面交互,其中之一就是模仿豆瓣的写日志功能。这个“android仿豆瓣日志源码”项目,虽然并未直接提供可运行的代码,但它为我们提供了...

    豆瓣的成长路线.pdf

    - **团队协作**:随着团队规模的扩大,豆瓣网开始使用frodo作为开发用机,并引入了Subversion、Trac等工具支持多人协作开发。 #### 三、总结 豆瓣网的技术架构从最初的单一服务器发展到了多服务器集群,并且不断...

    源代码:网站制作豆瓣电影.rar

    【描述】:“源代码:网站制作豆瓣电影”描述简单明了,意味着提供的是实现一个功能完备的豆瓣电影网站的完整代码。这通常包括用户界面、电影信息展示、评分系统、评论功能、搜索功能等关键模块。 【标签】:虽然...

    pip使用豆瓣的镜像源.pdf

    使用豆瓣镜像源可以显著提高`pip`安装Python依赖库的速度和成功率。 要将`pip`的默认源改为豆瓣镜像源,首先需要编辑或创建`pip`的配置文件。在大多数系统中,这个文件位于`~/.pip/pip.conf`。如果该文件不存在,...

    基于python抓取豆瓣电影TOP250的数据及进行分析.pdf

    本篇文档《基于python抓取豆瓣电影TOP250的数据及进行分析.pdf》首先强调了Python语言在数据分析、数据抓取和数据清洗等领域的应用,指出Python作为一门入门简单、应用广泛的编程语言,它的数据包和框架也越来越成熟...

    豆瓣网首页制作项目.rar

    在制作豆瓣首页时,需要合理地使用`&lt;header&gt;`、`&lt;nav&gt;`、`&lt;main&gt;`、`&lt;section&gt;`、`&lt;article&gt;`、`&lt;aside&gt;`和`&lt;footer&gt;`等语义化标签来组织页面内容。 - 创建页面元素,如轮播图、推荐板块、导航栏等,通过`&lt;div&gt;`、`...

    源代码:网站制作豆瓣图书.rar

    【标题】"源代码:网站制作豆瓣图书.rar" 暗示了这是一个关于构建与豆瓣图书相关的网站的源代码集合。这个压缩包很可能是为学习或参考目的而提供的,帮助开发者了解如何创建一个类似豆瓣网的图书信息展示平台。源...

    微信小程序demo:豆瓣电影:使用API(源代码+截图)

    微信小程序demo:豆瓣电影:使用API(源代码+截图)微信小程序demo:豆瓣电影:使用API(源代码+截图)微信小程序demo:豆瓣电影:使用API(源代码+截图)微信小程序demo:豆瓣电影:使用API(源代码+截图)微信小程序demo:...

    python web网页制作 豆瓣250部高分电影

    在本项目中,“python web网页制作 豆瓣250部高分电影”是一个针对初学者和进阶者设计的实践项目,旨在利用Python Web技术来构建一个展示豆瓣评分前250部高分电影的网站。这个项目可以帮助学习者巩固Python Web基础...

    基于python的豆瓣电影数据采集与分析可视化.pdf

    该技术使用网络爬虫技术来采集豆瓣电影的短评数据,然后对数据进行清洁和预处理,最后使用 WordCloud 库和 matplotlib 库对数据进行可视化分析。 知识点: 1. 网络爬虫技术:爬虫是指按照某种规则从网络上自动爬取...

    HTML + CSS + 练习静态页面 + 实现豆瓣首页

    6. **列表与卡片**:豆瓣首页经常使用列表展示信息,如电影列表。需要了解如何使用`&lt;ul&gt;`、`&lt;li&gt;`以及CSS创建卡片样式。 7. **按钮与链接**:正确样式化按钮和链接,确保其可点击性,并根据需要添加交互效果。 8. ...

    豆瓣相册ios应用

    豆瓣API的解析与使用** 豆瓣API是豆瓣网对外提供的接口,允许开发者获取豆瓣平台上的数据,如相册、书籍、电影等信息。在豆瓣相册iOS应用中,首先需要注册并获取到API密钥,然后通过HTTP请求发送到豆瓣API服务器,...

    基于vue搭建一个简易版豆瓣

    在本项目中,我们将探讨如何使用Vue.js框架来构建一个简易版的豆瓣应用。Vue.js是一个流行的前端JavaScript框架,以其轻量级、易学性和组件化特性受到开发者喜爱。通过这个项目,我们可以深入理解Vue.js的核心概念和...

    爬取豆瓣电影短评并制作词云

    在本项目中,我们将探索如何爬取豆瓣电影的短评数据并使用这些数据来创建一个词云图。词云是一种视觉表示文本数据的方式,通过这种方式,我们可以直观地看到哪些词汇在评论中出现得最频繁。以下是你需要了解的关键...

    小程序源码 豆瓣电影 (代码+截图)

    小程序源码 豆瓣电影 (代码+截图)小程序源码 豆瓣电影 (代码+截图)小程序源码 豆瓣电影 (代码+截图)小程序源码 豆瓣电影 (代码+截图)小程序源码 豆瓣电影 (代码+截图)小程序源码 豆瓣电影 (代码+截图)小程序源码 ...

    抓取豆瓣影评并制作词云

    爬取豆瓣电视剧天盛长歌影评,并去掉其中的停止词,生成词云,

    使用动态IP池+cookie爬取豆瓣豆瓣影评数据

    本教程将探讨如何利用动态IP池和cookie来爬取豆瓣网站上的影评数据,以实现更高效、稳定的数据抓取。 首先,我们需要了解动态IP池的概念。动态IP池是一个能够提供大量不同IP地址的系统,它在爬虫工作时可以频繁更换...

    冰点下载-百度、豆瓣等网站pdf文件下载工具

    "冰点下载"是一款专为从特定网站,如百度、豆瓣等,下载PDF文件而设计的工具。这款软件能够帮助用户方便快捷地获取网络上的PDF资源,尤其在这些网站默认不提供直接下载链接或者需要特殊处理的情况下。接下来,我们将...

    豆瓣Top 250电影数据挖掘及评分预测.pdf

    豆瓣Top 250电影数据挖掘及评分预测.pdf

Global site tag (gtag.js) - Google Analytics