如何将PDF转换为原始TXT文件

C++ PoDoFo - How can I convert PDF into raw TXT file?

本文关键字:原始 TXT 文件 转换 PDF      更新时间:2023-10-16

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

基于这个答案,我现在所做的是:

#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上使用。在我的回答中没有提到我如何进一步处理这个问题。

从文档Returns the strings contents它是一个数组,我应该迭代它?

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

PDF格式的例子

我真诚地问答案,我怎么能从这样的数据文本

问题是注释

// process type, token & var

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

要获得更好的示例,请查看podofo源代码中的podofotextextract工具的源代码:https://svn.code.sf.net/p/podofo/code/podofo/trunk/tools/podofotxtextract