作者:马健
邮箱:stronghorse_mj@hotmail.com发布:2006.05.26
更新:2008.08.24


补充说明:此文成文较早,其中对Pdg2Pic、FreePic2Pdf的描述早已过时,请参照最新版Pdg2Pic、FreePic2Pdf的使用说明。


一、前言
二、截图法
三、打印法
四、BooX Viewer
五、pdg2bmp&jpg&tif&pdf&txt
六、Pdg2Pic
七、方法之比较与展望
八:题外话:图像文件转PDF

一、前言

PDG文件是超星公司电子图书的专有格式,需要用超星公司的专用浏览器才能阅读。本文讨论PDG转图像、PDF的方法,仅出于研究目的,并无意对超星公司的版权进行任何形式的侵犯,也不希望任何人用本文讨论的工具或方法从事侵权活动。如果需要浏览PDG电子书,请通过购买点卡等方式,以合法的途径获得。

本文假定用户通过合法的手段获得PDG文件,只是由于希望能够在比超星浏览器更好、更方便的浏览器上阅读,并且不对转换出来的文件进行扩散的情况下,才需要将PDG文件转换成图像文件或PDF文件。

二、截图法

简单点说,就是通过截图的方法,直接将超星浏览器中显示的内容,截为图片,再将图片转换成PDF文件

这个方法可能是世界上最简单、最朴素,也是最容易想到的方法,并且对于所有版本的超星浏览器和所有能够正常显示的PDG文件均适用。制约这个方法的因素包括:

  • 页面大小超出显示区域,导致截图截不全。解决的办法包括:找一台支持高分辨率设置的PC(现在17"液晶已经很便宜,19"也快平民化了);如果显卡支持旋转显示,则将整个屏幕旋转90°显示,方便显示细长页面。
  • 手工一页一页截图,劳动强度比较大。解决的办法就是用各种现成的按键、鼠标录制/播放软件与屏幕截图软件相结合,或者自己做一个连翻页带截图的小软件,实现自动化操作。
  • 截出来的图像可能需要进行整理,包括切边、图像文件格式转换等。

总之,截图法虽然有一些限制,用起来也比较麻烦,但很难被超星屏蔽,不失为一种终极的方法。

三、打印法

即在超星浏览器中发布打印命令,将正在浏览的PDG文件打印到PDF虚拟打印机(包括Acrobat
PDF打印机、PDFFactory打印机等),成为PDF文件。

这种方法也是较早被用于转换PDG文件的方法之一,而且用起来非常简单、方便,因此广为流传,导致后来超星阅读器针对这种方法加了一些限制,但是这些限制很快就被突破,然后双方就这样乐此不
疲、义无反顾、周而复始地一轮、一轮折腾下去。虽然在无关的人看来有点无聊,但是投身其中的人经常都会为每一个微小的突破而激动 ,还真是有精神寄托的人生。

目前制约这个方法的因素包括:

  • 超星浏览器对PDF打印机的封锁。
    新版超星浏览器会检查打印机的名称,发现是PDF打印机则不让打印。不过超星软件毕竟没有人智能,打印机被人一改名就检测不出来了。也有人先将PDG打印到支持PostScript(PS)文件格式的真实打印机,再用Acrobat将PS文件转换成PDF文件,以绕过超星对虚拟打印机的检查。
  • 超星浏览器对打印页数的限制。超星浏览器会限制合法用户每个月的打印总页数,够数(每月一千页)后就不允许打印。解决的办法包括将ssreader.ul文件属性改为只读,或定期对这个文件进行备份、恢复。
  • 超星浏览器对打印效果的限制。
    新版本的超星浏览器可能对以前的限制与反限制游戏终于厌倦了,因此干脆在打印的时候降低打印质量,导致打印出来的PDF图像质量与原始PDG文件差很多。针对这一招,目前网上提出的解决办法包括将新版DLL文件替换为旧版DLL,或提高打印机DPI设置等。

总之,在我看来,打印法虽然简单方便,打印黑白图像也问题不大,但是打印灰度/彩色图像会出现图像质量衰减或文件膨胀等问题,所以至少我自己不到不得已是不会用的。

四、BooX Viewer

BooX
Viewer是Momotalo、ShunCox、dd321等合作开发的一款轻量、绿色PDG浏览器,无需安装,单独一个EXE文件即可运行,并且能够直接读取ZIP文件中的PDG文件等,这些都比原版超星浏览器强,也导致了它的流行。

早期版本的BooX
Viewer提供一个“转换到DjVu”功能,该功能先将PDG文件转换成BMP,再转换成DjVu文件。因此也有人利用此功能的前半部分,先将PDG文件转换成BMP,再将BMP转换成PDF。不过这个功能在后来的版本中已经取消了,并且加了一些类似广告的限制。

BooX
Viewer的开发基于对PDG文件格式的分析,不需要超星浏览器或DLL的支持,并且能够解码加密的10H等格式,这些都让我对其开发者充满了敬意。

五、pdg2bmp&jpg&tif&pdf&txt

这个软件是coolman开发的,对PDG的支持(包括OCR)基于超星Pdg2控件,对图像、PDF的支持基于Pegasus ImagXpress
Professional控件,运行前需要先注册控件。

这个软件的发行范围很窄,最新版是多少我也不知道,只能以我手上现有的3.8b0419版来说事。在使用这个版本的过程中,我发现它存在下列限制:

  • 直接将PDG转换成PDF,则所有彩色、灰度图像均变成黑白图像。解决的办法是先转换成BMP,再用其它软件将BMP转换成PDF
    但是不知道为什么,pdg2bmp&jpg&tif&pdf&txt没有文件重新编号功能,所以在从BMP转换成PDF时,页面顺序调整起来很麻烦。
  • 将PDG转换成BMP等图像格式时,允许使用多线程并行转换,但是似乎稳定性会随之下降,所以我都只敢用单线程转换。
  • 最要命的一点就是:这个软件在转换时需要占用系统剪贴板,因此如果在转换过程中同时用Office等软件干活(没办法,转换过程实在是太漫长了),则复制/粘贴功能将失效。我先是在工作时发现了这个问题,然后用剪贴板监视软件证实了我的猜测。对剪贴板的占用不仅影响前台软件的正常使用,而且由于Windows本身对系统剪贴板的限制,在转换
    幅面很大的PDG文件时会转不了。

虽然有一些问题,但是这个软件支持加密的AAH格式等(除该软件外,coolman还开发了一些独立运行的PDG解密软件),这些都让我对coolman及其作品充满敬意。

六、Pdg2Pic

在发现coolman的pdg2bmp&jpg&tif&pdf&txt会占用系统剪贴板后,我google了一下,还真查到了一段源代码,虽然我不可能看到pdg2bmp&jpg&tif&pdf&txt的源代码,但我相信它的核心应该与这段代码相似。不过在多看了两遍这段代码后,我觉得既然已经用了Pdg2控件,为什么不用它提供的其它接口获取图像,干嘛非要用系统剪贴板?为了证实我的想法的可行性,我花了点时间写了Pdg2Pic这个软件,顺便对我在使用pdg2bmp&jpg&tif&pdf&txt过程中发现的一些问题做了改进,包括:

  • 转换过程不占用系统剪贴板,不影响用户在前台的正常工作。
  • 可以自动将文件按封面、前言、目录、正文、附录的顺序排列,也可以手动调整文件顺序。
  • 提供预览功能,在转换前可以先浏览PDG图像。
  • PDG文件的扫描DPI自动转存入生成的TIFF、PNG文件,便于在转换成PDF文件时设置页面大小。
  • 如果检查发现PDG文件是纯正的JPG文件,将不进行任何转换,直接将PDG复制为JPG;黑白PDG文件转存为采用CCITT
    G4压缩的TIFF文件,以获取高压缩比;灰度/彩色PDG重新压缩为有损的JPG或采用JPEG压缩的TIFF文件,或无损压缩的PNG文件,或JPEG
    2000(有损/无损)。

由于我没有时间对加密PDG文件进行研究,因此Pdg2Pic不像pdg2bmp&jpg&tif&pdf&txt那样支持众多加密PDG格式。如果在Pdg2Pic统计的文件类型中出现加密格式,需要用1xhkillerfull、aahkiller等进行解密,然后再用Pdg2Pic进行转换。如果您
愿意提供PDG文件解密算法或代码,欢迎与我联系

七、方法之比较与展望

上面介绍了一些PDG转图像、PDF的方法,说句实在话,我认为没有一种方法是完美的,多多少少都有点毛病。而且在我看来,对于一个真正的PDG转PDF软件,至少还要解决以下问题:

  • 从PDG目录到PDF书签(Bookmark)的转换。现在有些PDG图书是带目录的,在超星浏览器中打开后,左侧会显示树状结构的目录,便于快速定位需要阅读的页面。这个与PDF中的书签很类似,但是现在似乎还没有一个软件能够在将PDG转换成PDF时,顺手将目录转换成书签。
  • 将图书信息(bookinfo.dat)插入PDF文件,便于用Adobe PDF
    Reader的搜索(search)功能,在一大堆PDF文件中找到需要的书。bookinfo.dat其实是一个标准INI文件,用文本记录了书籍的书名、作者等信息,如果作为一个文本页插入PDF文件尾,无疑将给搜索提供一些必要的信息。
  • 支持透明背景。原始的黑白PDG文件本身可以按透明背景色显示,因此在超星浏览器中可以根据需要对背景色、前景色进行设置,便于长时间观看。相比之下,PDF的白底黑字看起来就累多了。其实PDF
    Reader本身是支持对页面背景进行定义的,条件是PDF中的图像必须采用透明背景。如果图像本身敲死了一定要用白底,PDF Reader也没有办法。

现在最后一个问题可以通过FreePic2Pdf
1.01版解决,第二个问题可以通过超星章节目录提取器(SSContent)部分解决,其它问题解决起来都有点难度,不知道有多少人愿意去做?至少我自己是没打算要去做,但是我很期待看到其他高手能够解决这些问题,推出更好的PDG转PDF工具。

八:题外话:图像转PDF

本文的题目叫《PDG转图像、PDF的若干方法》,但是前面讨论的某些方法,如截图法只能得到图像,不能直接得到PDF文件,因此自然还需要讨论一个问题:怎样将图像转换成PDF文件?

别人怎么想的我不知道,我自己认为比较好的转换方法有两种:

1、用Adobe Acrobat Professional的Create PDF from Multiple Files,而不用它的虚拟打印机

这种方法的优点是:

  • 如果在转换前先指定黑白图像用无损JBIG2压缩,可以获取最高压缩比。
  • 可以获得经过线性优化的PDF文件,这种文件在通过网络浏览时可以边浏览边下载,因此也被称为Fast Web
    View文件。但是对于只在本地阅读的PDF文件来说,我认为这种优化只会增加文件长度,不会节省实际的打开时间。

这种方法的缺点是:

  • 对于灰度/彩色图像,可能会因为重新采样压缩而造成图像质量衰减或文件膨胀。这方面的讨论参见我写的《图像转PDF的问题、方法及题外话》。
  • 如果一次需要处理几本书,操作起来有点麻烦。
  • 如果图像大小不一,转换出来的页面大小也不一致,看起来有点心烦。
  • 至今为止,我还没有找到如何设置,才能在转换黑白图像时,能够将背景设置为透明。如果您知道,还请不吝赐教

2、用FreePic2Pdf

这种方法的优点是:

  • 按照缺省设置,黑白图像转换成CCITT G4数据流,JPEG/JPEG
    2000数据流直接嵌入PDF文件,不会因为重新采样压缩而造成图像质量衰减或文件膨胀。
  • 便于批量处理,包括设置页面大小、页边距,在开始转换前调整文件顺序也很方便。
  • 从1.01版开始,对于黑白图像,可以自动转换成透明背景色。由于有了这个功能,我甚至打算在有了好的PDF转图像软件后,把以前收集的一些扫描版PDF还原成图像,再用它转成PDF。原因无它,
    白底黑字的PDF实在是看怕了。
  • 最重要的一点:它是免费的绿色软件,个人使用不存在法律后患。

这种方法的缺点是:

  • 由于缺乏相关开源项目的支持,因此不支持JBIG2压缩,只能采用CCITT
    G4压缩黑白图像,转出来的PDF文件可能会比Acrobat用JBIG2转出来的大一点。如果您手上有没有法律问题的JBIG2压缩源代码,欢迎与我联系
  • 没有线性优化功能。如果您制作的PDF只在本地阅读,不打算通过IE在线阅读,这个缺点将变成优点。

总之,现在也没有十全十美的图像转PDF软件,也许这样的方法会是更好的选择:转换还是用支持JBIG2和JPEG
2000的Acrobat转,但是做一个小程序,将它转出来的PDF文件的黑白图像的背景改为透明。由于是单纯的字符替换,所以软件很好写,并且不需要其它第三方代码或控件的支持。

PDG转图像、PDF的若干方法的更多相关文章

  1. 怎么编辑PDF文件内容,PDF文件编辑方法

    怎样编辑PDF文件内容?这是一个常常困扰我们的问题,工作当中我们经常会收到PDF格式的文件,但有时的文件内容不是我们想要的或者是觉得不合理的需要改掉.但是每次有这样的问题时都没有什么好的解决方法,每次 ...

  2. [译]Android调整图像大小的一些方法

    翻译自 某大神在Stack Overflow里的自问自答 (一般我们将Bitmap翻译为位图,但为了更好理解,在本文中我将它翻译成图像): 我们在开发的时候,经常需要从服务器中加载图像到客户端中,但有 ...

  3. OpenCV2+入门系列(三):遍历图像的几种方法

    根据OpenCV中Mat类型的结构和内存中存储方式,此处给出三种对图像进行遍历的方法.首先给出基础的读取图片代码,在中间替换三种遍历方法即可,本文中,程序将遍历图像并将所有像素点置为255,所有运行结 ...

  4. PHP制作pdf文档方法

    原文:PHP制作pdf文档方法 本篇博客是在看完 php+mysql web书以后自己的测试代码,虽然是测试代码,但不是简单的粘贴复制,为了学习thinkPHP框架,自己就用这个来做的,而且这本书已经 ...

  5. c#图像处理入门(-bitmap类和图像像素值获取方法)

    c#图像处理入门 -bitmap类和图像像素值获取方法 一.Bitmap类 Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组成.因此Bitmap是用于处理由像素数据定义 ...

  6. PDF文件怎么修改,PDF文件编辑方法

    PDF文件是一种独特的文件,在日常办公中已经成为我们使用最广泛的电子文档格式.在使用PDF文件中会遇到PDF文件有错区的时候,再从新制作一个PDF文件会比较麻烦,只能通过工具来对PDF文件进行修改,这 ...

  7. WPF编程,将控件所呈现的内容保存成图像的一种方法。

    原文:WPF编程,将控件所呈现的内容保存成图像的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/detai ...

  8. [.NET开发] C#使用doggleReport生成pdf报表的方法

    本文实例讲述了C#使用doggleReport生成pdf报表的方法.分享给大家供大家参考,具体如下: 1. 安装nuget -install package DoddleReport -install ...

  9. 知网下载pdf文件的方法

    title: 知网下载pdf文件的方法 toc: false date: 2018-11-02 17:54:43 categories: methods tags: 知网 平时我们使用的是国内版的知网 ...

随机推荐

  1. How To Uninstall Software Using The Ubuntu Command Line

    How To Uninstall Software Using The Ubuntu Command Line Uninstall Ubuntu Software Using The Terminal ...

  2. 聊聊基于Lucene的搜索引擎核心技术实践

    最近公司用到了ES搜索引擎,由于ES是基于Lucene的企业搜索引擎,无意间在“聊聊架构”微信公众号里发现了这篇文章,分享给大家. 请点击链接:聊聊基于Lucene的搜索引擎核心技术实践

  3. MySQL insert插入

    使用INSERT语句插入新数据 语法:INSERT [INTO] tbl_name [(col_name,...)] VALUES (pression,...),…      INSERT [INTO ...

  4. SQLite连接C#笔记

    不得不吐槽,实在是太坑了.以下几点一定要注意: 要下载两个东西,都要上官网.一个是SQLite for Windows,一个是System.Data.SQLite. 下载下来的DLL里面有个test, ...

  5. redmine2.3环境搭建

    1. 安装redmine bitnami-redmine-2.3.0-0-windows-installer.exe安装到C:\BitNami\redmine-2.3.0-0目录下. 其中redmin ...

  6. PowerDesigner中添加约束

    唯一约束 唯一约束与创建唯一索引基本上是一回事,因为在创建唯一约束的时候,系统会创建对应的一个唯一索引,通过唯一索引来实现约束.不过唯一约束更直观的表达了对应列的唯一性,使得对应索引的目的更加清晰,所 ...

  7. MySQL查询某个字段为某值的次数统计SQL语句

    SELECT GoodID,sum(if(Level = 1, 1, 0)) as Better,sum(if(Level = 0, 1, 0)) as Nomal,sum(if(Level = -1 ...

  8. nginx注册成服务

    http://blog.csdn.net/t37240/article/details/51727563

  9. LAMP 2.4 Apache访问控制

    通过查看日志发现有个IP 恶意攻击你的网址,可以控制这个IP的访问. 打开主配置文件复制模板. vim /usr/local/apache2/conf/httpd.conf 搜索 /Order 复制 ...

  10. LAMP 2.3 Apache配置防盗链

    如果你的站点是一个图片站,有很多非常漂亮的美女图片,那我相信,时间久了会有很多人来你网站借图片,有的人直接下载走了,还有的人直接取走图片的地址,比如你的网站域名是 www.123.com,图片地址为 ...