下面我讲下处理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文件相关推荐

  1. nanotime java 博客园_JVM源码分析之System.currentTimeMillis及nanoTime原理详解

    JDK7和JDK8下的System.nanoTime()输出完全不一样,而且差距还非常大,是不是两个版本里的实现不一样,之前我也没注意过这个细节,觉得非常奇怪,于是自己也在本地mac机器上马上测试了一 ...

  2. 自己动手编写CSDN博客备份工具-blogspider之源码分析(3)

    作者:gzshun. 原创作品,转载请标明出处! 来源:http://blog.csdn.net/gzshun 周星驰:剪头发不应该看别人怎么剪就发神经跟流行,要配合啊!你看你的发型,完全不配合你的脸 ...

  3. 用Windows Live Writer写CSDN博客和网易博客

    用Windows Live Writer写CSDN博客的步骤如下: 安装Windows Live Writer后,会有一个添加账户的向导 在第一步"选择博客类型"时,选择" ...

  4. 写完博客文章后,再给爬下来,保存在本地~ 哈阿哈

    写完博客文章后,再给爬下来,保存在本地~ 哈阿哈 为什么不直接CV呢?那还是爬取比CV快呀~傻瓜 继上次爬取了博主的文章列表后,再做下载保存文章.搜索引擎 查询后,果然没有python办不到的事,借鉴 ...

  5. WordPressJustNews资讯博客类模板源码V5.2.2版

    JustNews是一款专为博客.自媒体.资讯类的网站设计开发的Wordpress主题,JustNews主题支持自主研发的前端用户中心,支持前端用户中心,可以前端发布/投稿文章,功能强大且简约. 更新日 ...

  6. Typecho情侣博客Brave主题源码

    教你如何搭建属于自己的情侣博客Brave主题源码,Brave主题是一款适合有对象的博主使用,具有计时器?.留言板.恋爱清单.点点滴滴记录等功能,今天就来教大家如何搭建此类情侣博客. 主题配置 第一步: ...

  7. Emlog博客主题模板源码简约好看响应式

    非常优秀的EMlog博客模板beginning,这是款非常优秀的emlog模板,采用自适应式设计, 界面精致好看,大气美观,展示博客数据统计的个人中心类型头部,自媒体气息十足: 内置5种分类文章列表页 ...

  8. 基于Spring Boot的个人博客系统(源码+数据库)

    目录 一.系统功能框架图 二.开发技术 三.开发环境 四.页面展示 1.登录页面 2.首页 3.文章详情页面 4.文章评论页面 ​5.后台页面 6.后台文件编辑页面 ​7.后台文章管理列表页面 五.文 ...

  9. 博客园HTML源码运行特制js(原创自Zjmainstay)

    canrun 测试运行HTML <html> <head><title>测试博客园HTML源码运行程序</title><meta http-equ ...

最新文章

  1. 从零开始学 Web 之 BOM(四)client系列
  2. Hadoop 2.0(YARN/HDFS)学习资料汇总
  3. oracle触发器 select into,Oracle触发器中selectinto报错no_data_found异常处理
  4. Python中关于进度条的6个实用技巧
  5. 执行sqoop 用shell_Mysql和Hive之间通过Sqoop进行数据同步
  6. jupyter 共享_可共享的Jupyter笔记本!
  7. 在Kotlin中使用Gradle构建缓存
  8. 中国颜色(鼠标双击)
  9. php输出文件,数组
  10. 通过CVE-2017-17215学习路由器漏洞分析,从入坑到放弃
  11. 《.NET框架程序设计》第5章 基元类型、引用类型与值类型
  12. Kubernetes 小白学习笔记(30)--kubernetes云原生应用开发-service mesh介绍
  13. BigPipe为什么可以节省时间?
  14. Mysql实现汉字首字母大写搜索
  15. 周星驰vs韩寒vs宁浩…Python告诉你春节该看哪部电影
  16. Druid配置——Ingestion Spec(摄取规范)
  17. 如何提问,才能让别人回答我们的问题呢?
  18. python中有指针吗_Python中的指针——到底指什么(一)
  19. 大数据是什么?一篇文章正确告诉你
  20. rinetd 在生产环境要谨慎使用

热门文章

  1. 24年前他被余承东招入华为,现在掌舵第四大事业群,对垒阿里张建锋、百度王海峰,腾讯汤道生...
  2. 8.23 正点原子领航者V1开发板学习之EEPROM
  3. 洛谷P1551 亲戚
  4. Allegro焊盘种类
  5. 入门C语言模板,C语言入门经典-C语言编程
  6. aws云服务器会自动扣费吗,AWS云服务免费套餐竟然扣钱了?可能是因为你的region没管好...
  7. DOH(DNS-over-HTTPs)服务器搭建
  8. 【Lambda】LCAC第十四次会议重要内容摘取
  9. Layui的eleTree树式选择器使用
  10. P1598 垂直柱状图