【发布时间】:2014-03-10 07:01:59
【问题描述】:
从tesseract v3.03 's release note,tesseract 现在支持使用可搜索文本呈现 PDF 输出,但我不知道如何在我的代码中使用此功能。
目前我在我的 android 应用程序中使用tess-two,那么我只是想知道这个功能是否适用于 android?
如果您能给我一个使用tesseract api 渲染pdf 的示例,那就太好了,然后我将尝试为tess-two 库移植缺少的函数。
提前致谢。
P/s:我可以看到pdfrenderer 文件,它可以处理渲染 pdf 输出,但我不知道如何将它与基本 api 一起应用。
更新:这是我的尝试:
tesseract::TessResultRenderer* renderer = new tesseract::TessPDFRenderer(nat->api.GetDatapath());
__android_log_print(ANDROID_LOG_ERROR, "Test_tesseract", "data path = %s", nat->api.GetDatapath());
if (!nat->api.ProcessPages(c_file_name, NULL, 0, renderer)) {
__android_log_print(ANDROID_LOG_ERROR, "Test_tesseract", "process page failed");
delete renderer;
return;
}
FILE* fout = fopen(c_pdf_file_name, "wb");
if (fout == NULL) {
__android_log_print(ANDROID_LOG_ERROR, "Test_tesseract", "Cannot create output file %s\n", c_pdf_file_name);
delete renderer;
return;
}
const char* data;
int dataLength;
bool boolValue = renderer->GetOutput(&data, &dataLength);
if (boolValue) {
fwrite(data, 1, dataLength, fout);
if (fout != stdout)
fclose(fout);
else
clearerr(fout);
}else{
__android_log_print(ANDROID_LOG_ERROR, "Test_tesseract", "Cannot get output file");
}
delete renderer;
我的代码在 ProcessPages 方法中失败。写入日志后(我在ndk中调试有问题),发现pdfrender BeginDocument在baseapi.cpp的TessBaseAPI::ProcessPages方法中总是返回false:
if (renderer && !renderer->BeginDocument(kUnknownTitle)) {
success = false;
}
我错过了什么吗?
P/s:我用tess-two,它更喜欢baseapi而不是capi
【问题讨论】:
-
嗨@R4j,你设法让它工作了吗?
-
其实我没时间做完,之前退出了这个项目
-
我想继续这个,但我似乎找不到在Eclipse中调试本机cpp代码的方法,你用什么程序调试?
-
我只是写信给 logcat。如果你愿意,我可以分享给你我的尝试
-
那太好了!我怎么联系你? (找不到您的电子邮件)