自己动手写CSDN博客提取器源码分析之三:处理网页保存为pdf文件
下面我讲下处理pdf文件的,这里我用了PD4ML来处理的,原因有几个:(1)、它对CSS的支持做的很好;(2)、可以处理图片(很爽吧)(3)、可以处理中文,不过麻烦一些。基础的过程可以看我的另外一篇帖子java编程将HTML文件转换成PDF文件http://blog.csdn.net/w397090770/article/details/7753166。下面是我的处理流程:
/**
*
*/
package com.wyp.html2pdf;
import java.io.File;
import java.io.FileOutputStream;
import java.io.StringReader;
import org.zefer.pd4ml.PD4Constants;
import org.zefer.pd4ml.PD4ML;
import org.zefer.pd4ml.PD4PageMark;
/**
* @author w397090770
* Create Data: 2012-7-18
* Email: wyphao.2007@163.com
*
* 版权所有,翻版不究,但是在修改本程序的时候务必加上这些注释。谢谢
* 仅用于学习交流之用
*
* 保存网页为PDF
*/
public class saveAsPDF {
// HTML代码来自于HTML文件
public void generatePDF_2(File outputPDFFile, String contents, String title)
throws Exception {
File saveFileName = new File(outputPDFFile.getAbsoluteFile() + File.separator + title + ".pdf");
if(!saveFileName.exists()){
saveFileName.createNewFile();
}else{
return;
}
FileOutputStream fos = new FileOutputStream(saveFileName);
PD4ML pd4ml = new PD4ML();
//页眉
PD4PageMark headerMark = new PD4PageMark();
headerMark.setAreaHeight(30);
headerMark.setInitialPageNumber(1);
headerMark.setPagesToSkip(1);
headerMark.setTitleAlignment(PD4PageMark.CENTER_ALIGN);
headerMark.setHtmlTemplate(title); // autocompute
pd4ml.setPageHeader(headerMark);
//页脚
PD4PageMark footerMark = new PD4PageMark();
footerMark.setAreaHeight(30);
footerMark.setInitialPageNumber(10);
footerMark.setHtmlTemplate("武汉大学");
pd4ml.setPageFooter(footerMark);
//选择纸张大小、字库目录、字体等
pd4ml.setPageSize(PD4Constants.A4);
pd4ml.useTTF("file:fonts", true);
pd4ml.setDefaultTTFs("YouYuan", "Arial", "Courier New");
pd4ml.enableDebugInfo();
pd4ml.render(new StringReader(contents), fos);
}
}
代码页很简单的。
自己动手写CSDN博客提取器源码分析之三:处理网页保存为pdf文件相关推荐
- nanotime java 博客园_JVM源码分析之System.currentTimeMillis及nanoTime原理详解
JDK7和JDK8下的System.nanoTime()输出完全不一样,而且差距还非常大,是不是两个版本里的实现不一样,之前我也没注意过这个细节,觉得非常奇怪,于是自己也在本地mac机器上马上测试了一 ...
- 自己动手编写CSDN博客备份工具-blogspider之源码分析(3)
作者:gzshun. 原创作品,转载请标明出处! 来源:http://blog.csdn.net/gzshun 周星驰:剪头发不应该看别人怎么剪就发神经跟流行,要配合啊!你看你的发型,完全不配合你的脸 ...
- 用Windows Live Writer写CSDN博客和网易博客
用Windows Live Writer写CSDN博客的步骤如下: 安装Windows Live Writer后,会有一个添加账户的向导 在第一步"选择博客类型"时,选择" ...
- 写完博客文章后,再给爬下来,保存在本地~ 哈阿哈
写完博客文章后,再给爬下来,保存在本地~ 哈阿哈 为什么不直接CV呢?那还是爬取比CV快呀~傻瓜 继上次爬取了博主的文章列表后,再做下载保存文章.搜索引擎 查询后,果然没有python办不到的事,借鉴 ...
- WordPressJustNews资讯博客类模板源码V5.2.2版
JustNews是一款专为博客.自媒体.资讯类的网站设计开发的Wordpress主题,JustNews主题支持自主研发的前端用户中心,支持前端用户中心,可以前端发布/投稿文章,功能强大且简约. 更新日 ...
- Typecho情侣博客Brave主题源码
教你如何搭建属于自己的情侣博客Brave主题源码,Brave主题是一款适合有对象的博主使用,具有计时器?.留言板.恋爱清单.点点滴滴记录等功能,今天就来教大家如何搭建此类情侣博客. 主题配置 第一步: ...
- Emlog博客主题模板源码简约好看响应式
非常优秀的EMlog博客模板beginning,这是款非常优秀的emlog模板,采用自适应式设计, 界面精致好看,大气美观,展示博客数据统计的个人中心类型头部,自媒体气息十足: 内置5种分类文章列表页 ...
- 基于Spring Boot的个人博客系统(源码+数据库)
目录 一.系统功能框架图 二.开发技术 三.开发环境 四.页面展示 1.登录页面 2.首页 3.文章详情页面 4.文章评论页面 5.后台页面 6.后台文件编辑页面 7.后台文章管理列表页面 五.文 ...
- 博客园HTML源码运行特制js(原创自Zjmainstay)
canrun 测试运行HTML <html> <head><title>测试博客园HTML源码运行程序</title><meta http-equ ...
最新文章
- 从零开始学 Web 之 BOM(四)client系列
- Hadoop 2.0(YARN/HDFS)学习资料汇总
- oracle触发器 select into,Oracle触发器中selectinto报错no_data_found异常处理
- Python中关于进度条的6个实用技巧
- 执行sqoop 用shell_Mysql和Hive之间通过Sqoop进行数据同步
- jupyter 共享_可共享的Jupyter笔记本!
- 在Kotlin中使用Gradle构建缓存
- 中国颜色(鼠标双击)
- php输出文件,数组
- 通过CVE-2017-17215学习路由器漏洞分析,从入坑到放弃
- 《.NET框架程序设计》第5章 基元类型、引用类型与值类型
- Kubernetes 小白学习笔记(30)--kubernetes云原生应用开发-service mesh介绍
- BigPipe为什么可以节省时间?
- Mysql实现汉字首字母大写搜索
- 周星驰vs韩寒vs宁浩…Python告诉你春节该看哪部电影
- Druid配置——Ingestion Spec(摄取规范)
- 如何提问,才能让别人回答我们的问题呢?
- python中有指针吗_Python中的指针——到底指什么(一)
- 大数据是什么?一篇文章正确告诉你
- rinetd 在生产环境要谨慎使用
热门文章
- 24年前他被余承东招入华为,现在掌舵第四大事业群,对垒阿里张建锋、百度王海峰,腾讯汤道生...
- 8.23 正点原子领航者V1开发板学习之EEPROM
- 洛谷P1551 亲戚
- Allegro焊盘种类
- 入门C语言模板,C语言入门经典-C语言编程
- aws云服务器会自动扣费吗,AWS云服务免费套餐竟然扣钱了?可能是因为你的region没管好...
- DOH(DNS-over-HTTPs)服务器搭建
- 【Lambda】LCAC第十四次会议重要内容摘取
- Layui的eleTree树式选择器使用
- P1598 垂直柱状图