tesseract v3.03 使用可搜索的文本示例渲染 PDF



从tesseract v3.03的发行说明中,tesseract现在支持使用可搜索文本渲染PDF输出,但我不知道如何在我的代码中使用此功能。
目前我在我的安卓应用程序中使用 tess-two,然后我只是想知道这个功能可以适用于安卓吗?

如果您能给我一个使用 tesseract api 渲染 pdf 的示例,那就太好了,然后我将尝试为tess-two库移植缺少的功能。
提前谢谢。

P/s:我可以看到可以处理渲染pdf输出的pdfrenderer文件,但我不知道如何使用基本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 %sn", 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方法中总是返回 false TessBaseAPI::ProcessPages

if (renderer && !renderer->BeginDocument(kUnknownTitle)) {
    success = false;
 }

我错过了什么吗?
P/s:我使用tess-two,它更喜欢baseapi而不是capi

如下所示:

TessResultRenderer renderer = api.TessPDFRendererCreate(dataPath);
api.TessBaseAPIProcessPages1(handle, image, null, 0, renderer);
PointerByReference data = new PointerByReference();
IntByReference dataLength = new IntByReference();
api.TessResultRendererGetOutput(renderer, data, dataLength);
byte[] bytes = data.getValue().getByteArray(0, dataLength);
// then write bytes array to a file with PDF extension.

如果您在遵循代码时遇到问题,请查看本文中的渲染器示例。

最新更新