使用C ++程序从PDF中提取页面尺寸

时间:2013-05-08 19:59:18

标签: c++ parsing pdf podofo

如何使用C ++程序从PDF文件中提取页面尺寸?

是否有任何轻量级,跨平台,易于构建/安装的库可以提供帮助?

谢谢:)

[编辑]

我尝试在windows下构建podofo,但它没有用。 LibHaru和PDFHummus用于渲染pdf,而不是解析数据。

[EDIT&溶液]

我终于在windows下构建了podofo!

(顺便说一句,在Ubuntu下,这只是sudo apt-get install libpodofo0.9.0 libpodofo-dev libpodofo-utils的问题)

这实际上是一个CMake 2.8.10错误,切换回2.8.3解决了问题(thanks

如果有人有兴趣,这里是如何开始使用windows下的podofo(我将演示如何构建调试/共享版本):

  1. 下载所需的库(freetype,jpeg,openssl,tiff,zlib)并安装它们(我建议,复制LIB_NAME\libC:\libraries\lib下的所有文件,同样的事情\include
  2. 安装CMake 2.8.3
  3. 将MinGW \ bin和CMake \ bin添加到PATH
  4. 下载podofo并将其解压缩到某处,让我们说C:\downloads\podofo-0.9.2
  5. 创建新目录C:\downloads\podofo-0.9.2\podofo-shared-debug
  6. 打开命令提示符,然后键入cd C:\downloads\podofo-0.9.2\podofo-shared-debug
  7. 运行此命令为podofo的调试/共享版本准备MinGW makefile

    cmake -G "MinGW Makefiles" .. -DCMAKE_INCLUDE_PATH=C:\libraries\include -DCMAKE_LIBRARY_PATH=C:\libraries\lib -DPODOFO_BUILD_SHARED:BOOL=TRUE -DCMAKE_BUILD_TYPE=DEBUG
    
  8. 然后只需调用make

    mingw-make.exe
    
  9. 如果您使用的是代码块,请按以下步骤安装/使用podofo:

  10. 9.1。复制以下

    podofo-0.9.2\podofo --> C:\libraries\podofo-0.9.2\include\podofo
    podofo-0.9.2\src --> C:\libraries\podofo-0.9.2\include\src
    podofo-0.9.2\podofo-shared-debug\podofo_config.h --> C:\libraries\podofo-0.9.2\include\podofo_config.h
    
    podofo-0.9.2\podofo-shared-debug\src\libpodofo.dll.a --> C:\libraries\podofo-0.9.2\lib-shared-debug\libpodofo.dll.a
    
    podofo-0.9.2\podofo-shared-debug\src\libpodofo.dll --> C:\libraries\podofo-0.9.2\bin-shared-debug\libpodofo.dll
    

    9.2。在链接器选项中使用-lpodofo,然后将C:\libraries\podofo-0.9.2\include添加到编译器的搜索目录,将C:\libraries\podofo-0.9.2\lib-shared-debug添加到链接器的搜索目录

    回到我的初始问题,最接近的答案是“如何使用C ++程序从PDF文件中提取页面尺寸(使用podofo)?”是这样的:

    #include <iostream>
    #include <podofo/podofo.h>
    
    int main (int argc, char* argv[])
    {
        PoDoFo::PdfMemDocument document;
        try
        {
            document.Load("path/to/the/file.pdf");
        }
        catch (PdfError& e )
        {
            // a password is required to read this pdf
            return -1;
        }
    
    
        try
        {
            PoDoFo::PdfRect pageSize = document.GetPage(0)->GetPageSize();  // yes, it's "0-based"
            std::cout << "width: " << pageSize.GetWidth() << "\t\theight: " << pageSize.GetHeight() << std::endl;
        }
        catch (PdfError& e )
        {
            // page number error
            return -2;
        }
    
        return 0;
    }
    

0 个答案:

没有答案