求大神们看一个很简单的pdf转txt的c#编程实现问题(100分)
小弟最近在做pdf转txt的程序,用了pdfbox,效果不错,但效率不行,用了itextsharp,效果不行,然后就又试了下面程序中的xpdf,这个程序效果和效率都相当牛X,但是却不能集成到一个多控件的应用程序中,不多说了,直接看代码:
第一段代码运行正常:
- C# code
namespace 利用xpdf提取pcf文档的txt{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string path = "pdftotext.exe";//这是debug包 //下的exe,利用它来做转化得到输出 string filename = @"d:\我的文档\桌面\test.pdf";//这是一个pdf文件 //得用process类启动外部程序 Process p = new Process(); p.StartInfo.FileName = path; p.StartInfo.Arguments = string.Format("-nopgbrk " + filename + " -") ;//pdftoexe执行所需的参数, //nopgbrk表示没有分页标记, //“-”表示直接得到流输出 p.StartInfo.UseShellExecute = false; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.RedirectStandardError = true; p.StartInfo.CreateNoWindow = true; p.Start(); //输出到textBox1中 textBox1.Text=p.StandardOutput.ReadToEnd(); p.Close(); } }}
同样的代码只做了下面这一点修改,就得不到输出了,调试的时候textBox1.Text显示为空,我看了老半天都不知道到底错在哪里?为什么上面好好的输出到下面这程序中就得不到了呢?
- C# code
namespace 利用xpdf提取pcf文档的txt{ public partial class Form1 : Form { public OpenFileDialog ofdlg = new OpenFileDialog();//多了一个打开文件对话框 public string filename; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { ofdlg.Filter = "pdf文件(*.pdf)|*.pdf"; if (ofdlg.ShowDialog() == DialogResult.OK) { filename = string.Format("{0}", ofdlg.FileName); } } private void button2_Click(object sender, EventArgs e) { Process p = new Process(); string path = "pdftotext.exe"; p.StartInfo.FileName = path; p.StartInfo.Arguments = string.Format("-nopgbrk " + filename + " -");//调试的时候,看到filename的 //值是正常的 Console.WriteLine(string.Format("-nopgbrk " + filename + " -")); p.StartInfo.UseShellExecute = false; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.RedirectStandardError = true; p.StartInfo.CreateNoWindow = true;//同样的程序同样的参数 p.Start(); textBox1.Text = p.StandardOutput.ReadToEnd(); p.Close(); } }}
小弟很是郁闷,不知道是哪方面出了问题,是线程之间的通信还是什么,望各位大神们能稍微抽出点点时间,解在下心中困惑,在下感激不尽,感激不尽(只有分100双手相送)!
[解决办法]
p.StartInfo.Arguments 参数不能出现空格,你的filename是否存在空格呢?如果有空格就需要转换一下了。
[解决办法]
1) 检查filename是否存在空格,有的话需要用单引号括起来
2) 命令提示符下 直接执行DOS你选择的pdf文件 是否有错误