`
summeryhrb
  • 浏览: 20282 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

根据批量URL生成有书签的PDF文档的解决方案

阅读更多

一、缘起

看到一篇好文章、一篇精彩的博文,我们最早期的做法有两种,添加到收藏夹,或者另存为,后来出现了新的方式,转贴到自己的博客里、或者收藏到一些收藏网站上(比如360doc)。近来又出现了生成PDF文档的方式,比如某些网站,你提交一个url,就为你生成对应的pdfjavaeye的电子书制作也很不错,甚至可以预测一下,浏览器的“另存为”窗口里有可能会有一个*.pdf选项。因为pdf实在是太好了,小巧而有表现力丰富。尽管如此,如果有多篇好的文章呢,比如一个非常优秀的连载(比如牛人写的教程、开发心得),我们能做的也就是添加到收藏夹或添加到自己博客的链接里头。想当年,没钱买书的时候,就在网上找一些教程来看,做得比较好的会有一个页面列出该连载的所有连接,这种情况我通常用迅雷以下载全部链接的方式(再去掉不相关的链接)批量下载下来,做的简单的只提供一个类似于上一篇下一篇的链接,这种情形到现在还是这样。(易用性啊,这个问题可大可小,往大的说,关系到应用模式和商业模式,往小的说也许就是个美观和方便。Javaei提供的快捷阅读采取左边树形菜单展示目录,右边展示内容的形式,这种形式在界面的设计上屡试不爽。)

本文就是要阐述一种根据批量URL生成有书签的PDF文档的解决方案,这个批量URL就是一些好的文章的URL,根据这些URL生成一个合并的PDF文档,并且要有书签(也就是左边的树形菜单),而且必须要有书签。《java与模式》这本书想必很多人都看过,老厚的一本书啊,我没钱买,看的是一个下载的pdf,这个pdf给我的印象太坏了,没有书签,要找个东西只能拉滚动条,尽管如此,我还是看完了,书写的不错,制作pdf的那个人功过相抵。

 

二、思路

目的是要根据批量URL生成有书签的PDF文档,实现这个目的分两步走:先解决根据一个URL生成一个PDF文档,再解决多个PDF合并并生成书签的问题。

1)根据一个URL生成一个PDF文档

根据一个URL生成一个PDF文档看似很容易,因为我们有iText,pdfbox这些开源框架,实则不简单,因为要保证生成的pdf文档打开后的效果要和浏览器里的要一样,这无异于做一个浏览器,目前的浏览器尚且存在兼容的问题,所以自己写一个根据html生成pdf的想法很难实现。那么另一个思路就是利用一些网站来实现这个目的,经过尝试,有些网站是需要提供URLemail,人家把生成好的pdf发到你邮箱,这种形式无法通过代码来访问,也就无法批量处理;有些网站只需提交url,就把生成的pdf响应给客户端,这种形式可以通过程序来批量处理,但是生成的pdf与浏览器里的效果相差太远;还有一些网站根本就不支持中文。通过探索,终于找到一个网站提供的C#做的dll可以达到这个要求,利用这个dll,写个简单的C#程序就可以批量的生成pdf了,而且效果相当完美,美中不足的是生成的pdf里有人家的水印。

2)多个PDF合并并生成书签

多个PDF合并并生成书签可以轻松的用iText搞定,合并是有一定的顺序的,并且书签是树形结构的,因此合并的顺序,书签的层次结构是需要事先确定好的。所以对批量的URL要进行一定的描述,那么很自然的选择xml

 

三、实现

我现在越来越觉得,只要不是基础设施的东西,技术上都很简单,关键是你有没有想法。这个实现先从xml描述开始。

Xml描述分两步,先简单的描述一批URL(这里叫做href.h2p.xml),再来描述层次关系(这里叫做outline.h2p.xml)。h2p就是html to pdf的意思

         先看href.h2p.xml

<href-info>

         <href id="KxgYaRxG">

                   <value><![CDATA[http;//www.163.com]]></value>

         </href>

         <href id="53Bw5A32">

                   <value><![CDATA[http://www.sohu.com]]></value>

         </href>

         <href id="eyEis6ra">

                   <value><![CDATA[http;//news.163.com]]></value>

         </href>

         <href id="DMQoSN2t">

                   <value><![CDATA[http;//sports.163.com]]></value>

         </href>

         <href id="5vaf3LN7">

                   <value><![CDATA[http://news.sohu.com]]></value>

         </href>

</href-info>

这个xml很简单,之所以这样描述,是因为URL通常会有&而这个符号不能出现在xml里,而且作为属性的值,还不能用<![CDATA[]]>,所以就作为一个节点了。

根据这个xml生成的每个pdf文件的名字取id的值,后缀为pdf

outline.h2p.xml内容如下:

<book name="我的PDF">

         <chapter name="163" href="KxgYaRxG">

                   <chapter name="163新闻" href="eyEis6ra" />

                   <chapter name="163体育" href="DMQoSN2t" />

         </chapter>

         <chapter name="sohu" href="53Bw5A32">

                   <chapter name="sohu新闻" href="5vaf3LN7" />

         </chapter>

</book>

这个xml描述了每个pdf合并的顺序,href的值和上一个xmlid值对应,chapter标签嵌套的层次就是书签的层次,name的值就是书签的名称。iText根据这个xml把每个pdf合并成一个pdf,并生成书签。

我把这两个xml文件称为h2p文件。

 

四、h2p文件

行文到这里,这个解决方案就算结束了,俗话说,巧妇难为无米之炊,首先我们要有上面说的这两个xml文件,这两个xml文件如果靠手工编辑的话,少量的URL还行,如果多了就不方便了。所以应该有一个工具来编辑h2p文件。完整的解决方案请点击这里

0
0
分享到:
评论

相关推荐

    PDF批量合并及目录书签生成软件(ePDF)V6.0

    PDF批量合并及目录书签生成软件(ePDF)V6.0是一款非常实用的PDF文件操作工具,具有批量生成PDF目录书签、合并多个PDF并自动生成目录、图片转换PDF、PDF添加水印、PDF加密、PDF拆分等功能 。所有的操作均非常简单,...

    Image2Pdf_4.3-批量生成PDF,双层PDF转换工具.rar

    Image2Pdf_4.3是一款专门用于批量生成PDF文件并支持双层PDF转换的实用工具。这个工具的主要功能是将图像文件转化为PDF文档,同时它还具有创建双层PDF的能力,使得用户在处理扫描文档或者图片时能进行更深度的文字...

    在线批量生成URL HTML单页网页程序源码

    标题 "在线批量生成URL HTML单页网页程序源码" 提供了一个关键的IT知识点,即如何利用编程技术高效地创建大量HTML单页网页。...对于学习Web开发或需要处理大批量链接的用户来说,这是一个非常有价值的技术解决方案。

    PDF批量目录生成器(ePDF).zip

    PDF批量目录生成器(ePDF)是一款专为处理PDF文档而设计的强大工具,它集成了多种功能,包括PDF目录生成、PDF文件合并、PDF文件加密以及PDF文件拆分,旨在提高用户在处理PDF文档时的工作效率。 1. **PDF目录生成**: ...

    用C#.NET实现生成PDF文档和将WORD转换为PDF

    在现代信息化社会中,处理文档是最常见的任务之一,其中生成PDF文档以及转换文件格式尤为重要。尤其在使用C#.NET进行编程时,能够实现这两种功能,不仅可以提高工作效率,还可以满足多种业务需求。本文将详细探讨...

    Word转PDF时自动生成书签(目录)

    "Word转PDF时自动生成书签(目录)"这个话题涉及到的是如何在进行转换时,确保PDF文件能够保留Word文档中的章节结构,并自动生成方便阅读的书签(目录)。这通常对于长篇文档或技术手册来说非常重要,因为它提供了对...

    pdf批量生成书签.rar

    非常好用的PDF工具,可以轻松的为PDF文档自动添加目录,内附详细教程。 在网上下的电子书籍 , 因为是扫描版本 , 所以根本没有目录 , 尽管pdf阅读器它提供了添加目录的方法 , 但是 , 需要自己一个一个去手动添加 , ...

    word批量转pdf带书签.rar

    标题中的"word批量转pdf带书签.rar"指的是一个压缩包文件,它的主要功能是将多份Word文档转换成PDF格式,并且转换后的PDF文件会带有书签,这对于组织和导航长文档非常有帮助。书签在PDF中起到了目录的作用,用户可以...

    用C#实现生成PDF文档(附源码)

    在本文中,我们将深入探讨如何使用C#编程语言来生成PDF文档。提供的代码示例是一个简单的C#程序,它利用文本流(StreamWriter 和 MemoryStream)直接创建一个基本的PDF文件。这个程序展示了PDF文档的基本结构,并...

    linux wkhtmltopdf html生成pdf 批量生成pdf 合并pdf

    总结来说,这个项目提供了一个对`wkhtmltopdf`的Java封装,增加了批量生成PDF和合并PDF的功能,适合在Linux环境下进行文档处理和运维工作。通过Maven管理依赖,使用Java编写,且具有一定的开发友好性,方便集成到...

    python 实现 pdf 书签读取、批量写入源码

    Python在处理PDF文档时提供了多种库,其中包括PyPDF2,这是一个强大的库,用于读取、合并、分割PDF文件,以及处理PDF的元数据,包括书签。本篇将详细介绍如何利用Python来实现PDF书签的读取和批量写入。 首先,让...

    Word文档批量转换PDF文档

    1、支持Word文档批量转换PDF文档。 2、PDF文档批量设置Owner密码(普通用户可正常打开文档,但没有编辑、复制、打印、另存等权限)。 3、PDF文档批量设置水印。

    pdf文档加盖批量印章之Acrobat Javascript

    ### PDF文档批量加盖印章的方法——使用Acrobat JavaScript 在日常工作中,我们经常需要对大量的PDF文档进行批处理操作,比如盖章、签名等。对于这些重复性高的任务,手动一页一页地进行操作不仅效率低下,而且容易...

    pdf根据目录快速添加书签软件

    这类软件的主要功能是自动根据PDF文档内的目录结构生成书签。在2010年,虽然PDF技术已经相当成熟,但自动添加书签的工具可能还不像今天这样普遍。这些工具通常具备以下特性: 1. **自动检测目录**:软件会扫描PDF...

    批量生成word日志文档工具

    批量生成Word日志文档工具是一款高效实用的软件,专为解决大量Word日志记录的整理问题而设计。在日常工作中,我们可能面临大量的日志数据需要整理成规范化的Word文档,尤其是在IT系统维护、项目管理或者数据分析等...

    使用poi根据模版生成word文档并转换成PDF文件

    本文将深入探讨如何利用Apache POI框架根据模板生成Word文档,并进一步将其转换为PDF文件。 首先,Apache POI提供了一个名为HWPF(Horrible Word Processor Format)的组件,用于处理Word文档。通过这个组件,我们...

    超级PDF批量书签编辑

    "超级PDF批量书签编辑"工具正是为了解决这一问题而设计的,它允许用户一次性对多个PDF文件进行书签的添加、修改和删除,极大地提高了工作效率。 PDF书签编辑的基础概念包括: 1. **书签**:PDF书签类似于电子书中...

    pdf文档加书签,有说明

    标签"pdf文档"、"书签"、"有说明"进一步明确了主题,表明这个教程将专注于PDF文档的管理和组织,特别是通过书签功能,以及该工具的使用方法会有详细解释。 在压缩包内的文件"pdf_加_标签"可能是这个工具的执行程序...

    一键修改PDF书签为适合宽度

    "一键修改PDF书签为适合宽度"的工具就是为了解决这个问题而设计的,它能够批量处理PDF文档中的所有书签,自动调整至适合宽度,极大地提升了用户在查阅和管理PDF文档时的体验。 这个工具的核心功能主要涉及以下几个...

    Python 如何把Word文档批量转换为PDF文档 Python源码

    Python 如何把Word文档批量转换为PDF文档 Python源码Python 如何把Word文档批量转换为PDF文档 Python源码Python 如何把Word文档批量转换为PDF文档 Python源码Python 如何把Word文档批量转换为PDF文档 Python源码...

Global site tag (gtag.js) - Google Analytics