Poppler for Windows

I have been using the Poppler library for some time, over a series of various projects. It’s an open source set of libraries and command line tools, very useful for dealing with PDF files. Poppler is targeted primarily for the Linux environment, but the developers have included Windows support as well in the source code. Getting the executables (exe) and/or dlls for the latest version however is very difficult on Windows. So after years of pain, I jumped on oDesk and contracted Ilya Kitaev, to both compile with Microsoft Visual Studio, and also prepare automated tools for easy compiling in the future. Update: MSVC isn’t very well supported, these days the download is based off MinGW.

So now, you can run the following utilities from Windows!

  • PDFToText – Extract all the text from PDF document. I suggest you use the -Layout option for getting the content in the right order.
  • PDFToHTML – Which I use with the -xml option to get an XML file listing all of the text segments’ text, position and size, very handy for processing in C#
  • PDFToCairo – For exporting to images types, including SVG!
  • Many more smaller utilities


Latest binary : poppler-0.51_x86.7z

Older binaries:

115 thoughts on “Poppler for Windows”

  1. Problems:

    1. The binary file that is there for download looks like the versions there are 0.18 instead of 0.22

    2. The docs directory is missing in the build zip file.

    Thanks for taking out the time to post this.

  2. I am very interested in this as I am trying to develop an internal tool that relies on the Poppler libraries, I have had no end of trouble compiling / getting this working. My application is written in QT so msvc poses some complications. How can I help on this project, I don’t any experience but I can put in some time… I was wondering if cross compiling the binaries from a linux box would be “better” for all of the windows possibilities… Your thoughts? What do you need next?

      1. No, I originally compiled without the Cairo backend, I wasn’t even aware of the path, I’ll need to look at it. What I mean by better is it would seem easier to create the various cross compiling environments. To move forward with my project I installed the msys environment to get it to compile. I ran into no end of frustrations with CMAKE and all the auxillaries that needed to be compiled. It seemed to be a white rabit chase to me, and I started using other people’s compiled libraries to save time only to find out that I couldn’t take one compiled for Microsoft and mix it with one compiled for MSYS.

        I finally got a working library but there are some * weird* behaviors that I am convinced have to do with the aforementioned mess. My problem is that I am not a hardcore programmer, and I have only ever learned enough to to what I was wanting to at that moment… So my wall of knowledge is missing a few bricks (Late Game Jenga style).

        I have a fair number of resources at my disposal, so depending on what the needs of the project are, I can contribute very positively.

        But, I digress, in a short answer, I am talking about Mingw, Msys, and MSVC compiling… Hopefully from one Linux system to these difference configurations, once the scripts are setup, *maybe* it won’t be horrible to maintain

        1. MSYS is essentially Mingw (in that it requires Mingw), and therefore the compiled assembiles are not strictly windows dlls – they require Mingw to run (full environment or one or more dlls).

          This build package aims to compile strictly for windows with minimal runtime dependencies (other than the poppler dependencies). We are working on fully automating the build process so that anyone can compile it, in the future this might include different flavours (such as QT-Cairo) and of course would include ready-to-go dlls for everyone to simply download.

          There may be scope for other compiler support, but for now we will be focusing on MSVC.

          1. I understand the differences (basically) between MSYS, and MSVC, I thought there was a complie method that didn’t require the MSYS environment that was still functional using the free tool chain… But whatever the scope, I could really use this project and would like to help.

  3. First of all: Thank you! It’s really nice to be able to use these tools on Windows.

    Bad thing is: I can’t use them (at least version 0.22, 0.18.1 is fine), because I always get an error: “Not a valid Win32 application.”

    I still have to use Windows XP. The features at the bitbucket wiki include “Compile for/on Windows 7+”. Does this mean exclusively for Windows 7+?
    Is there any hope using the current versions with XP?

    1. Hi Florian,

      It is my intention to add support as widely as possible, so I’m not going to restrict to Windows 7+, although I probably won’t support anything lower than the latest SP of XP.

      I compiled 0.22 with Visual Studio 2012 [Express], perhaps that’s the reason it won’t run on Windows XP. I’ll try and get a VS2008 compilation.

    2. I have recompiled with: 1) VS 2010, 2) Updated build package which fixes the jpeg bug, now fixed.

      Please let me know if the new binaries work. (Still need to try VS2008 if that doesn’t work)

  4. I have a Makefile fragment that can compile Poppler + dependencies with MSYS on Windows. I am using this to build a utility which links against Poppler, seems to work well but there might be some problems when compiling the utils (they are excluded from my build)

    See: https://gist.github.com/HarryR/4726522

    If the utilities are statically compiled then no external DLLs etc. are required.

    1. Thanks Harry, I’ll have a look, I have been working on an MSYS solution myself, so between both of these we should be able to maintain a single versatile solution.

  5. Hi,

    Thanks for making available the binaries ready for download/use. I was wondering if there is a x64 version for them ?


    1. Hi Agnel,

      It is placed (awkwardly) in the post_build_files folder for now. It is the same license as poppler, which appears to be GPL2.

      Sorry to others asking questions, I have been really busy. I will try and set up some permanent funding for an outsourced resource to maintain and improve windows binary support (including MSYS).

  6. Looks like Visual Studio 2012 generates EXE which is not executable under XP (even with MSVCR110.dll present). I get the error which I typically get when try to launch x64 binary on my x32 XP. I am sure there should be some backward-compatibility flags…

  7. Todd,

    I gather that Poppler is now intended to be functional with Windows XP. If that is so, I would appreciate your advice on how to install from the bin directory.

    I use XP Pro with SP3. When I try to execute pdffonts.exe, I am informed that pdffonts.exe is not a win32 application.

    With pdftohtml.exe, I get the same message.

    I hope that you will be able to sort this out for me.


    Colin W.

  8. I’ll look at getting my outsource guy to re-invigorate this. I will target an MSYS (mingw) build, and look at automating builds on my server triggered by new release versions for download. I’ll leave the older VS build method unsupported for now.

  9. Hi there, Could you perhaps provide me with the contact of the contractor on oDesk as I would need some additional work in a related field?

    Many thanks in advance,


  10. In the future, plans to leave executables available for “poppler-win32” based on the latest version “poppler-0.26.1” including DLL needed to run windows.
    The proposed version you are much more functional than available from “xpdf” for windows.

  11. Hi,
    Download file version 0.26 contains new folders: include, lib, share – in which context are they meant to be used? Any docs? Does not seem to be Visual Studio relevant? – at least there are no project files.
    I would like to be able to create a Poppler dll myself and I thought/hoped your latest version could be used do do so? Going through your Bitbucket Wiki, you refer to a “build package” – but where is that build package to be found? It does not appear to be anywhere on the Bitbucket pages and also not in the Version 0.26 download.

    1. This version was not build with Visual Studio, it was built using Mingw which is a Unix compatible environment for windows. This is the new preferred method, being easier and more successful in compiling (compared to VS).

      The instructions are therefore obsolete, and you should compile using the ming folder found in the repository. I will try and update the instructions, although I will be automating builds nightly for Windows.

      Those extra folders are required for linking the compiled poppler library to your own C++ application/library.

  12. Hi,
    I’m tying to build Poppler using VC10.
    First, it looks like the msvc scrips still uses the old 0.22 version instead of the newer 0.26 version.
    Second, no matter how I tried, I could not managed to run the build.bat script file.
    I think there is a problem with my environment variables which have spaces and parentheses (Program Files (x86)).
    Any help will be appreciated.

    1. Hi Gil, the Visual Studio method is depreciated for now. You should use the Mingw folder, as this is the most up to date method and also a simpler and more reliable approach, given that poppler was written primarily for Unix systems.

  13. Hi
    i using Nuxeo for doc management,
    documents archived in the system as pdf files, when i want to see it i have to download it first b4 i can view it,
    i have been told to use pdftohtml software, i tried to find they directed me to your blog which seems very engaging and i would like your advice this can be accomplished, thanks in advance

  14. Excellent work, but “pdftocairo” produce SVG incorrect, can not open with a browser (firefox for example). Converting the same pdf in linux and if it works.
    Will have any difference with cairo libraries you use?, in previous versions worked fine.

  15. To Todd

    Hi, Can poppler.0.26.1_x86.7z (mingw) be installed? I have try clicking on the pdftohtml.exe but there is no setup appeared.


    1. Set your “path” to poppler binaries, something like
      D:\poppler-0.26.1_x86\ poppler-0.26.1_x86\bin

      1. which path you are talking about in case of Window Server, I have downloaded the poppler-0.48_x86.Can you please assists?

    1. Yeah, they are quite old. I’ll see if Ilya can help out with that for us. It might mean supporting nightly builds of those too.

    1. Looks like the perfect place to get those dlls, I will ensure these latest versions are used by the build package.

  16. Greetings,

    The title of this post attracted me, and I hope this is an appropriate question for this group.

    I am developing a utility program, currently using Windows 7, Eclipse CDT, C, and MinGW to work with PDFs. My needs are pretty simple: read a batched PDF file via stdin, remove the first and last pages, separate the remainder into component files, do some pattern recognition on the text, and save the files.

    It looks like I can do all this using some very basic poppler functions; as a matter of fact I could do it manually on the command line using the Windows utilities provided here, and I see that there are corresponding functions in poppler that can be used programmatically. I don’t need anything fancy, no graphics support, just basic PDF modification.

    Is there some way of isolating a minimal set of Windows-usable poppler code to be imported into an Eclipse C or C++ project so that I could e.g. include poppler.h and use pdfseparate(), pdftotext(), etc. directly in my program? Sorry if this seems like a really obvious thing, but for some reason poppler seems to be stumping me right now.

    Thanks for any information!

  17. Greetings, and thank you for your work! In my Windows 7 environment I am able to use pdfseparate.exe just fine, but pdfunite.exe, while it assembles component files into a target file, also prompts Windows to put up a “pdfunite.exe has stopped working” dialog every time.

    Any suggestions as to what it or I may be doing wrong?

  18. Ilya ended up including cairo compiling to ensure we had the most recent libcairo.

    You can now download the binaries with this from this page. Note the poppler version also went up to .3 from .1.

    I have got someone to build up a VM which can fire up nightly to check for a new poppler version to compile. I’m sure it’ll be a few weeks before that’s operating smoothly, and automatically posting to my blog for easy download.

  19. Using pdftotext.exe to extract data from medical reports and scan for key info; works great for 98% of PDFs but produces seriously garbled text output for a few, which is odd considering they all come from the same source (a remote EMR program printing to a Ghostscript printer)

    Also, the newest version – poppler- – unpacks to produce
    poppler-0.27.3\poppler-0.26.3\bin, etc… is it possible that this is still actually poppler-0.26.3?

    1. PDFtoText: I suggest you try a few different options (raw, layout) and perhaps some other poppler utilities (pdftohtml) on the same PDF. Also, though it’s using Ghostscript, the content is different, so unique fonts for example could be causing some issues.
      Wrong version: Yes very possible, I will check this and fix it up.

      1. It turns out the bad files were anomalies, re-printing them from the EMR has been consistently successful in producing PDFs that can be rendered to text, and poppler is working well. The layout option is very useful to keep things lined up for parsing. Thanks!

        1. Alivate does a lot of work in Healthcare. I have created a code-base which can convert PDFs to very specific RTF specifications. I would be willing to share the source (under zero cost license) to see it improve generically, although my application is quite specific. It uses the PdftoHtml (with XML option) feeding my C# program to perform a lot of post-processing as a pipeline of transformations. Such transformations include identifying paragraphs, de-justifying paragraphs, removing footers, linearising column structures and more.

          1. Sorry for the long pause. I’d be very interested to see the code, although while I’ve worked with C# my main emphasis has been on Java and lately C/C++ and Perl, not sure how much I could contribute. In our case the project was processing batched files sent to a networked Ghostscript printer by the EMR and taking them apart into component reports, and in the process naming the report files based on info found in the text. I used PDFSeparate to produce individual pages, then PDFToText to be able to id cover sheets, summary pages, etc., then PDFUnite to put the reports back together.

            (After this our HL7 engine then matches HL7 messages and PDF files based on file name, converts the PDF to Base64, appends it to the corresponding message, and sends it downstream.)

  20. Hi, how i can load pdf file, or what headers i need for create poppler and load file, as in examples, or better post example of load pdf file.

  21. Hi, i use your components, and i search and find this,
    poppler::document *doc = poppler::document::load_from_file( pathFile.toStdString() );, this mark unresolved link, (msvc 210 know poppler class, but i can get work, for example if i remove toStdString mark error.

    1. correction the question is first i can use with msvc 2010(any version, or concrete version), or i will recompile and so recompile all my project?

  22. I got the 0.26.4 distribution and could run all tools except for the pdfunite.exe. it presents the GPF error and asks if Windows should search for a solution.

    Did I miss something here? Anything I Need to install?
    (Windows 7×64 Ultimate)

  23. I am trying to use get the bounding box of texts ina a pdf. This works great when I use the command line, However, I’d like to be able to find this data without the commandline – where can I find the files for this?

    1. What do you mean by “without the commandline”? Rather than describing what you don’t want it to be, perhaps an indication of what you require? A Graphical User Interface? A DLL?

  24. I am trying to use “Poppler CPP interface library” to work with pdf on visual studio 2013. I have download “poppler-”. I can find static library for windows. There are only two files named endwith “.dll.a” in lib folder. So How can I use this lib on visual studio.

    1. Hi Chrisdy, Those files are for linking via a mingw compiled assembly, not via msvc. I am discussing with the lead contractor, Ilya, for this project about options. I don’t really want to resurrect the msvc builder project – there’s just too many dependencies missing to make it work well. So instead I’m considering a “Poppler Server”, which is a long lived process which communicates either via IPC or HTTP. I am currently favoring HTTP because it would enable interesting uses. Ilya has started work on this and another issue, so expect some progress in the next two weeks, I would value your feedback on these ideas. In the mean time it’s quite simple to open a process to pdftohtml for example per pdf: a process is created each time, but I wouldn’t consider that to be a problem in most scenarios.

  25. Hi, i can make one recommendation, you will add description for changes version, fixes, improvements, i revised the version 0.26 and the 0.33 and in the jpeg convertion, for example and the convertion is better quality

    1. That would be ideal, but I think you should be able to look at the Poppler Release notes for that. I’m only compiling what great volunteer coders have designed (and documented).

    1. Not sure corey. This is a new requirement. I will try and Qt header and poppler-data extensions in the next round of support from Ilya.

  26. I used `PDFImages` to convert the pdf (contains Chinese characters),
    but nothing character was dumpped on the images.
    Maybe the encodings problems.
    I download load the poppler-data from poppler web (http://poppler.freedesktop.org/).
    How to integrate the poppler-data to your relased version.

    1. I’m not sure yet, having never had a requirement for non-western characters myself to date. Ilya is currently working on x64bit and DLL linking. I will ask him to look at this next. His time is in high demand, so don’t expect a resolution for at least another month.

  27. Can I by any chance get visual studio compatible poppler dll and lib files that work with Qt 5.5
    I am in bad need of the poppler lib to work with my visual studio Qt project
    I got the poppler dll and lib from a download location but deleting the document object or any object got from poppler just corrupts the heap and app crashes.
    Or is it recommended to use MingW but that will be a huge effort for me at least

  28. Hi, Todd
    I have to build popppler-for-windows by myself, beacuse we use MSVC2013 & Qt5.5. I got poppler-for-windows archive and modify the build.bat/setenv.bat, after resolving all the depedency problems, I found there is not “poppler.sln” to build the final dll. I search poppler.sln on the web and get the URL: https://sourceforge.net/projects/scribus/files/scribus-libs/win32-msvc2008/, but it loses efficacy. Can you please tell me where to get “poppler.sln” file?

    1. This would be one for the Poppler team. I think there’s a sln file in the core poppler repository. If that’s too old and needs to be updated, they would be the best ones to do so.

    2. Kelly Chen,
      could You provide a link to poppler binaries that work with MSVC2013 & Qt5.5 ? I tried to make it work in the same configuration but was unsuccessful because of dependancy problems that You mentioned and settled on using poppler with MinGW. As such binaries seems really hard to obtain I would really appreciate that.

  29. Avast is reporting a virus (DS#FinalA|D|algo;) in pdfimages.exe. You might want to check up on it. Sorry, couldn’t find any additional info on what that is, Avast is not very forthcoming on details.

  30. Hi Todd,

    any chance you can share the VS2010 projects for building 0.42.0?
    I’m looking at adopting pdftohtml.exe, but having a hard time getting a working build environment. So far, web based resources appear to be outdated..

    thnx, Gait.

  31. Thanks a lot, Todd, for providing current Poppler binaries for Windows. I really, really appreciate this.

    One small question though: since v0.42.0 there is a new command line utility, `pdfsig`. Its purpose is to verify electronic signatures of PDF f iles (see Poppler release notes for v0.42.0). The *.7z archive of your binaries does not have it.

    Are you aware of this?

  32. Thanks a lot, Todd, for providing current Poppler binaries for Windows. I really, really appreciate this.

    One small question though: since v0.42.0 there is a new command line utility, `pdfsig`. Its purpose is to verify electronic signatures of PDF files (see Poppler release notes for v0.42.0). The *.7z archive of your binaries does not have it.

    Are you aware of this?

  33. Hi, I’m newbie in QT. I’m using QT 5.3 and mingw 4.8
    I’m very sorry for my silly question, but usually, i read an article where they “include “, I check the folder and can’t found it anywhere. so which file should I include in my project?

    Simply said, what should I do to use poppler on my project?
    Can you give me a link which explain step by step?

    @my Test.pro I add these 2 lines :
    INCLUDEPATH += “D:\\QT Project\\Test\\poppler-0.42.0\\include\\poppler\\cpp”
    LIBS += -L/”D:\\QT Project\\Test\\poppler-0.42.0\\lib” -lpoppler-qt5

    NB : So sorry for my bad english, it’s not my native language.

    1. I’m not sure. I’m quite busy for a few weeks, but I will ask Ilya about such a question. Feel free to remind me here later if you don’t hear from me by then. In the meantime, perhaps try asking the Poppler team and ask on StackOverflow.

  34. Thanks a lot, Todd, for providing these Poppler binaries for Windows. I really appreciate this as well.

    One question though : I’m not an expert in Windows (7, for what I’m concerned), and I wonder where to install properly the poppler directory and its 4 subdirs into the C:\Windows\System32 tree, after I unzipped the latest binary file.
    Any hint will be appreciated.

    Thanks in advance, Regards, G.

    1. I would suggest copying into C:\Program Files (x86)\Poppler\

      Then if you want easy access via Command Prompt, add that folder to the %path% variable: You should open System Dialog, Environment Variables and edit Path under the global variables.

  35. Is there a way to specify the merging as an “append” type operation? I’m needing to merge several hundred small pdf’s in a specific (non-alphabetic) order. I’m working on an old Windows 2000 server, so I can’t fit all the filenames on one command line since it’s limited to 2047 chars. I’d love to be able to do “pdfnite file1.pdf out.pdf”, “pdfunite file2.pdf out.pdf”, etc.

    1. Uniting two PDFs is like appending. The second one is always last. So if you called the pdfunite command a few times you have enough control. eg: pdfunite file1.pdf file2.pdf out.pdf, then: pdfunite out.pdf file3.pdf out2.pdf, then: pdfunite out2.pdf file4.pdf out3.pdf

      But that would require a degree of scripting to automate. It would make more sense to use a software library (such as java/itext, C#/itextsharp) and a proper coding language.

  36. When trying to download probably any version of binaries (at least poppler-0.51_x86.7z, poppler-0.50_x86.7z, poppler-0.18.1) I am obtaining the error message
    404 – File or directory not found.
    The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable.

    2-3 days ago I was also obtaining an error message but – AFAIR – it was error 500 and it concerned also this blog page.
    Anything is going wrong?

    Nevertheless, thank you very much, Todd, for your long-time effort.

      1. It works flawlessly now. Thanks a lot for the quick action.
        Two small remarks:
        The file poppler-0.51_x86.7z seems not to be a valid 7z archive, at least Igor Pavlov’s 7-zip, in versions 16.04 and 15.14, complains when testing:
        Testing archive: poppler-0.51_x86.7z
        Can not open the file as [7z] archive
        The file is open as [zip] archive

        Path = poppler-0.51_x86.7z
        Open WARNING: Can not open the file as [7z] archive
        Type = zip
        so some not so smart file manager plugins fail to open it (tested with Double Commander, Total Commander, even FAR manager with original Igor’s plugin – all failed). But 7-zip itself handles it, only warns.
        A little bit surprisingly, ancient 7-zip ver. 4.65 tests it as OK and handles without any warnings.
        (Files poppler-, poppler- and poppler-, that I also downloaded for a specific reason, exhibit no problems.)
        Just FYI, download speed was appr. 50 kBd, that is at least 6x slower than usually on my connection – but FMPOW, it is definitely out of importance when filesizes are under 10 Mb.

        1. Thanks Robert,

          After moving hosts, I didn’t have the 7z mime-type. But as you point out, that’s a Zip file with a 7z extension. I’ll try to remember to rectify that later. RE: The download speed, you were probably the first one to download since the host change. I use CloudFlare, so that file should now be cached by them for maximum speed. It’s a shame my current host was slow on direct download.

  37. Hi. Thank you so much for posting this. Are these libraries compiled with MSVC? I see that there is a MinGW runtime in the archive. Also libpoppler.dll is definitely compiled with GCC 4.8.1, not with MSVC. Could you please clarify that?

  38. Hello together,
    i want to use your file : “poppler-0.51_x86.7z” but I ´ve a question:
    Is it possible to change the format of the Output-File?
    In our case we need a small size for example DIN A6 to Import this file into a PDF-File.

    1. Poppler is used to Read PDF files, not to write them. From your question it looks like you’re trying to generate PDF files. If you’re using .Net, iTextSharp is a library I have used before for doing that. But do some research for yourself, because there might be something better for your specific needs, or a new recent library.

  39. Hello Todd,
    we have a PDF-File and we want to generate a JPEG-File with your Tool. We have an Work Arround with a Tool that generates PDF-Files with an electronic Signature an we want to Import the JPEG-File into the PDF before Signature. For that reason we are looking for an Tool that changes PDF-Files into JPEG-Files but we need a small size Picture. Can you help us?

    1. Oh well, now it is a little bit more understandable. Perhaps it is/was a language problem (your sentences are still a little bit unclear to me). Poppler – namely application(s) pdftoppm.exe and/or pdftocairo.exe – can convert PDF to JPEG. But what you need is to set a proper resolution, eventually JPEG quality (it also influences the JPEG size). As far as I know, none of these tools are able to set JPEG quality; pdfcairo may be able to set the resolution, pdftoppm not. (For howto, see pdftocairo.exe –help) You can give it a try. But generally I can recommend using ImageMagick or GraphicsMagick for such a task; both are able to convert PDF to JPEG and to set the resolution and the JPEG quality, too.
      Just to add, if you were to EXTRACT some JPEG images contained in PDF, then pdfimages.exe (–help) does such job.

    1. Totally fine. I didn’t know ImageMagick could do PDF to Image conversion. Alex asked for “small” picture size. I don’t think that means JPEG quality, but interesting that it isn’t in there. I usually use C#, so for reduced JPEG quality I would recompress: PDF > JPG(100) > JPG(80). Finally, you can set -paper, but -paperw and -paperh gives you the most control. Most of these kind of questions are related to Poppler though, not the compiling of it. So you can look at the Poppler website for support options. There’s a mailing list, and I think an IRC channel.

  40. Hello Todd,
    hello Robert,
    thanks a lot for your answers. I´ll try your tipps.
    Wish you a nice day and have a good time.
    Best wishes

Leave a Reply

Your email address will not be published. Required fields are marked *