1

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

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

谢谢 :)

[编辑]

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

[编辑和解决方案]

我终于在windows下构建了podofo!

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

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

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

  1. 下载所需的库(freetype、jpeg、openssl、tiff、zlib)并安装它们(我建议,复制 in 下LIB_NAME\lib的所有文件C:\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 的方法:

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++ 程序(使用 podofo)从 PDF 文件中提取页面尺寸?” 这是:

#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;
}
4

0 回答 0