pdf转中文txt
程序员文章站
2022-06-25 13:09:44
最近项目需要实现根据关键字搜索pdf内容,实现思路就是提取pdf文本,然后进行索引。 工具上选择: IText 4.16之后采用agpl License,不能用作商用,而且转换中文会有乱码问题, pdfsharp 采用MIT License,权限上没有问题,但是转换中文也会有乱码, 最后决定采用xp ......
最近项目需要实现根据关键字搜索pdf内容,实现思路就是提取pdf文本,然后进行索引。
工具上选择:
itext 4.16之后采用agpl license,不能用作商用,而且转换中文会有乱码问题,
pdfsharp 采用mit license,权限上没有问题,但是转换中文也会有乱码,
最后决定采用xpdf.
官网地址:
需要下载对应的xpdf包,本人采用的windows x64 版本
此外还要下载中文字符集包:
包准备工作如下:
- 在合适目录创建xpdf文件夹
- 将下载的包解压并将bin64文件夹下的pdftotext.exe 拷贝到xpdf文件夹下
- 解压中文字符集后进入文件夹继续解压xpdf-chinese-simplified.tar,在解压后的xpdf-chinese-simplified文件夹拷贝到xpdf下
- 在xpdf文件夹下创建xpdf的字符加载文件xpdfrc
- 打开xpdf文件夹下的子文件chinese-simplified里的add-to-xpdfrc,将里面内容copy到xpdfrc
将xpdf文件夹copy到项目合适位置实现功能,这里只演示单个文件的转换工作,本人是将xpdf访问asp.mvc启动工程的根目录下进行测试的(文件路径有空格一定要加双引号)
1 public actionresult search(string keyword) 2 { 3 var roopath = server.mappath("~/"); 4 processstartinfo startinfo = new processstartinfo 5 { 6 useshellexecute = false, 7 windowstyle = processwindowstyle.normal, 8 redirectstandardinput = true, 9 redirectstandardoutput = true, 10 redirectstandarderror = true, 11 createnowindow = false, 12 workingdirectory = string.format("{0}xpdf", roopath), 13 //filename = string.format("{0}xpdf\\pdftotext.exe", roopath) 14 filename ="cmd.exe" 15 }; 16 //pdftotext.exe -layout -enc gbk 你不知道的javascript(下卷).pdf 17 var arguments = string.format("/c pdftotext.exe -layout -enc gbk \"{1}\" \"{2}\"", roopath, roopath + @"xpdf\1.pdf", roopath + @"xpdf\javascript.txt"); 18 //var arguments = string.format(@"{0}1.pdf", roopath); 19 startinfo.arguments = arguments; 20 var ss = string.empty; 21 22 using (process process = process.start(startinfo)) 23 { 24 25 process.outputdatareceived += new datareceivedeventhandler((object sender, datareceivedeventargs e) => 26 { 27 ss += e.data; 28 }); 29 process.beginoutputreadline(); 30 using (var error = process.standarderror) 31 { 32 ss += error.readtoend(); 33 } 34 //等待退出 35 process.waitforexit(); 36 } 37 38 return json(ss, jsonrequestbehavior.allowget); 39 }
error 可能会有报字体的错误,但不影响转换,可以忽略:
syntax error: unknown character collection 'dyna-hk1'
syntax error: unknown character collection 'dyna-hk1'
下面再附上工程目录: