日期:2014-05-18  浏览次数:20942 次

求大神们看一个很简单的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文件 是否有错误