FreePic2Pdf: A freeware to convert image (TIFF, JPG, JP2, PNG, GIF and BMP) files into PDF.

作者:马健
邮箱:stronghorse_mj@hotmail.com
主页:老马的原创空间

FAQ
使用说明
    一、软件安装/删除
    二、软件使用
        图像转PDF
        更改PDF
        PDF中的特殊目标
附录A 鸣谢
附录B 接口文件格式说明
    一、接口文件简介
    二、接口文件格式
    三、接口文件示例
附录C 版本更新记录

FAQ

Q:FreePic2Pdf是什么?
A:这是一个将图像文件(包括TIFF、JPG、JP2/J2K/JPC、PNG、GIF、BMP)合并、转换成PDF文件的软件。纯免费,并具有下列特色:

  1. 对有损/无损压缩jpeg 2000(jp2/j2k/jpc)文件,或有损压缩JPG文件及采用JPEG/OJPEG算法压缩的TIFF文件,直接将原始数据流嵌入PDF文件,避免因为重新压缩而造成图像质量下降。
  2. 对其它无损压缩图像文件,黑白图像解码后压缩为JBig2(有损/无损)或CCITT G4,其它解码后压缩成ZIP数据流嵌入PDF文件。虽然解码/压缩需要消耗一些时间,但是在多数情况下可以减小PDF文件长度。
  3. 对于黑白图像,可以指定背景是否透明。如果透明,在PDF Reader中阅读时可以根据需要自行设置背景色(我习惯设为灰色),以免白底黑字看着太累。
  4. 支持多页TIFF和多帧(动画)GIF,每页或每帧算一幅图像。
  5. 可以指定生成的PDF文件的页面大小(除A4、B5等,还支持国内常用的32开、16开、大32开)及页边距,这种指定不会造成对图像数据流的重新采样或压缩,只影响PDF中描述图像显示大小的数据, 避免因为重新采样或压缩而造成图像质量下降。
  6. 如果不指定页面的纸张大小,可以指定页面的固定宽度(长度随图像大小伸缩),保证连续阅读时不会因为页面宽度变来变去而影响阅读。
  7. 可以选择需要转换的文件,也可以指定需要转换的文件夹;可以指定文件排序方式(按字母顺序、按末尾数字顺序、按超星顺序);可以将所有图像文件合并到一个PDF文件,也可以每个图像文件分别转换成一个PDF文件。
  8. 支持通过接口自动生成多级书签、分段页码、添加文本页、设置PDF的Document Properties,支持Unicode字符。
  9. 接口文件可以用于新生成的PDF,也可以用于已有的PDF,包括往已有的PDF上加书签、从已有的PDF中抽取书签。
  10. 生成的PDF文件中只包含必要的信息,因此在PDF质量不变的情况下,生成的PDF废话最少。
  11. 在转换的同时,可以通过OCR生成可检索、可复制的隐藏文本,合成双层PDF,并提供对自身所生成的双层PDF进行校对所需的辅助功能。
  12. 支持批量转换。
  13. 软件基于开源代码实现,运行时不需要任何第三方软件或控件的支持。当然如果要浏览制作出来的PDF文件,您的机器上必须安装Adobe PDF Reader或其他PDF阅读软件。

总之, 在缺省情况下,FreePic2Pdf考虑的优先顺序为:图像质量、生成速度、PDF文件大小;通过设置可以改变为:图像质量、PDF文件大小、生成速度。

Q:现在已经有N多图像转PDF软件,为什么还要开发FreePic2Pdf?
A:在开发FreePic2Pdf前,我接触到的图像转PDF软件不下10种,包括收费的和免费的。这些软件从原理上可以分为两类:

  1. 基于虚拟打印原理。最著名的大概要算Adobe Acrobat Professional
  2. 直接将图像嵌入PDF文件。如verypdf公司出品的Image2Pdf、adultpdf公司的TIFF2PDF等。

基于虚拟打印原理的软件开发门槛稍高一些,所以多为收费软件,通用性较好,一般除图像文件外还能将Word等格式转换成PDF。但是在转换图像文件时,通常需要对图像重新采样、压缩,从而造成图像质量下降、PDF文件膨胀等问题。

直接将图像嵌入PDF文件的软件实现相对简单,所以收费、免费的都有。但是为了追求高压缩比,也经常会将彩色图像重新压缩成JPG数据流。而且大多数软件对TIFF格式的支持都很烂(可以理解,TIFF格式实在是太包罗万象了),偏偏我经常需要和TIFF文件打交道。所以最终还是下定决心,以libtiff组织提供的tiff2pdf.c为基础写了一个图像转PDF引擎,实现我自己的要求:

  1. 对TIFF文件的高度支持,尤其是国内各扫描外包公司提供的非标准OJPEG压缩的TIFF文件。我相信象我这样有机会接触如此数量非标准TIFF文件的人不会太多。
  2. 对有损压缩数据不再重新压缩,以免质量损失;对于无损压缩数据则压缩成G4或ZIP以减小文件长度。
  3. 将基于虚拟打印原理实现的软件优点借鉴过来,包括指定纸张类型、页边距、图像自动放大等,以获取较好的阅读效果。
  4. 支持JBig2压缩。收费软件支持它的有几个,免费软件大概这是第一个。

对于其它转换工具的比较,可以参阅我写的《图像转PDF的问题、方法及题外话》一文。

Q:FreePic2Pdf收费吗?
A:FreePic2Pdf是一个“友情软件”(Friendware),用户在承诺不用于商业目的,也不对文件及其附件进行任何更改的条件下,不需要为使用该软件付任何费用,最多是在BBS上看到我发帖子灌水时(我的ID一般是strnghrs),进去捧个人场,作为友情回报;或者在年节时发个email问声好(所以叫“友情软件”)。我承诺绝不在程序中暗藏任何商业广告、木马,但不承诺为使用FreePic2Pdf的后果承担任何责任。如果您需要将它用于商业目的,或加入您的网站,请与我联系,否则保留追究一切责任的权利。

Q:如果觉得FreePic2Pdf生成的PDF文件尺寸还是太大,怎么办?
A:办法包括:
1、用Photoshop、ACDSEE、ComicEnhancer Pro等,先缩小图像尺寸,再转成PDF。
2、对于彩色图像,用上述软件或JPEG优化软件转成低质量JPG,再转成PDF。
3、对于灰度图像,可以先用ComicEnhancer Pro试试看能不能通过减色的方法减小文件长度,不行就压缩成灰度JPG,并且降低质量系数,然后再转成PDF。
4、对于黑白图像,可以选用JBig2无损或有损压缩。

Q:有损JBig2适用于哪些环境?
A:有损JBig2适用于以字母文字为主的黑白图像,对于以中文文字或图形为主的黑白图像,建议使用无损JBig2,理由如下:

  • 对于字母文字,在一页上字母重复的概率比较大,用有损JBig2可以大幅压缩文件尺寸,而有损压缩造成的损伤对字母阅读影响不大。
  • 对于中文文字,在一页上重复的概率比较小,有损JBig2压缩的空间不大,而有损算法本身可能会对中文造成损伤,影响阅读效果。
  • 对于不能分割的图像,使用有损JBig2根本没有意义,只会造成图像损失。

另外考虑到对于中文来说建立全局符号表实在没有多大实际意义,所以在选择有损JBig2压缩时,没有生成PDF标准中的JBIG2Globals。

需要注意的是,JBig2算法比传统的CCITT G4算法压缩比更高、制作出来的PDF文件更小,但是先进的东西也有一个毛病:不是所有PDF浏览器都能看的,用Acrobat Reader 7是一点问题没有,其他早期版本,或非Adobe出品的Reader就不敢保证了。所以如果要保证PDF文件的最大兼容性,请将黑白图像压缩算法设置为CCITT G4。

Q:FreePic2Pdf生成的页码有什么用?
A:在阅读PDF文件时,可以用页码快速定位页面。如在目录页中,看到感兴趣的某个标题在正文第18页。这时,在PDF浏览器下方的页码框输入18,再按回车,就跳到了正文的第18页了。
页码只能通过接口文件定义。

Q:双层PDF是什么,有什么用?
A:双层PDF的“双层”,指的是“图像层+隐藏文字层”,即在扫描图像上,再蒙一层不可见的隐藏文字,这样在阅读的时候,看到的是与原书完全一样的扫描图像,但是同时又可以对隐藏文字进行搜索、复制。
双层PDF的文字靠OCR生成,本软件所用的OCR引擎是微软Office 2003/2007自带的MODI(Microsoft Office Document Imaging)。MODI的安装及多语言支持见我网站上的相关文章。
OCR结果不能保证100%准确性,其结果与图像分辨率、图像质量密切相关。图像分辨率越高、越是黑白分明,OCR结果就越好。如果图像分辨率低于300 DPI,建议就别OCR了,以免结果太过搞笑。

使用说明

一、软件安装/删除

本软件安装非常简单:创建一个目录,用WinZip将下载下来的ZIP包解压缩到该目录即可。

本软件的删除也很简单:直接删除从ZIP包中解压缩出来的所有文件及运行过程中生成的文件即可。

ZIP包中包括下列文件:

  1. FreePic2Pdf.exe。这是软件的主程序。
  2. FreePic2Pdf.htm。本帮助文件。

如果您下载到的ZIP包中还包括其它文件,毫无疑问不是我放进去的,有广告或木马之嫌疑,请立即删除。

另外程序运行过程中还会生成以下文件:

  1. FreePic2Pdf.ini。这个是参数保存文件,第一次更改参数后生成。退出FreePic2Pdf,删除此文件,再重启FreePic2Pdf,即可恢复缺省参数。
  2. FreePic2Pdf_log.txt。这个是错误记录文件,在转换过程中出现错误时自动生成,没有错误则自动删除以前的错误记录。

二、软件使用

图像转PDF

如果是从图像文件生成新的PDF,鼠标双击FreePic2Pdf.exe启动软件后,按照软件界面上标注的1、2、3、4的顺序执行:

1、选择需要转换的图像文件
在这一步如果选择“转换选定的文件”,则可以一次转换一个目录下的几个文件,或转换多个目录下的文件。点击“选择源文件”按钮后,可以选择文件(按住Ctrl或Shift键点击文件可多选),所选文件排列在列表中,可以通过工具栏提供的按钮进行排序、顺序调整、删除等操作 ,双击文件列表将调用系统缺省图像浏览器显示所选图像。如果“自动清空”选项被选中,每次点击“选择源文件”按钮,都会清除列表中的原有内容,如果需要一次转换多个目录中的文件,需要将这个选项点掉,然后逐次选择文件。每次选择文件后,均按“自动排序”选项指定的排序方法对列表中的文件进行排序,选“无”则不进行自动排序。
如果选择“转换指定文件夹中的文件”,则点击“选择源文件夹”按钮选择文件夹。转换时按照“转换文件”选项对源文件夹中的文件进行筛选,然后按照“文件排序”选项指定的顺序对筛选出来的文件进行排序。
也可以先在资源管理器中选择需要转换的文件或文件夹,然后拖到FreePic2Pdf界面中。如果拖过来的是文件夹,则自动选择“转换指定文件夹中的文件”,否则选择“转换选定的文件”。
对于“转换指定文件夹中的文件”,则为批量转换,即自动将周游选定文件夹下的所有子文件夹,每个子文件夹转换成一个PDF,PDF文件与子文件夹同名,因此在这种情况下就不需要再手工选择转换结果。

2、选择转换出来的PDF文件的存放位置
在这一步如果选择“全部存入一个PDF文件”,则将全部图像文件合并到点击“选择PDF文件”按钮所选的PDF文件。
如果选择“每个图像转换成一个PDF文件,存放到文件夹”,则将转换出来的PDF文件存放到指定文件夹。
如果“使用固定文件/文件夹”选项被选中,则系统会自动记忆上次使用过的PDF文件和文件夹,否则每次点击“选择源文件夹”按钮,都会自动生成PDF文件和文件夹。

3、设置转换参数

  • 纸张大小(纸型、方向、页边距):基本和Word一样:生成的PDF文件每页一图,自动居中、大图自动缩小。比较特殊的是“纸型”如果选“图像大小”,则生成的PDF每一页大小都按照图像大小进行设置(每页一图),如果图像大小不统一,则生成的PDF每一页的大小也不统一;如果选“固定宽度”,则PDF每一页的宽度固定,长度根据图像大小自动伸缩。一般来说,如果生成的PDF面向打印,建议选择一个合适的纸型;如果面向屏幕浏览,建议选择“固定宽度”或“图像大小”。如果“自动放大小图”选项被选中,则当图像 尺寸小于版心尺寸时,自动放大图像以适合版心,否则保持原样。 如果图像本身有大片白底,设置页边距后在PDF文件中可能看不大出来,这时可以在PDF Reader中将缺省背景色设置为灰色,即可清楚看出页边距的范围。
  • PDF文件初始视图:这个和在Acrobat的“文档属性”中的设置是一样的,指定在打开PDF文件时,如何展现文档页面。
  • 原始图像文件的DPI:在计算图像在PDF中的大小时,先用图像象素尺寸除以该DPI值,转换成英寸数,再将英寸数乘以72转换成PDF中的逻辑尺寸。 核心提示:DPI值仅仅影响图像在PDF中的初始显示尺寸,对图像数据本身没有影响。
    “当前屏幕DPI”通过Windows API自动获取,在我的17"显示器设置为1024*768时为96。
    如果手工设置“固定DPI”,则在PDF中看到的图像大小和DPI值成反比,即DPI越大图像越小。
    对于扫描产生的TIFF文件,通常在文件中会说明扫描时的DPI值,如果选择“优先使用图像扫描DPI”,则会自动尝试从图像文件(包括TIFF、BMP、PNG、GIF、JFIF格式的JPG,不包括JP2和J2K)中提取DPI值,代替手工设置的DPI。
  • 黑白TIFF设置为透明:如果选中(缺省为选中),所有单色图像的背景设置为透明,在PDF Reader中阅读时可以根据需要自行设置背景色(我习惯设为嫩绿色),以免白底黑字看着太累。如果未选中,则背景色为白色。
  • 透明GIF、PNG保持透明:如果选中(缺省为选中),在转换PNG、GIF时,如果原图是调色板图像,并且带透明背景,则转出来的PDF页也有透明效果 ,否则背景色为白色。另外此选项还支持alpha通道透明的PNG、BMP,但不支持多色透明。
  • 启用接口文件:如果此选项选中(缺省为选中),则转换时自动读取源文件夹下的接口文件(文件名固定为FreePic2Pdf.itf),从中获取最小图片宽度、多层图像信息 、文本页、书签等。此接口文件通常由Pdg2Pic生成。 如果“前言页面前缀”、“目录页码前缀”为空,则分别用大写英文字母、罗马数字表示封面页、目录页,否则用前缀+数字表示。
    如果原始图像文件是用Pdg2Pic从PDG转换出来的,建议选择此选项,否则不仅将丢失多层PDG文件的图层信息,而且将失去很多PDG独有的东西,包括分段页码、书签、bookinfo等。
  • 除JPEG、JPEG 2000外的图像文件的压缩算法:在将图形文件转换成PDF时,JPEG、JPEG 2000数据流直接嵌入PDF文件,其它图像文件需要重新压缩后再存入PDF。对于黑白图像,可以选择JBig2无损、JBig2有损、CCITT G4。通常JBig2有损压缩的压缩比最大,速度最慢;CCITT G4则压缩比最小,速度最快;JBig2无损介于二者之间。对于彩色/灰度图像,为了不损失质量,全部采用ZIP压缩,但是在压缩前使用TIFF或PNG进行预处理,最终的压缩比可能不同。建议选择缺省的“速度最快”,以加快速度,当然也可以选择“尺寸最小”,让系统自动选择压缩比最大的处理方法,但这要以时间为代价。

友情提示:转换参数对转换出来的PDF文件的阅读效果影响很大,可能需要反复调整、转换几次,才能获得满意的效果。

如果想通过OCR生成双层PDF,则还需选择下列选项:

  • 生成双层PDF:如果此选项被选中,则转换过程中启动OCR,生成隐藏文字,否则只转换图像,不管文字。由于需要时间,MODI的安装也不是电脑白痴随随便便就能搞定的,因此此选项缺省未选中,以免麻烦。
    在选中“生成双层PDF”后,下列选项才能生效:
  • OCR语言:一次只能选择一种语言,注意所选项必须与所识别的文字相匹配,例如想识别繁体字,就一定要选择“繁体中文”,否则识别出来的结果多半会很搞笑。 各语种MODI的安装参见我写的《用MODI OCR 21种语言》。
  • 合并文本行:如果选中,则转换出来的PDF文件中的隐藏文本以行为单位,文件长度较小,但是字的位置不一定准确。如果未选,则以字(CJK)或词(非CJK)为单位,字的位置比较准确,文件长度略大。
  • CJK版式:中、日、韩文字都有横排和竖排之分,本软件在一定程度上可以自动识别,如果对识别结果不满意,可以手工选择是横排还是竖排。此选项对OCR准确性没有影响,仅对隐藏文字采用的字体有影响。

4、开始转换
开始将源文件转换成PDF文件。转换过程中点“中止”按钮可以中断转换过程。
转换过程中如果出现错误,在转换结束后会报告并询问是否查看错误记录。
如果是将所有源文件合并成一个PDF文件,转换结束后点“打开PDF文件”按钮可以打开该文件,当然前提条件是在您的机器上已经安装了Adobe PDF Reader或Adobe Acrobat Professional。

转换完成后点击窗口右上角的“×”按钮即可退出程序。

双层PDF完全基于OCR技术,目前的OCR引擎不可能达到100%的准确率,如果想对生成的双层PDF进行人工校对,可以点击“校对”按钮,进入“PDF校对工具”界面,利用其中提供的显示、隐藏双层PDF中的文本、删除扫描图像等 工具,辅助完成PDF校对过程。通常的校对过程为:

  1. 显示PDF中的隐藏文本,可以设置文字显示颜色、底图透明度。
  2. 文字显示出来后,就可以用Foxit PDF Editor、Foxit Phantom对文本进行编辑,包括增加、删除、改变位置、改变显示比例等。推荐使用的编辑工具是Foxit Phantom v2.2.4,更高的版本没有意义,更低的版本则不可靠。
  3. 编辑完成后,点“隐藏文字”页签,把编辑过的文字再次隐藏起来。
  4. 如果对校对结果很有信心,也不想再被大量的图像占据存储空间,可以用“删除图像”功能把原始扫描图像干净、彻底地从PDF中删除。注意删除图像是物理删除,即删除掉的图像再也找不回来,因此请慎重使用此功能。

注意在使用前请仔细阅读界面中显示的注意事项,以免后悔。具体细节详见我写的《校对双层PDF中的隐藏文本》。

更改PDF

1、往PDF挂书签

如果PDF已经存在,都是希望能够对PDF进行修改,包括加书签、页码等,则可以按如下步骤操作:

  1. 创建一个与PDF文件同名的文件夹,在里面按照接口文件要求创建接口文件、书签文件、需要添加的文本文件。通常这一步是由Pdg2Pic自动完成,现在需要手动,或在Pdg2Pic生成的基础上进行修改。
  2. 接口准备好以后,运行FreePic2Pdf,点击“更改PDF”按钮,进入“更改PDF”界面。
  3. 在“更改PDF”界面中,按照界面上标示的1、2、3步骤进行操作即可。

注意:

FreePic2Pdf对PDF的修改是“增量更新”(incremental updates),即PDF文件中被更改、替换的内容还存在于PDF文件中,只是失去了作用,因此反复更改几次以后,PDF文件长度会增加。这时用Adobe Acrobat Professional打开PDF,选“Advanced->PDF Optimizer”菜单,对PDF进行优化即可去除无用的信息,减小文件长度。需要注意的是,在Acrobat的“PDF Optimizer”对话框中,务必将“Image Setting”中的所有选项设置为Off,以免图像质量受损。

“点击书签后页面缩放”选项只对页码书签有效,对采用特殊目标的书签项无效。

2、从PDF取书签

此功能将PDF的书签提取出来,生成符合接口文件规范的接口文件、书签文件。如果想对PDF的书签进行更改,可以先用此功能提取书签,更改后再用上一个功能挂回去。

取书签的操作按界面上标示的1、2、3步骤操作即可。需要注意的是,如果原先的PDF文件不是用本软件生成的,或原PDF文件中没有设置数字页码,可能需要手工设置“基准页”。对“基准页”的解释见附录B 接口文件格式说明的[Bkmk]段部分。

如果选择了“名称转页码”选项(缺省不选中),则在提取出来的书签文件中,“已命名的目标”(Named Destinations)一律转换成页码,否则不转。

在挂书签时,对于所有采用“已命名的目标”的书签项,“点击书签后页面缩放”选项均无效,如果想使此选项有效,必须在提取书签时选择“名称转页码”选项,将命名目标转换成页码。

如果想一次导入、导出指定文件夹中所有PDF的书签,则在步骤1中选择文件夹即可。在这种情况下,每个PDF文件的接口文件和书签文件存放在一个单独的文件夹,文件夹名称与PDF文件名同名。

PDF中的特殊目标

PDF的书签(Outline)除了指向页码外,还允许指向某个名称、动作,甚至某个外部文件。在本软件中,采用某些特殊字符加以区别:

  • 对于“已命名的目标”(Named Destinations),直接显示名称,但是名称不能以数字开头,否则必须在数字前加字符“#”。
  • 对于“已命名的动作”(Named Action),动作名称前面加字符“!”。
  • 对于外部PDF文件,文件名前面加字符“^”,如果还需要指定页码,则在文件名后加TAB,再加页码。

附录A 鸣谢

本软件的GIF、BMP图像文件解码采用了Davide Pizzolato的CxImage;JPEG采用了Independent JPEG Group(独立JPEG小组)发布的JPEG LIB源代码 ;Jpeg 2000解码采用了kakadusoftware提供的kakadu源代码、编码采用了Michael D. Adams发布的JasPer源代码;PNG采用了libpng组织提供的libpng源代码;TIFF采用了libtiff组织提供的libtiff源代码;zlib采用了ASM版(其实只有两个文件是ASM的)编/解码速度会比非ASM版快一点;JBig2编码采用了Adam Langley提供的jbig2enc(无内存漏洞版),其中边缘检测使用了Leptonica源代码。
PDF生成部分以libtiff提供的tiff2pdf.c为基础,并参考了PDFlib GmbH的开源项目PDFLib Lite、Michael Still的开源项目Panda的实现。PDF文件解析部分采用了xpdf的源代码。
在此对以上组织和个人表示深切的谢意!

附录B 接口文件格式说明

一、接口文件简介

接口文件为其它软件(目前主要是Pdg2Pic)提供接口,通过它可以控制FreePic2Pdf的一些行为,包括:

  1. 定义多层页面的层次关系。
  2. 统一页面宽度。
  3. 定义多段页码的起始范围。
  4. 定义文本字体。
  5. 定义添加到PDF文件尾部的文本信息。
  6. 定义多级书签。

用户可以手工对接口文件进行编辑。为了压制一本好书,通常需要反复编辑、制作,在这个过程中建议先将“黑白图像”的压缩算法设置成“CCITT G4”,以加快对黑白页面的处理速度;在最终定稿后再设置为“JBig2无损”制作一遍,以获取最佳压缩比。

二、接口文件格式

接口文件是一个INI格式的文本文件,可以用FreePic2Pdf内置的编辑器编辑,也可以用任何文本编辑器(如Windows下的“记事本”)编辑。接口文件的文件名固定为FreePic2Pdf.itf,存放在源图像文件夹下,只有选择“转换选定文件夹中的文件”时才有效。 接口文件可以采用ANSI编码,也可以采用Unicode编码,Unicode编码文件必须以FF FE开头。

如果觉得对接口文件格式理解有困难,最简单的办法就是找一本带目录的PDG书,用Pdg2Pic转换一下,然后对照看Pdg2Pic生成的接口文件。

接口文件按段存放,段与段之间用空行分隔,各段的含义如下:

1、[Images]段

该段定义多层页面的层信息。多层页面是指:在PDF中一个页面由几张图片构成,一张是底图(通常是黑白文字图),其余是插图,插图浮现在底图上。

对于每一个多层页面,需要用以下项表示:

文件名=插图数
文件名_三位编号=left,top,width,height

其中“文件名”表示图像文件的主文件名,left、top、width、height分别是底图(编号为0)和插图(从1开始编号)的左上角坐标、宽度、长度,单位为象素。

多层图像的原始图像文件统一命名为:文件名.三位编号

2、[Font]段

说明文本页中使用的字体。由于种种原因,FreePic2Pdf只支持Acrobat为PDF提供的内建字体,不支持外部字体,如TrueType Font。

该段包括下列字段:

Language=字体语言,允许的值为:Default、Latin1、GBK、BIG5、JAP、KOR
FontSize=字号,单位为磅。
Margin=页边距,单位为英寸,浮点数。

FreePic2Pdf将按照Language指定的语言,选择合适的内建字体。此值同样也限定了ANSI编码文本文件的代码页。各值的含义为:

  • Default:获取当前系统代码页(非Unicode程序所用语言的代码页),如果不是936、950、932、949中的任何一个,则采用1252。
  • Latin1:代码页1252,西欧字符,包括英、德、意、法等语言,字体采用Helvetica。
  • GBK:代码页936,GBK字符,包括简体、繁体、日语,字体采用STSong-Light-Acro。
  • BIG5:代码页950,Big5编码繁体字符,字体采用MHei-Medium-Acro。
  • JAP:代码页932,JIS编码日文,字体采用KozMin-Regular。
  • KOR:代码页949,韩语,字体采用HYGothic-Medium。

理论上说,GBK编码可以兼容英文字符,但是如果对纯英文文本文件选择了GBK编码,则生成的PDF在阅读时必须安装亚洲语言支持(即含有STSong-Light-Acro字体),才能正常显示。

3、[TextPage]段

FreePic2Pdf的目的是将图像压成PDF,但是如果PDF中只包含图像信息,将不能用PDF Reader进行搜索,不便于资料的再利用,因此可以写一个简短的小文本文件,说明书籍的名称、关键字等(如果图像是用Pdg2Pic从PDG转过来的,会自动使用BookInfo.dat),在制作PDF时作为文本页自动添加到PDF文件尾。

该段包含如下字段:

Files=需要添加的文本文件数。
Fn=文本文件的文件名。n从1开始编号。

文本文件必须与接口文件在同一个文件夹下。如果制作成PDF后觉得字太小,可以手工增加[Font]段FontSize字段的指,然后重新制作。

文本文件可以是ANSI编码,也可以是Unicode编码,Unicode编码文件必须以FF FE开头。

文本文件的语言由[Font]段的Language项指定。如果Language项与文件实际使用的语言不符,出来的可能是乱码。

4、[Bkmk]段

该段说明是否需要在PDF中制作书签,及书签文件名。该段包含下列字段:

File:书签文件名。固定为FreePic2Pdf_bkmk.txt。
AddAsText:为1时将把书签文件作为文本页添加到PDF尾部,0不添加。
ShowBkmk:为1时打开PDF文件即显示书签,0不显示。
ShowAll:为1时展开PDF文件中的所有书签,0只显示顶级书签。
BasePage:书签基准页码。作用见后面叙述,此值必须大于等于1。此值为绝对页码:从PDF文件的第一页(绝对页码为1)开始连续编排。

书签文件是一个标准Windows文本文件,文件名固定为FreePic2Pdf_bkmk.txt,可以用任何文本编辑器(如Windows下的“记事本”)打开、编辑。 书签文件允许采用ANSI或Unicode编码,Unicode编码文件必须以FF FE开头。

在将书签添加到PDF时,FreePic2Pdf先检查书签项文字,如果不含特殊字符(内码大于127的字符),则写入书签项的ANSI码,否则写入Unicode码。在写入Unicode码时,如果书签文件是ANSI编码的, 则按照[Font]段中Language项指定的语言进行转换,未指定则按照当前系统缺省代码页(非Unicode程序的代码页)进行转换。

如果需要将书签文件添加到文件尾,则书签文件的语言由[Font]段的Language项指定。如果Language项与文件实际使用的语言不符,出来的可能是乱码。

书签文件必须与接口文件在同一个文件夹下。书签文件中每一行包含如下内容:

  • 0个或多个TAB字符:用缩进表示书签级别。
  • 书签标题:显示在PDF书签上的文字。
  • 分隔TAB字符:分隔“书签标题”和“页面文件名”。
  • 书签对应页码:可以是正整数或负整数,0视为无效。从接口文件中“书签基本页码”(BasePage)字段规定的页码值开始算,基准页码及其之后的页码为正数,之前的页码为负数。即如果书签对应的页面就是基准页面,则书签对应页码为1;如果书签对应的页面是基准页面的后一页,则书签对应页码为2;如果书签对应的页面是基准页面的前一页,则书签对应页码为-1。

用书签基准页码对书签页码进行调节,可以方便手工录入书签:在录入的时候,只需对照实体书的目录页录入书签标题,书签对应页码直接照书上目录对应页码录入;然后在接口文件中将书签基准页码设置为正文第一页的绝对页码即可。

“书签对应页码”部分如果是一个数字(整数或负数),则表示是页码;如果是一个带非数字字符的字符串,则表示Named Destinations,即Acrobat中所称的“已命名的目标”,支持的格式见这里

下面是一个从图像PDG文件生成的书签文件的片断,此书签为单级书签(书签标题前面没有TAB字符) ,注意正文页之前的页码为负数,正文页之后的为正数(BasePage=6):

封面页	-5
书名页	-4
版权页	-3
目录页	-2
1. 感恩的民众	1
2. 兄弟俩	13
3. 约翰·德·维特的学生	24
4. 凶手们	36
5. 郁金香迷和他的邻居	48
6. 一个郁金香培植者的仇恨	58
7. 幸运的人交上了恶运	67
8. 侵入	80

下面是一个从文本PDG文件生成的书签文件的片断,此书签为多级书签(注意书签标题前面的TAB字符构成的缩进表示出了书签的级别关系) ,注意正文页之前的页码为负数,正文页之后的为正数(BasePage=9):

封面页	-8
前言页	-7
目录页	-2
第一章  三星堆文明的发现与探索	1
	一、惊世之发现	2
	二、探索者之路	9
	三、研究之现状	43
第二章  三星堆文明的基础——宝墩文化	58
	一、宝墩文化的发现与认识	59
	二、宝墩文化的年代及其变迁	67
	三、宝墩文化的成就及其对三星堆文化的影响	74
	四、宝墩时期的社会——文明的孕育时期	82

由于采用缩进表示书签级别,因此很容易用UltraEdit、EditPlus等能够记忆缩进位置的文本编辑器进行编辑,也可以采用专门的编辑软件——PdgCntEditor进行编辑。

5、[Info]段

该段定义PDF文件的Document Properties,包括如下字段:

Title=PDF文件标题。
Author=PDF文件作者。
Subject=PDF文件主题。
Keywords=PDF文件关键字。

通常Pdg2Pic用BookInfo.dat中的书名、作者、参考文件格式、主题词字段填充Title、Author、Subject、Keywords。当然不是所有下载工具生成的BookInfo.dat中都有这些字段。

6、[Main]段

该段是个杂烩,包括下列字段:

MinWidth=页面的最小宽度,单位为象素。如果页面宽度不统一,做出来的PDF会很难看,所以用这个参数统一页宽。通常Pdg2Pic是用PDG文件的最大页宽来填这个值。 在转换成PDF的时候,实际页宽根据此值,按照“参数设置”中的“固定DPI”值进行计算。
ContentsPage=目录页的起始页码。在这个页码之前的页编码为大写英文字母,该页及其之后的页编码为小写罗马字母。
TextPage=设置正文的起始页码。从该页起编码为阿拉伯数字。

ContentsPage、TextPage共同构成PDF中的多段(其实是三段)页码,其值必须是绝对页码:从PDF文件的第一页(绝对页码为1)开始连续编排。

注意:如果“参数设置”中“前言页面前缀”、“目录页码前缀”均为空,则上述两段页面用大写英文字母和罗马数字,否则用前缀+数字。如将“目录页码前缀”设置为c,则PDF中目录页就是c1、c2,……。

三、接口文件示例

下面是一个有效接口文件的内容,供第三方软件开发人员参考:

[Images]
00000003_001=208,837,1336,528
00000003_000=0,0,1778,2688
00000003=1
00000082_001=320,666,1096,1058
00000082_000=0,0,1770,2683
00000082=1

[Font]
Language=GBK
FontSize=28
Margin=2.0

[TextPage]
Files=1
F1=FreePic2Pdf.txt

[Bkmk]
File=FreePic2Pdf_bkmk.txt
AddAsText=1
ShowBkmk=1
ShowAll=1
BasePage=22

[Info]
Title=民间性巫术
Author=宋北麟著
Subject=宋北麟著.民间性巫术.团结出版社,2005.
Keywords=巫术 研究 中国 古代

[Main]
MinWidth=1778
ContentsPage=16
TextPage=22

附录C 版本更新记录

Version 4.02
新增功能:允许批量制作PDF,即在“转换选定文件夹中文件”后面,增加“包括子文件夹”、“包括顶级文件夹”等选项。
新增功能:“更改PDF”允许导入、导出指定文件夹中的PDF书签,新增“包括子文件夹”选项。
新增功能:“PDF校对工具”新增“包括子文件夹”选项。
新增功能:在“PDF校对工具”的“显示文字”功能中,允许更改文字颜色,透明度改为11级。
功能增强:在生成双层PDF时,对行高进行统一,避免安卓上的ezPDF Reader读断行。
功能增强:在生成双层PDF时,如果选择了“合并文本行”,会自动检查词间距,如果发现词间距较大,则不能算同一个字符串,避免文字拉太扁。
功能增强:更改文件名排序方式,按“字母顺序”时基本与Windows资源管理器顺序相同。
功能增强:更改多文件选择对话框的实现方式,减小不必要的内存占用。
功能增强:支持Alpha通道透明PNG、BMP。
功能增强:加强对PNG、GIF的错误检查及报告。
功能增强:继续增加MODI的强壮性,为清华文通擦屁股。
错误修正:某些CMYK色彩空间的JPG文件解码异常。
错误修正:JBig2有损压缩时某些图像会被破坏。
错误修正:如果缺页,转出来的PDF书签会缺项。

Version 4.01
功能增强:即使MODI(其实是清华文通)出错,也尽量不造成整个软件退出。
功能修正:在从PDF取书签时,恢复v4.00以前的接口文件缺省值。

Version 4.00
新增功能:在图像转PDF时,可以通过OCR生成可检索、复制文字的双层PDF,并提供对自身所生成的双层PDF进行校对所需的辅助功能。
功能增强:生成的PDF文件长度比以前更小。
功能修正:对接口文件进行变更,以更好地支持CJK字符。
错误修正:支持某些非标准BMP文件。
错误修正:在Unicode版本中,JBig2压缩失效。
错误修正:在Unicode版本中,“更改PDF”的“编辑接口文件”失效。
错误修正:用拖动方式添加图片文件时,JPEG 2000图像无法添加。
错误修正:调色板透明PNG转换后不能透明。

Version 3.08
功能增强:“更改PDF”界面支持文件拖拽。
错误修正:如果PDF书签中使用了“Named Destination”,并且Named Destination所指向的Unicode字符不完整,则获取书签时会有问题。
错误修正:如果catalog、pages对象是对象流,则编辑PDF书签后文件打不开。
错误修正:如果PDF书签项指向外部PDF,编辑后可能会出错。
错误修正:编辑PDF时,如果把文字加入PDF,编辑后文件打不开。

Version 3.07
错误修正:ini文件不能存储Unicode字符串。

Version 3.06
错误修正:如果FreePic2Pdf_bkmk.txt文件不以\r\n结尾,则最后一行书签会被忽略。
错误修正:如果接口文件中
ShowAll=0,则生成的PDF文件中的多级书签项不符合PDF规范要求,在某些浏览器下阅读可能有问题。

Version 3.05
错误修正:提取PDF书签时,如果书签含特殊字符(如\n),会造成书签截断。

Version 3.04
错误修正:提取PDF书签时,如果书签含特殊字符(如\r),会造成书签截断。

Version 3.03
错误修正:某些有问题的书签接口文件会导致出错退出。

Version 3.02
挂书签时,去掉对象流检查与限制。

Version 3.01
新增功能:在“从PDF取书签”中,增加“名称转页码”选项。
错误修正:某些Unicode编码的
“已命名的目标”(Named Destinations)会导致取书签错误。

Version 3.00
功能增强:接口文件及书签文件支持Unicode编码。Unicode文件头必须是FF FE。
错误修正:往PDF上挂书签时,如果某节点下的单级子节点数量过多,可能出错退出。
错误修正:往PDF上挂书签时,如果catalog中的字段缺乏分隔符,可能出错退出。
取消ANSI版,改为发行Unicode版。对使用说明文件进行了修订。

Version 2.10
功能增强:黑白图像转PDF时,能够识别颜色“不纯”的黑白图像。
错误修正:在某些使用特殊分隔符的语言环境(如用逗号当作小数点的意大利语环境)下,制作出来的PDF文件打开失败。
错误修正:某些JPG中的EXIF旋转标识识别错误。

Version 2.09
错误修正:IJL不能正确解码某些含JFXX段的JPG文件。
错误修正:有时一张图像有错,会引起后续一串图像报错。
错误修正:如果原PDF经过旋转、裁剪,挂书签后页面定位不正确。

Version 2.08
zlib、IJG代码恢复原始版本,与IPP版说再见,以避免层出不穷的兼容性问题。

Version 2.07
功能增强:对含无效字符的文件路径能够给出提示。
错误修正:某些JPG转换失败。
错误修正:排序时“超星顺序”不准确。

Version 2.06
错误修正:转换PNG到PDF不成功。

Version 2.05
功能增强:JPEG 2000解码改用Kakadu,以加快速度。
功能增强:JPEG编解码改用经过修正的IJL 2.0,以加快速度。
功能增强:zlib、IJG代码改用IPP优化版,以加快速度。

Version 2.04
功能修正:以前如果接口文件中规定了MinWidth字段,则页面DPI固定为96 DPI,现在改为按照“参数设置”中设定的“固定DPI”值计算。
功能修正:“固定DPI”的缺省值从96更改为300。
错误修正:挂完书签后,PdfToy的“文件结构”检查会报错。

Version 2.03
错误修正:某些PDF提取书签无页码。
错误修正:某些Old-style JPEG压缩的TIFF文件转换后有错。

Version 2.02
错误修正:某些多页TIFF文件转换后页码顺序不正确。
错误修正:生成的PDF文件“文档属性”中的创建日期、修改日期未按时区校正。
错误修正:某些CMYK色彩空间的JPG文件转换后色彩显示不正常。

Version 2.01
新增功能:对于PDF目录(Outline),支持高字节在前的Unicode字符。
新增功能:对于PDF目录,支持Named Action。
新增功能:对于PDF目录,支持到外部PDF的链接。

Version 2.00
新增功能:“透明GIF、PNG保持透明”选项,可以将带透明背景的调色板GIF、PNG设置为透明页。
功能增强:PDF书签支持Named Destinations,即Acrobat中所称的“已命名的目标”。
功能增强:JasPer源代码升级至v1.900.1。
功能增强:在“PDF参数设置”中,允许对“PDF文件初始视图”的“部局”作出更多选择。
功能增强:在转换多页TIFF、GIF时,更容易中断操作。
错误修正:如果“纸型”不是“图像大小”,“页边距”不能正常起作用。
错误修正:不能转换某些采用JPEG压缩的TIFF文件。
错误修正:对于某些PDF,选择“从PDF取书签”会出错退出。
错误修正:对于某些非标准书签的PDF,选择“从PDF取书签”时,书签页码提取不出。
错误修正:某些CMYK色彩空间的JPG文件转换后色彩显示不正常。
内核部分独立出来,供Pdg2Pic、DjVuToy等使用。
同步发行英文版。

Version 1.26
错误修正:某些JPEG压缩的TIFF文件转换后不能显示全部图像。
错误修正:某些CMYK色彩空间的JPG文件转换后显示不正确。

Version 1.25
错误修正:某些CMYK色彩空间的JPG文件转换后显示不正确。

Version 1.24
功能修正:透明背景GIF的背景色强制设置为白色,不再用GIF本身的背景色。

Version 1.23
错误修正:在给采用Cross-Reference Stream的PDF挂书签后,PDF打不开。

Version 1.22
功能修正:“点击书签后页面缩放”缺省选择由“适合页面”改为“承前缩放”。
错误修正:在给某些PDF加挂书签后,PDF文件打不开。

Version 1.21
功能增强:libpng源代码升级至v1.2.28。
错误修正:碰到某些破损PNG会出错。
错误修正:如果选择了“优先使用图像扫描DPI”,某些图像转换后出现空白页。
错误修正:在“更改PDF”界面中,在“基准页”输入1、2、4会与快捷键冲突。

Version 1.20
新增功能:支持按照JPEG格式中的EXIF信息,自动对图像进行旋转。某些数码相机喜欢这个。
功能增强:在“更改PDF”中,能够从带口令的PDF中取目录(要求输入正确口令),但不能给加密PDF挂目录。
错误修正:在给某些PDF合并工具生成的PDF加挂书签后,PDF文件打不开。
错误修正:某些多页TIFF页码顺序错误。
错误修正:“按末尾数字排序”对纯数字文件名无效。
错误修正:碰到某些破损GIF文件会出错退出。

Version 1.19
新增功能:在选择按“超星顺序”排序时,支持索引页(前缀为ins)。PDG命名规范中有这种页面,但是真正的PDG中基本上不存在这种页面,索引页都算到正文页或附录页中去。现在可以用PdgRenamer命名出这种页面。

Version 1.18
兼容某些JPEG压缩的TIFF文件。

Version 1.17
错误修正:在接口文件夹尚未创建时,也可以打开PdgCntEditor编辑书签,但是编辑后在PdgCntEditor中不能存盘。目前改为接口文件夹不存在时,不允许运行PdgCntEditor。

Version 1.16
功能增强:兼容某些非标准PNG文件,这些PNG文件调色板中的实际颜色数少于色深要求的颜色数。

Version 1.15
新增功能:启动PdgCntEditor,对书签文件进行编辑。
功能增强:改进“按末尾数字排序”算法,能够从文件名中正确抽取最后一个数字。

Version 1.14
功能增强:增强“往PDF挂书签”的错误报告功能。
错误修正:在转换某些灰度BMP、GIF时,转换出的PDF图像背景变成深灰。

Version 1.13
错误修正:在转换某些基于ICC色彩空间的TIFF文件时,转换出来的PDF文件不能打开。

Version 1.12
新增功能:接口文件的Bkmk段新增ShowAll字段,控制是否展开多级书签。
功能增强:支持某些特殊格式的TIFF文件。
功能修正:“彩色/灰度压缩算法”的缺省值从“尺寸最小”改为“速度最快”。
错误修正:如果图像文件正在被某些软件打开,则不能正常读取该文件。
错误修正:在从PDF取书签时,如果原书签字符串中含有回车、换行等特殊字符,取出的书签会变形。
错误修正:在加挂某些书签时,软件会出错退出。

Version 1.11
功能增强:“参数设置”中能够设置“前言页面前缀”、“目录页码前缀”。以前分别用大写字母和罗马数字,页数一多就有点绕,设置为前缀+数字会简单一点。

Version 1.10
错误修正:往某些PDF文件上挂书签失败。
错误修正:在往某些PDF上挂书签后,PDF页面大小发生变化。
错误修正:在取非中文书签时,最后一个字符可能消失。

Version 1.09
错误修正:往某些PDF文件上挂书签失败。
错误修正:生成的PDF的“文档属性”中“创建时间”、“修改时间”与实际时间差了8小时。

Version 1.08
新增功能:书签缩放支持“适合可见”、“承前缩放”。
错误修正:挂书签时,改变书签缩放不起作用。
错误修正:转换某些多页TIFF时,页面顺序不正确。

Version 1.07
错误修正:如果没有接口文件,生成的PDF文件会产生错误的页码,导致PDF文件不可编辑。
功能增强:支持某些特殊格式的多页TIFF文件。
功能增强:可以在生成PDF前手工更改PDF文件名。

Version 1.06

  1. 新增功能:可以选择书签页面缩放比例,包括适合页面、实际大小、适合宽度、适合高度。以前版本的书签相当于适合页面。
  2. 新增功能:从PDF中抽取书签,生成相应的接口文件和书签文件。
  3. 功能增强:支持CMYK色彩空间的JPG文件。
  4. 功能修正:对书签数目加以限制,最多允许3000个书签项,以免因为书签项过多造成软件崩溃。
  5. 错误修正:更改PDF时,如果没有填写[Main]段的TextPage、ContentsPage,则外挂书签会出错。

Version 1.05

  1. 错误修正:如果选择了“优先使用图像扫瞄DPI”,则某些图像转换后PDF文件打开会出错。
  2. 错误修正:如果书签标题含有括号等特殊半角字符,则转出来的书签会在半角字符前面多一个斜杠。
  3. 错误修正:如果PDF最后一页是多层图像,则不能将文本页和书签文字添加到文件尾。

Version 1.04
错误修正:如果接口文件只定义了书签文件,没有定义文本文件,则做出来的PDF不能显示书签。

Version 1.03

  1. 新增功能:在接口文件中,能够定义书签文件。通过这个接口能够自动生成多级书签。
  2. 新增功能:在接口文件中,能够定义目录、正文的起始页。通过这个接口能够自动生成三段页码:封面、版权页用大写英文字母,目录页用小写罗马字母,正文页用阿拉伯数字。
  3. 新增功能:在接口文件中,能够定义文本页。通过这个接口可以在PDF尾部加入文本页,便于用PDF Reader进行批量查找。
  4. 新增功能:在接口文件中,能够定义PDF文件的Document Properties。
  5. 新增功能:更改PDF,能够将接口文件中定义的书签、页码等加到已有的PDF文件中。
  6. 新增功能:按照超星顺序排序。如果在用Pdg2Pic将PDG文件转换成图像文件时没有选择“重新编号转换出来的图像文件”,则可以在FreePic2Pdf中选择按“超星顺序”排序。
  7. 新增功能:支持快捷键。
  8. 功能调整:为增强PDF文件的兼容性,黑白图像的缺省压缩算法从JBig2无损改为CCITT G4。

Version 1.02

  1. 新增功能:支持黑白图像压缩为JBig2,可选有损或无损。JBig2压缩速度比CCITT G4慢,但是压缩比更大。FreePic2Pdf大概是世界上第一个支持JBig2压缩的免费PDF制作软件。
  2. 新增功能:支持接口文件。通过接口文件,能够更好地与Pdg2Pic配合,将PDG文件转成PDF。
  3. 新增功能:如果“参数设置”中“优先使用图像扫描DPI”选项被选中(缺省为未选中),则能够从JPG文件中读取DPI信息。以前版本只能读取BMP、GIF、PNG、TIFF的。
  4. 新增功能:可以选择除JPEG、JPEG 2000外其它“黑白图像”、“彩色/灰度”图像的压缩算法。
  5. 功能调整:取消原“尝试生成最小PDF”选项。
  6. 错误修正:即使左右、上下边距不同,图像仍然居中显示。

Version 1.01

新增功能:“黑白TIFF设置为透明”选项。如果此选项选中(缺省为选中),所有黑白图像的背景设置为透明,在PDF Reader中阅读时可以根据需要自行设置背景色(我习惯设为灰色),以免白底黑字看着太累。如果未选中,则背景色为白色。
新增功能:支持jpeg 2000(jp2)文件、jpeg 2000编码流(j2k、jpc)文件。

Version 1.00

  1. 实现TIFF、JPG、PNG、GIF、BMP到PDF文件的转换。
  2. 能够指定纸张类型(或固定宽度)、页边距,能够指定图像文件的PDI。