求大神们看一个很简单的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双手相送)!
...全文
357 17 打赏 收藏 转发到动态 举报
写回复
用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 应该不是一个完整的路径,所以取不到东西,用断点调试或者输出来看看。
一、Go语言的由来      Go语言亦叫Golong语言,是由谷歌Goggle公司推出。Go语言的主要开发者有:肯.汤姆逊(Ken Thompson)、罗布.派克(Rob Pike)和罗伯特.格里泽默(Robert Griesemer)。这三个都是大神,稍介绍一下他们的贡献:     肯.汤姆逊(Ken Thompson):图灵奖得主,Uinx发明人,B语言作者(C语言前身),还做飞行员,后来被谷歌挖走。     罗布.派克(Rob Pike):Unix团队和Plan 9操作系统计划的成员,与Ken老爷子共事多年,并共创出广泛使用的UTF-8 字元编码。     罗伯特.格里泽默(Robert Griesemer):曾协助制作Java的HotSpot编译器,和Chrome浏览器的JavaScript引擎V8。     膜拜一下大神的容颜:Ken老爷子(左),Rob Pike(右)         二、开发Go语言的初衷     根据Go语言开发者自述,近10多年,从单机时代的C语言到现在互联网时代的Java,都没有令人满意的开发语言,而 C++往往给人的感觉是,花了100%的经历,却只有60%的开发效率,产出比太低,Java和C#的哲学又来源于C++。并且,随着硬件的不断升级,这些语言不能充的利用硬件及CPU。因此,一门高效、简洁、开源的语言诞生了。 三、Go语言的特点    Go语言保证了既能到达静态编译语言的安全和性能,又达到了动态语言开发速度和易维护性,有人形容Go语言:Go = C + Python , 说明Go语言既有C静态语言程序的运行速度,又能达到Python动态语言的快速开发。 Go语言有以下特性: 1.自动垃圾回收     C/C++最头疼的就是指针问题,一不小心就野指针了或者又越界了。在Go语言里再也不用担心,也不用考虑delete或者free,系统自动会回收。 2.函数可以返回多个值     这个很神奇,大多数语言只能返回一个值,Go语言可以返回多个值。这个功能使得开发者再不用绞尽脑汁的想到底怎么返回值的设计,也不用为了传值专门定义一个结构体。 3.并发编程     Go语言天然并发,只需要关键字“go”就可以让函数并发执行,使得并发编程变得更为简单,这也是Go语言最大的优势。 四、Go语言能做什么开发     Go语言是非常有潜力的语言,是因为它的应用场景是目前互联网非常热门的几个领域,比如区块链开发、大型游戏服务端开发、布式/云计算开发。像Goggle、阿里、京东等互联网公司都开始用Go语言开发自己的产品。

110,529

社区成员

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

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

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