当前位置: 移动技术网 > IT编程>开发语言>PHP > pdf转中文txt

pdf转中文txt

2019年04月14日  | 移动技术网IT编程  | 我要评论

最近项目需要实现根据关键字搜索pdf内容,实现思路就是提取pdf文本,然后进行索引。

工具上选择:

itext 4.16之后采用agpl license,不能用作商用,而且转换中文会有乱码问题,

pdfsharp 采用mit license,权限上没有问题,但是转换中文也会有乱码,

最后决定采用xpdf.

官网地址:

需要下载对应的xpdf包,本人采用的windows x64 版本

此外还要下载中文字符集包:

包准备工作如下:

  1. 在合适目录创建xpdf文件夹
  2. 将下载的包解压并将bin64文件夹下的pdftotext.exe 拷贝到xpdf文件夹下
  3. 解压中文字符集后进入文件夹继续解压xpdf-chinese-simplified.tar,在解压后的xpdf-chinese-simplified文件夹拷贝到xpdf下
  4. 在xpdf文件夹下创建xpdf的字符加载文件xpdfrc
  5. 打开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'

下面再附上工程目录:

 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网