我正在使用Apache PDFBox將.pdf文檔轉換爲使用PDFTextStripper的 WinForms C#應用程序中的文本文件。獲取progressBar以顯示PDFTextStripper進度
我發現轉換大約需要30秒才能完成。我想要做的是在C#progressBar中向用戶顯示轉換的進度。
我已經爲程序添加了一個backgroundWorker線程以及事件處理程序。 但是,當我在backgroundWorker1_DoWork中調用PDFTextStripper時,progressBar不會報告任何 進度,直到發生轉換。 (示例代碼如下所示)
任何人都可以提出一個更好的方法來顯示progressBar1中的進度?謝謝。
將我的.pdf文件複製到其位置後,檢查文件是否已成功複製,然後調用轉換方法。
if (File.Exists(@"C:\My PDF Folder\myFile.pdf))
{
string myFile = @"C:\My PDF Folder\myFile.pdf";
Tuple<string> tuple = Tuple.Create(myFile);
backgroundWorker1.RunWorkerAsync(tuple);//convert from .pdf to .txt file.
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 0; i <= 100; i += 20)
{
Tuple<string> tupleArgs = (Tuple<string>)e.Argument;
string myFile = tupleArgs.Item1.ToString();
string tempText = PDFText(myFile);//The PDFTextStripper method
//Report the progress
backgroundWorker1.ReportProgress(i);
SaveFileDialog sfd = new SaveFileDialog();
sfd.FileName = @"C:\My PDF Folder\myFile.txt";
using (Stream s = File.Open(sfd.FileName, FileMode.OpenOrCreate))
using (StreamWriter sw = new StreamWriter(s))
sw.Write(tempText);
}
}
private static String PDFText(String PDFFilePath)
{
PDDocument doc = PDDocument.load(PDFFilePath);
PDFTextStripper stripper = new PDFTextStripper();
string text = stripper.getText(doc);
doc.close();
return text;
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
//Change the value of the ProgressBar to the BackgroundWorker progress.
progressBar1.Value = e.ProgressPercentage;
}
public void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
progressBar1.Value = 0;
}
您好格蘭特。我在轉換之前翻轉了工作人員的ReportProgress並看到一些輕微的視覺改善。 PDFText是Apache PDFBox的文本剝離器,它非常強大。特別是因爲執行轉換需要很長時間,所以我想給用戶一些視覺線索,說明轉換正在幕後進行。不幸的是,用戶在PDF轉換爲文本文件之前仍然不會收到通知。我很欣賞關於使用文件路徑保存文本文件的提示。 – CodeMann 2014-09-24 23:57:12
是的,如果它需要很長時間才能運行,那麼我想你會看到進展的變化,然後一段時間內沒有其他事情會發生。您可能會考慮將ProgressBar上的「樣式」更改爲「選取框」,以便用戶可以指示某事正在發生,然後將百分比顯示在其下的標籤中。 – 2014-09-25 00:24:14
你好格蘭特。這是一個很好的建議,雖然我修改了一下。我離開progressBar樣式爲Block,但添加了一個與ProgressPercentage綁定的標籤,爲用戶提供額外的可視化查詢。我將標籤的文字設置爲顯示百分比。現在,他們可以看到百分比爬升到100%,然後清除。再次感謝。 – CodeMann 2014-09-25 20:45:54