求大神们看一个很简单的pdf转txt的c#编程实现问题(100分)

liuqinglei6666 2009-09-24 05:19:37
小弟最近在做pdf转txt的程序,用了pdfbox,效果不错,但效率不行,用了itextsharp,效果不行,然后就又试了下面程序中的xpdf,这个程序效果和效率都相当牛X,但是却不能集成到一个多控件的应用程序中,不多说了,直接看代码:
第一段代码运行正常:

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显示为空,我看了老半天都不知道到底错在哪里?为什么上面好好的输出到下面这程序中就得不到了呢?

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双手相送)!
...全文
381 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
qjw9004 2012-08-08
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]
谢谢11楼和12楼的两位大神,正如两位大神所说,我把filename中的空格替换成\" \"后,程序就完美运行了,在dos窗口下运行的程序参数中不能有空格,以后我要切记这些小细节!话不多说了,直接结帖给分
[/Quote]

能否分享一下源码来学学呢?我的QQ号:191971159
panzhaojl 2009-09-25
  • 打赏
  • 举报
回复
我帮你搜了N久都没有找到一个好点的例子,只好狂顶了。 希望有高手给你解决这问题。
zxkid 2009-09-25
  • 打赏
  • 举报
回复
1) 检查filename是否存在空格,有的话需要用单引号括起来
2) 命令提示符下 直接执行DOS你选择的pdf文件 是否有错误
happyboyxq 2009-09-25
  • 打赏
  • 举报
回复
p.StartInfo.Arguments 参数不能出现空格,你的filename是否存在空格呢?如果有空格就需要转换一下了。
liuqinglei6666 2009-09-25
  • 打赏
  • 举报
回复
谢谢11楼和12楼的两位大神,正如两位大神所说,我把filename中的空格替换成\" \"后,程序就完美运行了,在dos窗口下运行的程序参数中不能有空格,以后我要切记这些小细节!话不多说了,直接结帖给分
wx23990915 2009-09-25
  • 打赏
  • 举报
回复
我也只能帮顶了,对这方面没有研究
liuqinglei6666 2009-09-25
  • 打赏
  • 举报
回复
感激楼上几位好哥们儿
wxhysoftsodc 2009-09-24
  • 打赏
  • 举报
回复
收藏
nlcbook 2009-09-24
  • 打赏
  • 举报
回复
是不是。exe的调用问题啊?
shadow_2006 2009-09-24
  • 打赏
  • 举报
回复
ding
zhanlang9075 2009-09-24
  • 打赏
  • 举报
回复
楼主好[Quote=引用 6 楼 redleafe 的回复:]
不懂,帮顶。
[/Quote]
redleafe 2009-09-24
  • 打赏
  • 举报
回复
不懂,帮顶。
liuqinglei6666 2009-09-24
  • 打赏
  • 举报
回复
初步找到问题是第一段程序的进程p的ExitCode为0,而第二段程序的进程p的ExitCode为99,
可是为什么第二段程序的进程p没有好好执行呢?
liuqinglei6666 2009-09-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mingxingxia 的回复:]
注意,用打开文件对话框时获得的只是文件名并非路径

[/Quote]
恩,谢谢,可是我做word转txt程序的时候也是用的打开文件对话框,传的也是filename,textBox1中可以得到完整的转化过后的txt,现在的困惑是如果我单独运行第一段代码没有问题,第二段就有了问题,我是想把html,word,pdf转txt集成起来
liuqinglei6666 2009-09-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wzq6511 的回复:]
应该是filename 的问题,这里取的filename 应该不是一个完整的路径,所以取不到东西,用断点调试或者输出来看看。
[/Quote]
我本来也以为是filename的问题,可是调试的时候看到filename的名字是完整的,所以问题应该不是出在这里
mingxingxia 2009-09-24
  • 打赏
  • 举报
回复
注意,用打开文件对话框时获得的只是文件名并非路径
wzq6511 2009-09-24
  • 打赏
  • 举报
回复
应该是filename 的问题,这里取的filename 应该不是一个完整的路径,所以取不到东西,用断点调试或者输出来看看。

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧