﻿<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>学习日记 &#187; pdf</title>
	<atom:link href="https://www.softwareace.cn/?feed=rss2&#038;tag=pdf" rel="self" type="application/rss+xml" />
	<link>https://www.softwareace.cn</link>
	<description>时刻想着为自己的产品多做一些对他好的事情</description>
	<lastBuildDate>Fri, 20 Mar 2026 06:58:28 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	
	<item>
		<title>poppler windows 编译 详解 心得</title>
		<link>https://www.softwareace.cn/?p=352</link>
		<comments>https://www.softwareace.cn/?p=352#comments</comments>
		<pubDate>Mon, 15 Apr 2013 06:10:27 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Qt Gui]]></category>
		<category><![CDATA[pdf]]></category>

		<guid isPermaLink="false">http://www.softwareace.cn/?p=352</guid>
		<description><![CDATA[poppler：Poppler is a PDF rendering library based on the [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>poppler：Poppler is a PDF rendering library based on the <a href="http://www.foolabs.com/xpdf/">xpdf-3.0</a> code base.<br />
是一个基于xpdf的开源库，功能很强大<br />
请下载 poppler-0.12.4 版本，最新的版本比这个高，但是没有windows下的编译，查询日期20101028 poppler库编译需要 freetype231  jpeg  zlib的lib文件 找到后放在poppler-0.12.4\ext 里的各自文件夹下面 网上实在找不到的话，就下我编译好的，链接地址在最下面（你太懒惰了，继续逐行读，不要分心）<br />
<a href="http://cgit.freedesktop.org/poppler/poppler" target="_blank">http://cgit.freedesktop.org/poppler/poppler</a> 从这块能下载我说得那个版本，高级版本没有makefile.vc文件 需要等某位大虾把它补充上去<br />
从官网下载后，首先看readme.windows文件，这些比较重要， Poppler depends on 3 libraries that are not easily available on Windows: * freetype * libjpeg * zlib<br />
To make it easy, I&#8217;ve made those dependencies available as pre-compiled files. You need to download http://windevlibs.googlecode.com/files/ext.zip and unzip under &#8216;ext&#8217; directory. Those are header files and static libraries for freetype, libjpeg and zlib. /////////////////////////////////////////////////////////// &#8220;C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat&#8221; batch file (assuming standard installation). nmake -f makefile.vc TARGET=rel&#8217; (or TARGET=dbg)<br />
这两块比较重要 一个是说poppler需要什么库的支持 一个是说如何编译<br />
这个文件最好都看了，我只是把重要的挑出来了<br />
下面开始编译 通过vs2008进入 C:\Program Files\Microsoft Visual Studio 9\Common7\Tools\vsvars32.bat 这个文件进入DOS<br />
输入 nmake -f makefile.vc TARGET=rel<br />
等&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;<br />
编译出错，马力隔壁<br />
经 分析后，修改makefile.vc找到$(O)\XRef.obj在后面加入 $(O)\Movie.obj $(O)\OptionalContent.obj $(O)\FileSpec.obj $(O)\PopplerCache.obj $(O)\DateInfo.obj<br />
再次查找，找到$(O)\gmem.obj 添加 $(O)\gstrtod.obj在其后面<br />
一定要注意格式<br />
编译<br />
终于出来了（一摸脑门，汗也出来了）<br />
之后会生成rel文件夹，里面有个exe , 显示pdf用的 ，可以把一个pdf文件拖到这个exe上面，就能看的<br />
poppler 至此编译完全成功<br />
编译成功后，看一眼makefile.vc，看看它都用到了什么，其中最重要的就是perf-test.obj perf-test-preview-win.obj，这个才是主函数，在test文件夹里<br />
poppler官方网址 <a href="http://poppler.freedesktop.org/" target="_blank">http://poppler.freedesktop.org/</a> CSDN我编译好的poppler库</p>
<p>编译好后地址: <a href="http://download.csdn.net/source/2788477" target="_blank">http://download.csdn.net/source/2788477</a></p>
<p>下一章 poppler 心得 windows下的mfc应用和非mfc</p>
<p><a href="http://hi.baidu.com/tubo_true/blog/item/4b12da126f06e14521a4e946.html" target="_blank">http://hi.baidu.com/tubo_true/blog/item/4b12da126f06e14521a4e946.html</a></p>
<p><strong>下一篇</strong>  poppler应用心得 <a href="http://hi.baidu.com/tubo_true/blog/item/4b12da126f06e14521a4e946.html" target="_blank">http://hi.baidu.com/tubo_true/blog/item/4b12da126f06e14521a4e946.html</a></p>
]]></content:encoded>
			<wfw:commentRss>https://www.softwareace.cn/?feed=rss2&#038;p=352</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>windows下编译poppler过程</title>
		<link>https://www.softwareace.cn/?p=351</link>
		<comments>https://www.softwareace.cn/?p=351#comments</comments>
		<pubDate>Mon, 15 Apr 2013 05:59:24 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Qt Gui]]></category>
		<category><![CDATA[pdf]]></category>

		<guid isPermaLink="false">http://www.softwareace.cn/?p=351</guid>
		<description><![CDATA[windows平台下因为在做界面程序中需要显示pdf文件，查询相关资源决定用poppler库来实现，只能从网上 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>windows平台下因为在做界面程序中需要显示pdf文件，查询相关资源决定用poppler库来实现，只能从网上得到源代码，需要自己编译生成lib,dll文件，因为它用到很多库，最麻烦的就是编译过程。</p>
<p>平台：windows    编译工具：VS2008</p>
<p>一步一步来吧，从网上下载poppler源代码:http://poppler.freedesktop.org/，我的是poppler-0.18.4</p>
<p>利用CMake来生成VS2008工程，在CMake中需要配置的库都有：CAIRO,FREETYPE,ICONV,JPEG,LCMS,LIBOPENJPEG,PNG,QT,TIFF,ZLIB</p>
<p>我的电脑已经有了FREETYPE（2.4.2）,JPEG（未知）,PNG（未知）,QT（4.7.2）,TIFF（未知）,ZLIB（未知），还需要CAIRO,ICONV,LCMS,LIBOPENJPEG</p>
<p>1、CMake第1次Configure会提示生成什么工程，选择VC9即可，先配置FreeType库</p>
<p>&nbsp;</p>
<p>2、第2次Configure后，需要配置的库都会显示出来，CMake必须在Advanced条件下</p>
<p><img alt="" src="http://my.csdn.net/uploads/201205/08/1336463030_7859.jpg" /></p>
<p>&nbsp;</p>
<p>下面开始一个一个配置</p>
<p>CAIRO：</p>
<p>http://cairographics.org/官网上可以看到它的编译过程，但是太麻烦了。直接下载编译好的库，根据提示找到链接：http://www.gtk.org/download/win32.php</p>
<p>在这里可以看到想要的库文件，记得下载Dev的。</p>
<p><img alt="" src="http://my.csdn.net/uploads/201205/08/1336468086_4350.jpg" /></p>
<p>下载cairo的库文件即可。版本是1.10.2</p>
<p>ICONV</p>
<p>下载地址：http://gnuwin32.sourceforge.net/packages/libiconv.htm，注意要下载安装文件，安装完成后，在安装目录中找它的库文件。版本是1.9.2。</p>
<p>LCMS</p>
<p>下载地址：http://sourceforge.net/projects/lcms/files/lcms/，注意一点，要下载的版本是lcms1-19，若下载最新版lcms2的话，在生成VS工程编译是会发生找不到lcms.h的错误。解压后，找到Projects文件夹中的VC2008，直接打开sln解决方案编译即可，编译会发生错误，但不用管它，主要的lib文件已经编译出来了。就在Lib文件夹的MS文件夹中。</p>
<p>LIBOPENJPEG</p>
<p>下载地址：http://code.google.com/p/openjpeg/downloads/list，下载win32版本的压缩包即可。版本是1.5.0。</p>
<p>&nbsp;</p>
<p>3、将以上的库文件在CMake中配置好的，第3次Configure成功，然后Generate。打开生成的VS2008工程，Build Solution，会出现警告和错误，先不必管警告。接下来一个一个排除错误。</p>
<p>第一个错误：链接错误poppler.lib(PNGWriter.obj) : error LNK2001: unresolved external symbol _png_init_io</p>
<p>应该是PNG库的问题，去官网上http://www.libpng.org/pub/png/libpng.html下载了一个最新版的PNG源代码（1.5.10），发现它也能用CMake来生成VS工程，需要配置zlib库，如下图：</p>
<p><img alt="" src="http://my.csdn.net/uploads/201205/09/1336527285_8502.jpg" /></p>
<p>生成工程后直接打开编译，即可生成libpng库。</p>
<p>&nbsp;</p>
<p>4、在poppler的CMake中重新配置PNG库，第4次Configure，Generate。再次编译poppler工程，之前的错误消失，这个错误就是PNG库版本的问题。</p>
<p>第二个错误：D:\dependLib\cairo\include\cairo\cairo-ft.h(50) : fatal error C1083: Cannot open include file: &#8216;fontconfig/fontconfig.h&#8217;: No such file or directory</p>
<p>缺少fontconfig支持，去下载cairo的地址下载fontconfig（2.8.0），重新配置CMake，在CMake中没有关于fontconfig的配置，而在poppler工程中出现此编译错误的地方可看出是cairo库需要这个头文件。所以在CMake中直接配置cairo的头文件目录即可：</p>
<p><img alt="" src="http://my.csdn.net/uploads/201205/09/1336528611_8276.jpg" /></p>
<p>&nbsp;</p>
<p>5、第5次Configure，然后Generate。编译poppler工程，错误解决，但又出现新的错误。</p>
<p>第三个错误：D:\dependLib\fontconfig\include\fontconfig/fontconfig.h(30) : fatal error C1083: Cannot open include file: &#8216;unistd.h&#8217;: No such file or directory<br />
原来在fontconfig.h文件中，包含了一个unistd.h头文件，网上查询相关信息后知道这个头文件是UNIX/LINUX系统中的，Windows系统中没有这个文件，没办法只得修改源代码了，在包含unistd.h处加了ifndef语句如下</p>
<p>&nbsp;</p>
<div>
<div>
<div><b>[html]</b> <a title="view plain" href="#">view plain</a><a title="copy" href="#">copy</a><a title="print" href="#">print</a><a title="?" href="#">?</a></div>
</div>
<ol>
<li>#include &lt;sys/types.h&gt;</li>
<li>#include &lt;sys/stat.h&gt;</li>
<li>#ifndef WIN32</li>
<li>#include &lt;unistd.h&gt;</li>
<li>#endif</li>
<li>#include &lt;stdarg.h&gt;</li>
</ol>
</div>
<p></p><pre class="crayon-plain-tag">#include &amp;lt;sys/types.h&amp;gt;
#include &amp;lt;sys/stat.h&amp;gt;
#ifndef WIN32
#include &amp;lt;unistd.h&amp;gt;
#endif
#include &amp;lt;stdarg.h&amp;gt;</pre><p>编译，错误解决。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>第四个错误：C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\basetsd.h(78) : error C2371: &#8216;INT32&#8242; : redefinition; different basic types                                 d:\dependlib\3rdparty_vs2008\include\jmorecfg.h(164) : see declaration of &#8216;INT32&#8242;</p>
<p>看了一下这两个文件basetsd.h和jmorecfg.h，这两个文件里都定义了INT32，发生了冲突。修改jmorecfg.h文件，找到发生冲突的地方</p>
<p>&nbsp;</p>
<div>
<div>
<div><b>[html]</b> <a title="view plain" href="#">view plain</a><a title="copy" href="#">copy</a><a title="print" href="#">print</a><a title="?" href="#">?</a></div>
</div>
<ol>
<li>#ifndef XMD_H            /* X11/xmd.h correctly defines INT32 */</li>
<li>#ifndef _BASETSD_H_        /* Microsoft defines it in basetsd.h */</li>
<li>#ifndef QGLOBAL_H        /* Qt defines it in qglobal.h */</li>
<li>typedef long INT32;</li>
<li>#endif</li>
<li>#endif</li>
<li>#endif</li>
</ol>
</div>
<p></p><pre class="crayon-plain-tag">#ifndef XMD_H            /* X11/xmd.h correctly defines INT32 */
#ifndef _BASETSD_H_        /* Microsoft defines it in basetsd.h */
#ifndef QGLOBAL_H        /* Qt defines it in qglobal.h */
typedef long INT32;
#endif
#endif
#endif</pre><p>在此段代码之前加上#include&lt;windows.h&gt;即可解决这个问题。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>第五个错误：..\..\utils\pdftocairo.cc(666) : error C3861: &#8216;strcasecmp&#8217;: identifier not found</p>
<p>找到出错的地方：</p>
<p>&nbsp;</p>
<div>
<div>
<div><b>[html]</b> <a title="view plain" href="#">view plain</a><a title="copy" href="#">copy</a><a title="print" href="#">print</a><a title="?" href="#">?</a></div>
</div>
<ol>
<li>if (p &amp;&amp; strcasecmp(p, &#8220;.pdf&#8221;) == 0) {</li>
<li>  GooString *name2 = new GooString(name-&gt;getCString(), name-&gt;getLength() &#8211; 4);</li>
<li>  delete name;</li>
<li>  name = name2;</li>
<li>}</li>
</ol>
</div>
<p></p><pre class="crayon-plain-tag">if (p &amp;amp;&amp;amp; strcasecmp(p, &quot;.pdf&quot;) == 0) {
    GooString *name2 = new GooString(name-&amp;gt;getCString(), name-&amp;gt;getLength() - 4);
    delete name;
    name = name2;
  }</pre><p>这个函数的功能是忽略大小写比较，在string.h中，但是明明已经包含了string.h，没办法，只能换一个比较方式了，改成了</p>
<p>&nbsp;</p>
<p>p&amp;&amp;(!strcmp(p, &#8220;.pdf&#8221;) || !strcmp(p, &#8220;.PDF&#8221;))</p>
<p>再次编译工程，提示成功。</p>
<p>&nbsp;</p>
<p>说明一点，以上错误只不过是我在编译的时候遇到的，在其他机器上未必会遇到这些问题，也有可能会遇到一些其他问题，这就需要具体问题具体对待了，不过我相信遇到的问题就会有解决的办法。</p>
<p>&nbsp;</p>
<p>做个测试，利用编译生成的test-poppler-qt4.exe打开pdf文件（注意要将poppler，openjpeg，libpng等的dll即动态链接库所在文件夹，一般是bin文件夹加入到环境变量中）：</p>
<p><img alt="" src="http://my.csdn.net/uploads/201205/09/1336531386_9549.jpg" /></p>
<p>&nbsp;</p>
<p>虽然很麻烦，过程也很漫长，不过最后看到运行结果还是很值得的。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.softwareace.cn/?feed=rss2&#038;p=351</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
