c#中利用xpdf提取pdf文檔中文本內容的一個小麻煩(100分)


小弟最近在做pdf轉txt的程序,用的是xpdf中的xpdftotext.exe(相當於外部程序),遇到了一些麻煩,昨天發過一張帖,在zxkid和panzhaojl兩位大神的鋒利目光下解決了一個小麻煩,在這里先謝過兩位大神了。可是還有一個問題,小弟也冥思苦想了N久都不得其解,在這里繼續發出來勞煩各位大神幫下忙,在下感激不盡,感激不盡,還是一如既往的100分拱手相送,廢話不多說了,還是直接看代碼:

   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";//選擇pdf文件
            if (ofdlg.ShowDialog() == DialogResult.OK)
            {
                filename = string.Format("{0}", ofdlg.FileName);
            }            
        }
      //傳送打開文件對話框中得到的filename來做為外部程序的參數來做轉化
        private void button2_Click(object sender, EventArgs e)
        {
            Process p = new Process();
            string path = "pdftotext.exe"; //進程啟用外部程序
                            //這個exe我放在debug文件夾下面        
            p.StartInfo.FileName = path;
            p.StartInfo.Arguments = string.Format( filename + " -");//很怪異的一行
                                  //參數“-”表示可以得到輸出流
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardInput = true;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.RedirectStandardError = true;
            p.StartInfo.CreateNoWindow = true;
            
            p.Start();
            string s = p.StandardOutput.ReadToEnd();//得到pdf文檔中的文本內容
            textBox1.Text = s; 
            p.Close();
        }
    }
}

上面的程序運行后,如果是在Debug文件夾下的pdf文件就可以得到輸出,可是如果在打開文件對話框中打開我桌面上的一個pdf如:@"d:\我的文檔\test.pdf",輸出就會是空,但是如果把上面那怪異的一行改為:

p.StartInfo.Arguments = string.Format( @"d:\我的文檔\test.pdf" + " -");

程序就又會得到輸出。
我想了很久也沒有辦法解決,各位大神們銳利的目光接招吧,幫在下瞅上兩眼,感激不盡,感激不盡,僅有分100雙手相送!

8 个解决方案

#1


幫頂。沒用過XPDF

#2


下斷點 看看你傳的參數filename 是什么

#3


文件路徑不對,你調試下看看,應該是取得文件的路徑而不是文件名

#4


引用 3 樓 superman_ 的回復:
文件路徑不對,你調試下看看,應該是取得文件的路徑而不是文件名

我調試了幾次,確實是取得了一個完整的文件名,就是也能得到如:d:\\我的文檔\\test.pdf這樣的filename

#5


我下載了一個測試了一下。好像沒有問題啊。
我的代碼,在你的基礎上作了小修改。就是在文件名兩邊加上"",防止路徑中有空格。
但是你測試的路徑沒有空格,因此應該不是這個原因。

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";//選擇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"; //進程啟用外部程序
            //這個exe我放在debug文件夾下面        
            p.StartInfo.FileName = path;
            p.StartInfo.Arguments = string.Format("\"" + filename +"\"" + " -");//很怪異的一行
            //參數“-”表示可以得到輸出流
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardInput = true;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.RedirectStandardError = true;
            p.StartInfo.CreateNoWindow = true;

            p.Start();
            string s = p.StandardOutput.ReadToEnd();//得到pdf文檔中的文本內容
            textBox1.Text = s;
            p.Close();

        }
    }

#6


奇怪本來想標示成紅色的。

#7


呵呵,謝謝樓上的兄台,下載的xpdf中xpdftotext.exe用到的配置文件xpdfrc需要手動配置,我如果把那些字體啊,什么的映射成絕對路徑下的文件,就不會出現上面的問題,但是我把配置文件中的路徑改成了相對路徑,於是就出現了上面的問題了,看兄台能夠很輕易的就運行成功,一定是做過很多代碼的,這里還得勞煩兄台再給看一下,幫下忙,能遇到一個大神不容易,大神可不能吝嗇啊,先謝過了哈

#8


提取不了中文呀

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com