美文网首页
poppler在windows下的使用

poppler在windows下的使用

作者: 叶迎宪 | 来源:发表于2018-08-28 20:55 被阅读0次

项目中需要将pdf文件转成图片,搜索了一下发现poppler这个库做这个事情比较合适。本来想偷个懒,直接用别人编译好的windows版poppler库
http://blog.alivate.com.au/poppler-windows/

参照poppler自带的例子cpp/tests/poppler-render.cpp,写了一个pdf转换成图片的简单测试程序。但在VC2015中链接这些编译好的动态库,总是报错无法解析的外部符号。这是因为对于C++,VC和gcc的abi并不一致,对于某个类的成员,gcc和vc生成的符号名称不一致,所以在相互调用的时候会出现找不到符号。但是对于c函数,vc和gcc的abi是兼容的,因此像ffmpeg库这些就可以在mingw中编译,vc中使用。

没有办法,只能自己尝试编译poppler windows版了。首先到 https://poppler.freedesktop.org/ 下载最新的源码包,解压缩。参照poppler的说明,编译步骤

cd poppler-0.68.0
mkdir build
cd build
cmake ..

但是在cmake这一步运行不通过,提示缺少freetype库。在windows下面安装各种开发库,最方便是使用vcpkg了,
.\vcpkg.exe install freetype

同样,编译poppler还需要jpeg、png、tiff、openjpeg、libiconv等其他库。
.\vcpkg.exe install devil
.\vcpkg.exe install openjpeg
.\vcpkg.exe install libiconv

回到poppler-0.68.0/build目录,删除所有文件,重新执行cmake,并且要让cmake使用vcpkg安装的库
cmake -DCMAKE_TOOLCHAIN_FILE=E:\vcpkg-master\scripts\buildsystems\vcpkg.cmake ..

这样,终于可以生成vc的工程文件poppler.sln了。打开工程,编译poppler-cpp一项就够了。

另外,测试的时候发现,打开带中文名字的pdf文件有可能会有问题。这是因为poppler的windows实现中,打开文件经过了一次文件名从utf8到utf16的转码。

  // try to open file
#ifdef _WIN32
  wchar_t *wFileName = (wchar_t*)utf8ToUtf16(fileName->getCString());
  file = GooFile::open(wFileName);
  gfree(wFileName);
#else

因此,这就要求我们输入文件名也是使用utf8编码的。如果是windows默认的GB2312编码,就会转码失败导致pdf文件无法打开

相关文章

网友评论

      本文标题:poppler在windows下的使用

      本文链接:https://www.haomeiwen.com/subject/ixfcwftx.html