自己动手写CSDN博客提取器源码分析之三:处理网页保存为pdf文件

2023-10-31

转载自: http://blog.csdn.net/w397090770/article/details/7768129

 

 

下面我讲下处理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);
	}
}


代码页很简单的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自己动手写CSDN博客提取器源码分析之三:处理网页保存为pdf文件 的相关文章

  • 如何将焦点设置在 BootStrap 中的第一个输入字段上? [复制]

    这个问题在这里已经有答案了 可能的重复 如何将焦点设置到独立于 id 的 HTML 表单中的第一个输入元素 https stackoverflow com questions 277544 how to set the focus to t
  • 文件缓存:查询字符串与上次修改时间?

    我正在研究缓存网站资源的方法 并注意到大多数与我类似的网站都使用查询字符串来覆盖缓存 例如 css style css v 124942823 后来 我注意到每当我保存 style css 文件时 最后修改的标头都会 更新 使得查询字符串变
  • 当 Chrome 中嵌套滚动中的数据更改时防止页面滚动

    我在页面中有一个固定大小的元素 带有 溢出 滚动 其内容经常更改 我预计该元素内部发生的更改会影响该元素的滚动 但不会影响页面滚动 但是当这个元素位于页面顶部时 页面本身开始滚动 我怎样才能防止这种情况发生 要重现此行为 我在 chrome
  • 即使我的情况按预期发生变化,Angular ngClass 也不会更新我的课程

    我正在创建的模板中有类似的内容 div class nng 3 div 价值app layout isNavbarFixed等用零或一初始化 并且页面第一次加载时 适当的类被插入到我的div 不过 此后通
  • 如何在 HTML 中将文本设置为粗体?

    我正在尝试使用 HTML 将一些文本加粗 但我很难让它发挥作用 这就是我正在尝试的 Some
  • 如何让php页面从html页面接收ajax post

    我有一个非常简单的表单 其中有一个名字输入字段 我捕获了表单数据 并使用标准 jQuery 发布方法通过 ajax 将其传输到 PHP 页面 但是 我根本无法从 PHP 页面获得任何在服务器端捕获数据的响应 我不确定我做错了什么或缺少什么
  • 如何计算一行中Flexbox项目的数量?

    网格是使用 CSS flexbox 实现的 Example http jsbin com jumosicasi edit html css js output 本示例中的行数为 4 因为我出于演示目的固定了容器宽度 但是 实际上 它可以根据
  • 如何使用 Django (Python) 登录表单?

    我在 Django 中构建了一个登录表单 现在我遇到了路由问题 当我选择登录按钮时 表单不会发送正确的遮阳篷 我认为前端的表单无法从 查看 py 文件 所以它不会发送任何 awnser 并且登录过程无法工作 该表单是一个简单的静态 html
  • Radiobutton-带有纯 html/css 的按钮

    是否可以创建像这样的单选按钮JQuery http jqueryui com demos button radio那些 用纯html css thanks 试试这个小提琴 http jsfiddle net mcXm7 1 http jsf
  • Youtube API 设置当前时间

    我目前正在我的一个项目中使用 You Tube API 我的使用方法如下 var tag document createElement script tag src https www youtube com iframe api var
  • Bootstrap 4.1 中悬停时的下拉菜单

    我有一个网站 我在其中创建了下拉菜单引导程序4 1 https getbootstrap com docs 4 1 dist css bootstrap min css 此时 下拉菜单正在点击 我用来创建下拉列表的 HTML 代码是 div
  • 在 CSS 选择器中转义双引号

    我有一个 html 标签 div style background image url div images test jpg gt 我想使用 CSS 选择器来定位这个元素 我尝试了下面的选择器 但它抛出错误 document queryS
  • 为什么我的析构函数中的异常没有触发 std::terminate?

    我很清楚不应该在析构函数中抛出任何异常这一事实 但作为掌握这个概念的一部分 我编写了这个示例 include
  • ScrollTop 在 Chrome/Safari 中不起作用

    我的网站上有一个循环内的表单 当有人提交表单时 查询字符串会添加到 URL 中 例如 updated 111 然后 我的 JQuery 脚本检查数字的 url 并在提交表单并重新加载页面后滚动到该 div 该脚本在 Firefox 中运行良
  • 拖放 HTML5 jQuery:带有 JSON 的 e.dataTransfer.setData()

    这是我的拖拽 dragstart function e this css opacity 0 5 e dataTransfer effectAllowed move e dataTransfer setData application js
  • 使用java在mysql中插入带有\\的文件路径

    我正在使用java制作一个独立的应用程序 并且我需要插入用户从文件选择器中选择的图像的路径 我正在获取文件的路径 但是当我将其存储在数据库 mysql 中时 它不会存储 所以当我检索该路径时 该文件不会显示 如何存储文件的路径 这样就可以使
  • 我什么时候应该使用内联和外部 Javascript?

    我想知道什么时候应该包含外部脚本或将它们与 html 代码内联编写 就性能和易于维护而言 这方面的一般做法是什么 真实场景 我有几个需要客户端表单验证的 html 页面 为此 我使用了一个包含在所有这些页面上的 jQuery 插件 但问题是
  • 隔离必需的字段验证器?

    我在页面上有两个搜索按钮 一个链接到下拉列表 另一个链接到带有文本框的下拉列表以获取更多搜索条件 我在所有上述控件上都需要现场验证器 当我从第一个下拉列表中选择某些内容并单击相应的搜索按钮时 文本框的字段验证器会触发 从而禁用第一个搜索按钮
  • Bootstrap - 为反向行模式创建移动自适应

    我想用 Bootstrap 创建一个反向效果 第一行 左边是文字 右边是图像 第二行 左边是图片 右边是文字 第三行 左边是文字 右边是图片 第四行 左边是图片 右边是文字 而且这种情况一直持续下去 它在大型设备上看起来非常漂亮 但当它在设
  • 具有相等宽度和高度 TD 的响应式表格

    如何创建每个单元格 TD 具有相同宽度和高度的响应式 HTML 表格 因此 当我调整浏览器窗口的大小或调整表格容器的大小时 表格将调整大小 但每个单元格将具有相同的高度和宽度 基金会不关心这个 当我用固定宽度和高度 以像素为单位 初始化 T

随机推荐

  • Android JNI编程 与 NDK开发(一) 简介,区别,使用场景

    JNI是什么 JNI 全称Java Native Interface 是java与其他语言 主要是c c 交互的接口 是java的一种特性一种协议 开发者可以通过JNI在java中调用c c 代码或在c c 中调用java代码 NDK是什么
  • checkbox与dataTable的完美结合

    本文介绍了richface的一种使用情况 datatable和checkbox的结合 rich dataTable是很不错的web控件 但如果编写如下图效果的业务 必须结合checkbox来使用 现附上代码 然后分析 Html代码
  • Xpath方法精准采集网页内容-完整版

    采集规则配置时 主要的问题是如何只采集网页上的有效内容 现在新一代的采集工具都会先智能自动配置好采集规则 效果与准确性就得看各家采集器的智能算法了 但如果有特殊的需求 要采集网页上特定区域的内容 智能算法配置的采集规则就得进行修改了 重新定
  • ArchiMate® 3.1 规范:新版标准

    2019年11月5日 面向Enterprise Architecture的最新版 ArchiMate 建模语言在阿姆斯特丹 The Open Group 会议上发布 版本 3 1 是对之前主要版本 3 0 2016 年发布 的更新 此次更新
  • Web前端——Javascript学习(API)

    1 API 应用程序编程接口 这是实现的 现成的对象和方法 提高开发效率 2 数组API 1 arr to String var str arr toString var str arr join 连接符 自定义连接符 固定套路 1 将字符
  • Python新手入门-操作篇

    原文来自于 https www jb51 net article 163306 htm pycharm是一款高效的python IDE工具 它非常强大 且可以跨平台 是新手首选工具 下面我给第一次使用这款软件的朋友做一个简单的使用教程 希望
  • redhat系统操作小解

    redhat操作系统常见操作问题 今天给大家讲一讲redhat系统常见的操作问题 不用命令就能知道的问题 很多大家都是知道的 但也给大家一一罗列出来 希望能够有帮助 也是对自己知识的一种巩固 首先 大家看到的是开机界面 一般无论是普通用户还
  • 收藏丨8个常用中文OCR数据集,附下载链接

    扫一扫识别文字 拍照翻译 拍照搜题 车牌自动识别 这些随处可见的功能 给我们的工作和生活带来了极大的便利 其背后都离不开OCR技术的支持 随着深度学习技术的发展 智能OCR算法与应用也越来越丰富 对相关数据的需求也增加 许多小伙伴反馈中文O
  • Entity Framework Core系列教程-20-影子属性(Shadow Property)

    Entity Framework Core的影子属性 Shadow Property Entity Framework Core引入了一种新的属性类型 称为 影子 属性 该属性在EF 6 x中不存在 阴影属性是未在 NET实体类中直接定义的
  • 一、VMware及win10虚拟机的安装及环境配置

    一 安装VMware 1 1 下载VMware安装包 在此给大家一个迅雷的链接 点击下载 提取码 sp84 1 2 点击下一步 1 3 点击我接受 点击下一步 1 4 更换安装位置 点击下一步 1 5 点击下一步 1 6 点击下一步 1 7
  • 系统分析和设计方法之使用UML进行面向对象设计和建模

    使用UML完成系统建模是一件不错的事 不过在权衡进度 成本之后 大体上会知道能不能做 并不是对系统好的事情我们都要完成 重点在于资源约束 此处只是在资源约束满足时 应该怎么处理UML设计的通用流程 在实际工作场景中要根据要求做取舍 这是一篇
  • Linux入门:tar、gzip、bzip2以及zip的区别

    Linux入门 tar gzip bzip2以及zip的区别 tar命令 gzip以及bzip2命令 zip命令 区别 正文处理命令 tar命令 1 归档 archiving 就是将许多文件 或目录 打包压缩成一个文件 2 tar命令 压缩
  • flex 实现水平布局 三等分

    box display flex flex direction row justify content space between align items center 对应的html 如下 div class box div 已售 div
  • python菜鸟学习Day10(SMTP发送邮件及带附件及错误及发送短信)

    我们通过http协议可以访问网站 同样 我们通过SMTP协议可以发送邮件 python中的smtplib模块对SMTP进行了简单封装 可以实现源地址向目标地址发送邮件 方法 含义 SMTP host port local hostname
  • Vue项目打包并发布的完整步骤记录

    如何将Vue项目打包并发布 我这边是测试发布到本地 不过步骤是一样的 步骤如下 1 安装部署Nginx服务器 说明 Nginx engine x 是一个高性能的HTTP和反向代理服务器 也是一个IMAP POP3 SMTP服务器 同时 也是
  • HttpRunnerManager部署

    基于HttpRunner的接口自动化测试平台 HttpRunner djcelery and Django HttpRunner手册 http cn httprunner org git地址 httprunner HttpRunnerMan
  • Java空指针异常:java.lang.NullPointException原因

    Java空指针异常在工作中经常看到 之前我不是很懂这个概念以为如果某个对象没初始化就会报错结果不是 我通过debug打断点发现了具体原因和解决方法 原因 在excel上传解析的时候发现 如果没有初始化对象 里面就是null的 没有分配空间
  • Python爬虫自学要多久?

    时下python爬虫成为时下一种流行的编程语言 从零开始学python爬虫知识要多久了 所谓爬虫是指网络爬虫 web spider 如果把互联网比作一张巨大无比的蜘蛛网 那么web spider就是在这张网上爬来爬去的蜘蛛 而爬虫是通过py
  • 双向电平转换芯片TXB0304应用笔记

    TXB0304作为新一代自动识别方向的电平转换芯片 跟上一代同类器件TXB0104相比 具有更低的工作电压 0 9V 更高的转换速率 1 8V 3 3V间电平转换时最高速率140MBPS 以及更小的封装等优势 也正是因为需要在较低工作电压时
  • 自己动手写CSDN博客提取器源码分析之三:处理网页保存为pdf文件

    转载自 http blog csdn net w397090770 article details 7768129 下面我讲下处理pdf文件的 这里我用了PD4ML来处理的 原因有几个 1 它对CSS的支持做的很好 2 可以处理图片 很爽吧