如何将PDF转换为原始TXT文件
C++ PoDoFo - How can I convert PDF into raw TXT file?
我正在尝试从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
相关文章:
- 如何将 txt 文件中的行分隔为组件C++
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- 将浮动的heightmap数组导出为16位原始值
- 一种在C++中读取TXT配置文件的简单方法
- 给定一个向量,如何找到该向量的所有子集和的原始索引
- 如何修复此iFile以将.txt输出到控制台
- 无法打开.txt文件
- 有没有办法从非C/C++文件中读取C++原始字符串文字的内容
- CMakeLists.txt中的命名空间表示法
- Arduino从Txt读取整数
- 是否可以将llvm::FunctionType转换为C/C++原始函数指针
- 如何使用CLion在Mac上创建一个新的.txt文件
- 如何拆分文件中.txt字母并使用c ++使用数组进行扑克?
- 使用fstream对txt文件中的数字进行循环
- Visual Studio在尝试读取resource.txt文件时崩溃
- 更正 CMakeList.txt 用于谷歌测试的文件?
- 如何从txt文件中读取多个不同长度的数组?
- 在一次迭代中从 txt 文件中读取多行
- 试图打开并读取一个.txt文件,但它从原始文件中删除了实际文本(Qt GUI C++
- 如何将PDF转换为原始TXT文件