虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > Delphi编程 > Delphi提取PDF文本实例

Delphi提取PDF文本实例
类别:Delphi编程   作者:码皇   来源:互联网   点击:

下面小编就为大家带来一篇Delphi提取PDF文本实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

生成PDF的控件很多,但解析的不是太多,pdf Toolkit可以,但测试的第一个复杂的pdf就报告错误,并且汉字乱码,可能使用的版本或使用方法不对。

想起之前使用java调用的Apache名下的pdfBox库很好用,于是就用下载了pdfBox,使用Delphi来调用pdfBox解析pdf文本。

环境要求:java运行环境

pdfBox应用包:pdfbox-app-2.0.6.jar

这里使用了DOS命令行来解析,然后调用解析结果。

首先是执行DOS命令:

    procedure CheckResult(b: Boolean);
    begin if not b then raise Exception.Create(SysErrorMessage(GetLastError));
    end;
    function RunDOS(const CommandLine: string): string;
    var HRead, HWrite: THandle;
    StartInfo: TStartupInfo;
    ProceInfo: TProcessInformation;
    b: Boolean;
    sa: TSecurityAttributes;
    inS: THandleStream;
    sRet: TStrings;
    begin Result := '';
    FillChar(sa, sizeof(sa), 0);
    //设置允许继承,否则在NT和2000下无法取得输出结果 sa.nLength := sizeof(sa);
    sa.bInheritHandle := True;
    sa.lpSecurityDescriptor := nil;
    b := CreatePipe(HRead, HWrite, @sa, 0);
    CheckResult(b);
    FillChar(StartInfo, SizeOf(StartInfo), 0);
    StartInfo.cb := SizeOf(StartInfo);
    StartInfo.wShowWindow := SW_HIDE;
    //使用指定的句柄作为标准输入输出的文件句柄,使用指定的显示方式 StartInfo.dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
    StartInfo.hStdError := HWrite;
    StartInfo.hStdInput := GetStdHandle(STD_INPUT_HANDLE);
    //HRead;
    StartInfo.hStdOutput := HWrite;
    b := CreateProcess(nil, //lpApplicationName: PChar PChar(CommandLine), //lpCommandLine: PChar nil, //lpProcessAttributes: PSecurityAttributes nil, //lpThreadAttributes: PSecurityAttributes True, //bInheritHandles: BOOL CREATE_NEW_CONSOLE, nil, nil, StartInfo, ProceInfo);
    CheckResult(b);
    WaitForSingleObject(ProceInfo.hProcess, INFINITE);
    inS := THandleStream.Create(HRead);
    if inS.Size > 0 then begin sRet := TStringList.Create;
    sRet.LoadFromStream(inS);
    Result := sRet.Text;
    sRet.Free;
    end;
    inS.Free;
    CloseHandle(HRead);
    CloseHandle(HWrite);
    end;

然后调用显示:

    function TfrmPDFTool.GetPDFText(sFile: string): string;
    var cmd:string;
    pdfFilePath,pdfFileName,txtFileName:String;
    begin //java -jar pdfbox-app-2.0.6.jar ExtractText -encoding utf-8 e:\temp\test.pdf e:\temp\testiii.txt pdfFilePath:=ExtractFilePath(sFile);
    pdfFileName:=ExtractFileName(sFile);
    txtFileName:=FAppPath+'Temp'+pdfFileName+'.txt';
    cmd:='java -jar '+FAppPath+'PDFBoxpdfbox-app-2.0.6.jar ExtractText ' +' -encoding utf-8 '+sFile +' '+txtFileName;
    AddLog(cmd);
    Result:=RunDOS(cmd);
    AddLog(Result);
    memTxtFile.Lines.LoadFromFile(txtFileName,TUTF8Encoding.Create);
    FPDFText:=memTxtFile.Text;
    AddLog(FPDFText);
    end;

OK,大功告成!

以上这篇Delphi提取PDF文本实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关热词搜索: Delphi提取PDF文本