双层PDF的制作——使用PDF4NET 3.3.6 实现

摘要:
双层PDF的制作——使用PDF4NET3.3.6实现所谓双层PDF就是每一页都包含两层,上层是图像,下层是该图像对应的文字。在Google里面搜索,大多数双层PDF制作方法都是使用OCR技术实现的。具体来说就是存在一个排版好的word文件,将这个word文件制作成一个双层PDF。闲话少说,具体的制作过程如下1、将文字版的文件转换为以文本方式存储的PDF文件,这个使用PDFCreator采用虚拟打印的方式即可实现。这个采用PDF4NET3.3.6进行二次开发的方式实现。PDF4NET还有很多其他的功能,很强大的哦。

双层PDF的制作——使用PDF4NET 3.3.6 实现

所谓双层PDF就是每一页都包含两层,上层是图像,下层是该图像对应的文字。既可以像图像一样浏览,又可以像文字一样复制、查找。这样兼顾了阅读的效果和使用方便性。

在Google里面搜索,大多数双层PDF制作方法都是使用OCR技术实现的。这些方法的制作前提是,原始的数据只是图片,不存在对应的文字版。这不在本文的讨论范围内,本文主要探讨如何对已经拥有文字版的word或者其他文件的情况下,制作双层PDF。具体来说就是存在一个排版好的word文件,将这个word文件制作成一个双层PDF。

闲话少说,具体的制作过程如下

1、将文字版的文件(word)转换为以文本方式存储的PDF文件,这个使用PDFCreator采用虚拟打印的方式即可实现。这里暂定该文件的名称为"w.pdf"。

2、将创建的的文本方式的存储的PDF文件(w.pdf),转换为以图片方式存储的PDF文件。这个可以用PDFCreator的虚拟打印机,先打印成TIFF格式的文件,再将这个TIFF文件虚拟打印成一个PDF的方式实现,这里暂定该图片方式的PDF文件名为“p.pdf”。

3、将文字方式存储的PDF文件和图片方式存储的PDF文件采用按页合并的方式生成一个新的PDF文件,其中图片方式的PDF在上层。这个采用PDF4NET 3.3.6 进行二次开发的方式实现。以下代码为visual studio 2005环境下,使用C#编写。

(1)将O2S.Components.PDF4NET.dll添加到工程的引用中

(2)添加命名空间的引用

using O2S.Components.PDF4NET;
using O2S.Components.PDF4NET.PDFFile;
using O2S.Components.PDF4NET.Graphics;

(3) 编写代码如下:

string startTime = System.DateTime.Now.ToString();

//File1为文字格式的PDF文件
PDFFile File1 = PDFFile.FromFile(@"d:\w.pdf");
//File2为图片格式的PDF文件
PDFFile File2 = PDFFile.FromFile(@"d:\p.pdf");
if(File1.PagesCount!=File2.PagesCount){
MessageBox.Show("Two pdf files with diffrent pages");
return;
}

PDFDocument doc = new PDFDocument();

for (int i = 0; i < File1.PagesCount; i++)
{
PDFImportedContent ic1 = File1.ExtractPageContent(i);
PDFImportedContent ic2 = File2.ExtractPageContent(i);

PDFPage NewPage = doc.AddPage();
PDFLayer NewLayer = NewPage.Canvas.Layers.Add("Page" + i.ToString());

NewLayer.Canvas.DrawImportedContent(ic1, ic1.X, ic1.Y, ic1.Width, ic1.Height);
NewLayer.Canvas.DrawImportedContent(ic2, ic2.X, ic2.Y, ic1.Width, ic1.Height);

doc.AddPage(NewPage);

}
//不知道为什么,合成后的PDF的同一页都包含两份,因此这里需要依次移除其中的一个
if (doc.Pages.Count == File1.PagesCount * 2)
{
for (int i = doc.Pages.Count - 1; i > 0; i -= 2)
{
doc.Pages.RemoveAt(i);

}
}
//保存合成后的PDF到文件
doc.SaveToFile(@"d:\123.pdf");
MessageBox.Show("开始时间:" + startTime + "结束时间:" + System.DateTime.Now.ToString());

PS:试用版的PDF4NET会每一页的顶部添加一行红色的字。PDF4NET还有很多其他的功能,很强大的哦。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/togis/archive/2009/05/26/4218789.aspx

免责声明:文章转载自《双层PDF的制作——使用PDF4NET 3.3.6 实现》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇js获取键盘的keyCode-------Day42web列表分页与问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

wkhtmltopdf 缩放问题

最近客户要精确pdf打印。wkhtmltopdf  html转pdf 始终页面有缩放;解决这个问题绕了很多弯路花了2天,这个问题一定要记录下:--disable-smart-shrinking   这个参数一定要加上,加上页面就不缩小了;--dpi 这个参数不要用默认值,要设置大一点;letter-spacinng : 0  不然字间距太密; wkhtml...

java生成pdf字体的坑

java生成pdf字体的坑 做过java生成pdf的应该都知道有很多坑,特别是字体。 这里就记录一下字体的问题。 系统必须安装字体,项目的resources目录放置了要用到的中文字体,宋体和黑体。并在代码中进行了引用。但是实际发现系统仍然需要安装字体。 安装字体的坑 这里主要记录一下安装字体的坑 网上找到的教程 cd /usr/share/fonts/...

C#操作word模板

    string newDocFileName = Guid.NewGuid().ToString().Replace("-", "");        string strServerPath = Server.MapPath("") + "\\Model.doc";  //模板路径        string strSavePath = Serve...

PDF文件结构(一)

PDF文件结构(一)                                      ————物理结构                              作者:bobob                              邮件:zxbbobob@hotmail.com    PDF(Portable   Document   Fo...

opencv视觉系统开发教程资料下载

opencv视觉系统开发教程资料下载 转 https://bbs.52iss.com/forum.php?mod=viewthread&tid=3995&extra=opencv对于编程绝对是一个好东西。opencv的意思是开放源代码计算机视觉类库(open source computer vision library),未来研究人工智能可...

APEX-数据导出/打印 学习

前言:  由于公司使用了Oracle APEX构建应用,且在APEX新版本v20.2版本中增强了相关报表导出数据相关功能;正好现在做的事情也需要类似的功能,就先来学习一下Oracle的APEX相关功能及实现方式;为自己优化实现相关功能做些积累吧。  先简单介绍下APEX是什么? APEX是什么:  APEX:Oracle Application Expre...