gpt4 book ai didi

C++ PoDoFo - 如何将 PDF 转换为原始 TXT 文件?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:17:10 27 4
gpt4 key购买 nike

我正在尝试从 PDF 文件中提取原始文本。我已经找到了 PoDoFo 库,它似乎可以完成这项工作。

基于 this answer这是我现在所做的:

#include <iostream>
#include <string>
#include <podofo/podofo.h>

//using namespace PoDoFo;

int main( int argc, char* argv[] )
{
PoDoFo::PdfMemDocument pdf("inputpdftest.pdf");
for (int pn = 0; pn < pdf.GetPageCount(); ++pn)
{
std::cout << "Page: " << pn << std::endl;
PoDoFo::PdfPage* page = pdf.GetPage(pn);
PoDoFo::PdfContentsTokenizer tok(page);
const char* token = NULL;
PoDoFo::PdfVariant var;
PoDoFo::EPdfContentsType type;
while (tok.ReadNext(type, token, var))
{
if (type == PoDoFo::ePdfContentsType_Keyword)
{
// process type, token & var
if (var.IsArray())
{
PoDoFo::PdfArray& a = var.GetArray();
for (size_t i = 0; i < a.GetSize(); i++)
{
if (a[i].IsString())
{
std::string str = a[i].GetString().GetStringUtf8();
std::cout << str << " ";
}
}
}
}
}
}
return 0;
}

输出已经和用记事本打开PDF一模一样了,只是有些垃圾,比如:

  ( : ˝  ˝   - H  -   ( : ˝ ˇ  ; 7  < ˝ ˙ ˝  )     ˆ + 0  ( : ˝     % ˆ % ˘ ˚ : ˇ  ( 7  < ˝ ˙ ˝  )       ( -  ˝   % ' ˝ ) - 0 ˝      ˜ % / ˚ (  ˙ ˚ : ˇ  ( 7  < ˝ ˙ ˝  )       ( -  ˝   % ' ˝ ) - 0 ˝    ˜ % / ˚ (  ˙ ˚ : ˇ  ˆ 7  < ˝ ˙ ˝  )    

很明显,因为我没有设法将这些信息转换为普通文本,我问的是如何做到这一点?

因此,如您所见,我必须使用 GetString 函数处理 PDF 数据。现在我要遍历每个标记,检查它是否是数组(并包含 PDF 命令,如 TJ 等),然后在这样的元素上使用 GetString。在我提到的回答中,没有说我可以如何进一步处理这个问题。

From documentation 返回字符串内容 它是一个数组,我应该遍历它吗?

输入的 PDF 不是扫描的图片或图像。在给定的文件中总会有一些文本,可以高亮显示,然后手动复制,或搜索一个词。

Example PDF

我真诚地寻求答案如何从这些数据中获取文本。

最佳答案

问题是评论

// process type, token & var

旨在替换为实际执行一些处理的代码。if (var.IsArray()) 测试中的代码只有在您确定当前命令是 TJ 时才会执行。您仍然需要处理一些文本命令。

更好的例子,看podofo源中podofotextextract工具的源码:https://svn.code.sf.net/p/podofo/code/podofo/trunk/tools/podofotxtextract

关于C++ PoDoFo - 如何将 PDF 转换为原始 TXT 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31909634/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com