`
wjg105jo
  • 浏览: 13506 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

PDF文件的读写(使用SDK).(三).PoDoFo的简单应用

 
阅读更多

PDF文件的读写(使用SDK).(三).PoDoFo的简单应用
2011年05月02日
  在免费的PDF SDK中,我选择了PoDoFo,这也是无奈之举。因为我在网上搜索到的众多免费PDF SDK,绝大多数都是功能比较单一的。要么只能显示PDF,要么只能创建PDF。而对PoDoFo的描述是:操纵PDF……OK,那就是它了。
  按前面所说的操作,编译好PoDoFo,这时候,你会得到好几个文件。不过,你需要注意的,只有两个:PoDoFo.dll和PoDoFo.lib。前者是在运行程序时需要的,而后者是在编译时需要的。当然,如果你按README.HTM所说,先生成sln文件,然后再用VC打开sln文件,则会发现你打开的解决方案中,会包含一大溜的工程。这些工程,除了PoDoFo本身外,还有一些小工具和测试工程。这些东西都是很有用的,是我们在实际开发中很重要的参考。
  我们在实际开发中的另一个重要的参考,就是PoDoFo自带的说明文档。按照通常的编程惯例,这些文档中,最重要的又属《编程指南》和《类/函数参考手册》。我暂时尚未找到中文版的这些文档。
  创建一个VC工程,然后参考PoDoFo.sln中的测试工程,设置好工程的各项属性。当然,这里最重要的,仍然是两个设置:1.INCLUDE包含路径,它必须指向PoDoFo.h所在目录以及相关目录;2.LIB目录指向编译好的PoDoFo.lib所在路径,同时在工程的附加依赖库属性必须填上PoDoFo.lib及其相关依赖。
  在CPP文件中填入代码:include ,然后指示使用名空间PoDoFo:using namespace PoDoFo;
  点击编译,测试一下设置是否正确。
  如果需要在PDF文件中填入点什么东西,那么我们就特别要注意这句话:在哪个PDF文件上的哪一页上的哪个位置写入什么样子的什么内容。
  1."哪个PDF文件"。这个问题对于PoDoFo来说,就是PdfDocument类。不过这个类貌似是个抽象类(我不记得自己是否确认过这点,因为我一般都不直接使用它),我们一般使用的是它的两个子类:PdfStreamedDocument类和PdfMemDocument类。前者主要用于创建一个新的PDF文档,而后者主要用于处理现有的PDF文档。这两个类我都研究不深,但我感觉PdfMemDocument类似乎有一个缺陷:它必须要有一个input file和output file,且二者不能同名。这也就意味着,一般来说,你不可以直接对现有的PDF文件进行修改,而需要先读入现有PDF文件,修改完成后再写入另一个PDF文件。这个问题的来源,应该是PDF文件的一般打开方式:它是使用流的方式打开的。使用这种方式打开,最大的优点就是打开的初始速度很快,你需要什么东西,则再临时读入,总体上占用内存比较少。当你写入PDF文档时,你的PDF程序,就相当于一个抽水机,把数据流从一个文件抽(复制)到另一个文件。如果两个文件同名了,则读和写就会发生冲突。
  解决这个问题的其中一个办法,就是把要读入的文件,一次性全部读入内存中,然后回写的时候,就不用考虑同名的问题了。
  2."哪一页"。这个问题对于PoDoFo来说,就是PdfPage类。这个类对于具体的修改操作来说,只能算是一个过渡。它可以用来指向PdfDocument 的一个页面位置。
  3."哪个位置写入什么样子的什么内容"。这个问题,对于PoDoFo来说,都和PdfPainter类有关。但又不是全靠PdfPainter类来操纵。比如,字体设置,一般会去实例化一个PdfFont类。使用PoDoFo来操纵PDF,PdfPainter是一个非常重要的类,其重要程度,我个人感觉甚至要超过PdfDocument类。
  操作完成后,不要忘记:painter.FinishPage();
  看到这句,可能大家都有些恍然:PDF,还是以页为处理单位。
  PoDoFo的具体使用,我建议大家还是去参考它的例程和文档资料,这里不多描述。
  在我的实际使用过程中,碰到了一个很有意思的问题:中文显示。
  据我了解,最初的PDF SDK,或多或少都有多国语言显示的问题。从DOS时代过来的人,当然不会觉得惊讶,因为在N年前DOS下显示中文就是一个很大的问题。现在使用UNICODE编码,似乎一切问题都解决了,可历史的惯性,从来不是那么容易就消除的。
  我用的算是WIN32版本的PoDoFo吧,Font的编码默认是WINDOWS ANSI,显示英文是没什么问题的,但写入中文,则会显示乱码。
  其实我知道,这个问题和使用的字体名称,字体编码都有关系,但我没在PoDoFo的手册上找到问题的解决方法(这个可能和我看手册不认真有关系),只是在例程上找到一个CreationTest工程。这个工程是写入日文之类的东西的(由于我系统上没有安装其它国家的文字,看到的都是乱码)。CreationTest这个工程中的东西似乎稍稍有些复杂,幸好PoDoFo的开发工程师一周后答复了我的疑问,给出了下面代码:
  PdfIdentityEncoding encoding(0, 0xffff, false);
  PdfFont* pUnicFont = pdfStream.CreateFont( "SimHei", &encoding, false);
  总体来说,PoDoFo还是很优秀的,但是目前问题也比较多。使用起来比较复杂,就是一个很严重的问题。部分演示代码也貌似也得有问题,比如我拿到的0.9.0版中关于PDF 水印的代码,对我来说,就没有任何价值。
  衷心希望PoDoFo能做得更好!只是目前,我还是考虑换个PDF SDK吧……
分享到:
评论

相关推荐

    podofo及其依赖项文档源码下载包(2013.12.20)

    该压缩包资源是windows下编译podofo所需的依赖项源码及安装包,是截止到2013-12-20的最新版本,另外还附加了两个编译podofo的...PODOFO编译之CMake安装与简单测试.docx PODOFO编译之依赖项编译及podofo-0.9.2编译.docx

    功能最强大最完善的PDF操作开源库(podofo-0.9.6加VS2013)已成功编译可直接使用

    功能最强大完善的PDF操作源码库(podofo-0.9.6加VS2013)已成功编译可直接使用 编译好的podofo.lib和podofo.dll路径 podofo-0.9.6编译完成\编译完成\podofo-0.9.6\build\src\Debug podofo-0.9.6编译完成\编译完成\...

    S3 PHP SDK.pdf

    该 SDK 提供了一种简单的方法来与 AWS S3 服务进行交互,使得开发者能够轻松地实现文件的上传、下载、管理等功能。 #### 二、安装方法 S3 PHP SDK 的安装有多种方式,主要包括通过 Composer 安装、使用 Phar 单文件...

    Spire.Cloud.PDF.SDK及WebAPI示例.zip

    Spire.Cloud.PDF.SDK是一款基于C#和.NET框架的PDF处理工具,专为开发者设计,提供了丰富的API功能,便于在应用程序中实现PDF的创建、编辑、保存和打印操作。这款SDK充分利用了云端服务,使开发者能够高效、便捷地...

    PoDoFo(PDF C++类库)

    PoDoFo 是一个用来操作 PDF 文件格式的 C++ 类库。它还包含一些小工具用来解析、修改和创建 PDF 文档。

    Foxit.reader.sdk.activex.professional.v3.0.1.914

    通过使用Foxit Reader SDK ActiveX Professional v3.0.1.914,开发者可以构建出功能丰富的PDF应用,满足企业级用户的需求,提高生产力并优化工作流程。这个版本的更新可能包括性能改进、bug修复和新的API功能,以...

    FLEXPENDANT_SDK.pdf

    ABB FlexPendant SDK文档是一份关于ABB机器人示教器二次开发的PC软件开发工具包(SDK)的官方指南,它提供了对ABB机器人示教器进行二次开发所需的所有信息和指导。文档详细解释了如何从安装、配置开发环境、运行时...

    SDK.rar_SDK FPGA_Xilinxsdk使用_sdk. xilinx_xilinx sdk使用_xilinx sdk

    《Xilinx SDK FPGA嵌入式系统使用详解》 在当今的数字系统设计中,FPGA(Field-Programmable Gate Array)因其灵活性和高性能而备受青睐。Xilinx SDK(Software Development Kit)作为Xilinx公司提供的集成开发环境...

    ST MC SDK5.x 电机库软件框架说明资料(共20页转载ST原厂).pdf

    1、总体软件架构:MC SDK 5.x架构可分为三个主要部分:芯片外设库、电机库和电机应用层。芯片外设库使用STHAL/LL库,它对STM32的外设进行封装,提供给各个层级调用。电机库是核心控制层,负责实现电机的FOC(矢量控制...

    小程序预览PDF文件插件Pdf.js

    Pdf.js是由Mozilla开发的一款开源JavaScript库,它允许在Web浏览器中直接预览PDF文件,而无需依赖任何其他第三方插件。其核心理念是将PDF解析为一系列的图像和文本元素,然后在浏览器的Canvas元素上绘制这些元素,...

    c语言文件读写操作代码.zip

    "c语言文件读写操作代码.zip"这个压缩包中包含了两个文件:C语言文件读写操作详解.pdf和项目说明.pdf,它们将帮助我们深入理解如何在C语言中进行文件的读取和写入。 C语言提供了标准库函数来处理文件操作,主要由...

    java spire.pdf 使用 对 pdf文件的相关操作

    自己写的 spire.pdf 简单的demo ,有一些基础的使用方法,对刚接触的小伙伴会非常友善; 里面主要包含: 1.去除水印; 2.获取每页pdf的图片; 3.获取书签; 4.读取pdf将pdf转化为文字,最后由txt文件保存; 5....

    pdf.js使用文件流预览pdf

    总的来说,通过使用PDF.js的文件流预览功能,开发者可以创建一个高效且兼容性强的Web应用,让用户在浏览器中流畅地预览PDF文件。这在处理大量或大尺寸PDF时尤其有益,因为它减少了内存占用,提高了加载速度。在实际...

    pdfview打开pdf文件,避免android无法通过webview打开pdf文件

    PDFView是一个开源的Android库,它允许开发者在应用中显示PDF文件,而无需依赖Adobe Acrobat或其他第三方应用。这个库特别适合那些希望在没有WebView支持的情况下展示PDF内容的应用。下面我们将详细解释如何利用PDF...

    PoDoFo-0.8.4

    描述中指出,此版本的SDK(Software Development Kit)经过了实际测试,可以成功地进行PDF文件的读写操作,这表明开发者可以利用PoDoFo库的功能来开发应用程序,这些应用程序能够打开PDF文件,提取信息,修改内容,...

    c++文件读写.pdf

    C++ 文件读写 C++ 中的文件读写是通过 stream 类及其子类 fstream 实现的。fstream 是 file stream 的缩写,表示文件流。它提供了成员函数 open() 用于打开文件,close() 用于关闭文件,并提供了插入器 () 和析取...

    Spire.Pdf 去水印+超10页+用例,Spire.Pdf.dll、Spire.License.dll。

    这些文件主要用于演示如何使用Spire.Pdf库来去除PDF文档中的水印,并处理超过10页的PDF。 首先,`Spire.Pdf.dll`是核心库,包含了处理PDF文档的所有功能。通过引用这个DLL,开发者可以访问到一系列API,如创建PDF、...

    ST FOC库 5.ST MC SDK 5.x 实际使用案例.pdf

    7. 在实际应用案例中,文件提供了如何使用API函数设定闭环运行速度的示例。例如,设定电机以3000RPM的速度闭环运行,设定执行时间为1000ms,然后启动电机。需要注意的是,速度指令的参数是以0.1Hz为单位的,因此3000...

    pdf.js文件下载

    压缩包中的"pdf"文件可能是PDF.js库的示例文件,或者是一个使用PDF.js展示的PDF文档。下载后,你可以通过以下方式学习和测试: 1. **查看示例**:如果包含示例代码,你可以学习如何在实际项目中集成PDF.js,了解其...

Global site tag (gtag.js) - Google Analytics