請問使用pdf元件,呼叫另存文字檔的函式或是秀出他的功能列 |
尚未結案
|
qubeley2004
一般會員 發表:52 回覆:71 積分:24 註冊:2004-07-13 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
qubeley2004 您好: 我也沒有找到 AcroPDF 元件另存文字檔的功能,不過您可以試試透過剪貼板的方式來儲存資料,您原來的那一篇:
請問使用AcroPDF.dll這個原件是否有全選複製的函式?
http://delphi.ktop.com.tw/topic.php?topic_id=71519
應該已經能夠做到 "全選" 的動作了,如果您確認該動作不會發生其它的例外狀況,那麼您可以接著再設法將全選的資料複製到剪貼板內,然後再將剪貼板內的資料複製到一個具備儲存功能的暫存物件去,這樣子應該就可以達到您要的動作了,這裡給您一個例子參考一下:
// 以下敘述接續在完成 "全選" 資料之後... // 我用下列這一行來代替您原先模擬送出按下 Ctrl-C 鍵的動作 SendMessage(AcroPDF1->Handle, WM_COPY, 0, 0); TMemo *ed = new TMemo(AcroPDF1); ed->Parent = this; SendMessage(ed->Handle, WM_PASTE, 0, 0); ed->Lines->SaveToFile("c:\\temp.txt"); delete ed;試試看吧。 |
qubeley2004
一般會員 發表:52 回覆:71 積分:24 註冊:2004-07-13 發送簡訊給我 |
引言: qubeley2004 您好: 我也沒有找到 AcroPDF 元件另存文字檔的功能,不過您可以試試透過剪貼板的方式來儲存資料,您原來的那一篇: 請問使用AcroPDF.dll這個原件是否有全選複製的函式? http://delphi.ktop.com.tw/topic.php?topic_id=71519 應該已經能夠做到 "全選" 的動作了,如果您確認該動作不會發生其它的例外狀況,那麼您可以接著再設法將全選的資料複製到剪貼板內,然後再將剪貼板內的資料複製到一個具備儲存功能的暫存物件去,這樣子應該就可以達到您要的動作了,這裡給您一個例子參考一下:是的...我已經試過了這樣的方法..不過問題在於... 對於有些pdf檔案,譬如頁數很多的時候.. 他就會顯示出錯誤...還是這個有方法可以解決呢?_? 不知道為什麼pdf6不會出現功能選項,而pdf7卻可以..// 以下敘述接續在完成 "全選" 資料之後... // 我用下列這一行來代替您原先模擬送出按下 Ctrl-C 鍵的動作 SendMessage(AcroPDF1->Handle, WM_COPY, 0, 0); TMemo *ed = new TMemo(AcroPDF1); ed->Parent = this; SendMessage(ed->Handle, WM_PASTE, 0, 0); ed->Lines->SaveToFile("c:\\temp.txt"); delete ed;試試看吧。 |
qubeley2004
一般會員 發表:52 回覆:71 積分:24 註冊:2004-07-13 發送簡訊給我 |
引言: qubeley2004 您好: 我也沒有找到 AcroPDF 元件另存文字檔的功能,不過您可以試試透過剪貼板的方式來儲存資料,您原來的那一篇: 請問使用AcroPDF.dll這個原件是否有全選複製的函式? http://delphi.ktop.com.tw/topic.php?topic_id=71519 應該已經能夠做到 "全選" 的動作了,如果您確認該動作不會發生其它的例外狀況,那麼您可以接著再設法將全選的資料複製到剪貼板內,然後再將剪貼板內的資料複製到一個具備儲存功能的暫存物件去,這樣子應該就可以達到您要的動作了,這裡給您一個例子參考一下:唔..對了// 以下敘述接續在完成 "全選" 資料之後... // 我用下列這一行來代替您原先模擬送出按下 Ctrl-C 鍵的動作 SendMessage(AcroPDF1->Handle, WM_COPY, 0, 0); TMemo *ed = new TMemo(AcroPDF1); ed->Parent = this; SendMessage(ed->Handle, WM_PASTE, 0, 0); ed->Lines->SaveToFile("c:\\temp.txt"); delete ed;試試看吧。 SendMessage(AcroPDF1->Handle, WM_COPY, 0, 0);此行不會有所動作說..剪貼簿的內容還是相同的.. |
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
qubeley2004 您好: 我使用的是 7.0 的 AcroPDF.dll (雖然有功能選項,卻一樣沒有看到您說的另存文字檔選項),測試的 .pdf 檔案約為 5.6MB 共 462 頁,我原先的測試都 OK,剛才看到您的回應後,又再做過測試,這次很奇怪,編譯程式執行後,第一次的複製沒問題,儲存的結果僅有那個被載入 .pdf 的檔案名稱,我未退出程式,直接再做一次複製 儲存的動作,結果就可以了,之後我再重新編譯程式執行,都是一次就 OK 了,儲存後的文字檔約為 839KB,您參考一下。
|
qubeley2004
一般會員 發表:52 回覆:71 積分:24 註冊:2004-07-13 發送簡訊給我 |
引言: qubeley2004 您好: 我使用的是 7.0 的 AcroPDF.dll (雖然有功能選項,卻一樣沒有看到您說的另存文字檔選項),測試的 .pdf 檔案約為 5.6MB 共 462 頁,我原先的測試都 OK,剛才看到您的回應後,又再做過測試,這次很奇怪,編譯程式執行後,第一次的複製沒問題,儲存的結果僅有那個被載入 .pdf 的檔案名稱,我未退出程式,直接再做一次複製 儲存的動作,結果就可以了,之後我再重新編譯程式執行,都是一次就 OK 了,儲存後的文字檔約為 839KB,您參考一下。 唔...奇怪的是...我用您的程式碼...結果沒有複製到呢..... 我改用Memo測試後也是相同不會複製到Memo的內文,還是之前剪貼簿的東西可是我什麼也沒有改變說... < class="code"> void __fastcall TForm1::Button1Click(TObject *Sender) { SendMessage(Memo1->Handle, WM_COPY, 0, 0); TMemo *ed = new TMemo(Memo1); ed->Parent = this; SendMessage(ed->Handle, WM_PASTE, 0, 0); ed->Lines->SaveToFile("c:\\temp.txt"); delete ed; } 這是我的程式碼..不過卻沒有複製到memo裡面的文字... 難道是見鬼了= =? |
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
qubeley2004 您好: 呵呵呵~您是不是漏看了這一句? // 以下敘述接續在完成 "全選" 資料之後... 換句話講,前面的 "全選" 動作我省略掉沒有貼上來,因為那個動作您已經知道了,所以我就偷了個懶,沒想到您也偷了懶....,那就難怪囉~
void __fastcall TForm1::Button1Click(TObject *Sender) { ::SetFocus(AcroPDF1->Handle); keybd_event(VK_CONTROL, 0, 0, 0); // 按下 Ctrl keybd_event(65, 0, 0, 0); // 按下 A Sleep(10); keybd_event(65, 0, KEYEVENTF_KEYUP, 0); // 放開 A keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0); // 放開 Ctrl Sleep(10); /* keybd_event(VK_CONTROL, 0, 0, 0); // 按下 Ctrl keybd_event(67, 0, 0, 0); // 按下 C keybd_event(67, 0, KEYEVENTF_KEYUP, 0); // 放開 C keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0); // 放開 Ctrl Sleep(10); */ SendMessage(AcroPDF1->Handle,WM_COPY,0,0); TMemo *ed = new TMemo(AcroPDF1); ed->Parent = this; SendMessage(ed->Handle,WM_PASTE,0,0); ed->Lines->SaveToFile("c:\\tmp\\pdf.txt"); delete ed; }咦~您貼上來的敘述與我原先貼上來的並不一樣喔,請再仔細比對看看。 另外請您要注意一下,我使用 Memo 物件僅是做為範例而已,如果這個動作使用在 Windows 9x 的環境下時,將無法複製超過 64KB 的資料。 發表人 - RedSnow 於 2005/06/13 00:47:55 |
qubeley2004
一般會員 發表:52 回覆:71 積分:24 註冊:2004-07-13 發送簡訊給我 |
嗯~我後來也改成用Pdf7了 不過奇怪的是,看了您的程式碼也自己試了一段時間 發現您的程式碼到我的這邊依然不行使用... 個別試了之後結果如下
::SetFocus(AcroPDF1->Handle);此行會變成沒有效果,因為連全選的動作都沒有出現 改成AcroPDF1->SetFocurs();之後可以 但是沒有複製到其內容= =a 也就是 SendMessage(AcroPDF1->Handle,WM_COPY,0,0);此行沒有動作... 換成 keybd_event(VK_CONTROL, 0, 0, 0); // 按下 Ctrl keybd_event(67, 0, 0, 0); // 按下 C keybd_event(67, 0, KEYEVENTF_KEYUP, 0); // 放開 C keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0); // 放開 Ctrl Sleep(10);就會複製到 可是做後存到文字檔的那個動作結束後去看文字檔..沒有任何的改變= =a 這就不知道為什麼了 SendMessage的用法好像變成失效一樣.. 不過還是可以換成別的用法去儲存文字檔~ 依然很感謝您的幫忙 |
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
qubeley2004 您好: 不知道您現在使用的還是不是您倒數第二篇所貼出來的那種設定方式?我有提醒您,我們的設定有不一樣之處,您最好再檢查一下,以下紅色標示的地方是不同之處:
您的 Code: .... 這裡漏了一段 (您大概是剪貼時漏掉的,實際測試的程式碼應該不會漏這一段,不過這不是我要講的差異處,差異處在下方) .... SendMessage(Memo1->Handle, WM_COPY, 0, 0); TMemo *ed = new TMemo(Memo1); ed->Parent = this; SendMessage(ed->Handle, WM_PASTE, 0, 0); ed->Lines->SaveToFile("c:\\temp.txt"); delete ed; 我的 Code: ::SetFocus(AcroPDF1->Handle); keybd_event(VK_CONTROL, 0, 0, 0); keybd_event(65, 0, 0, 0); Sleep(10); keybd_event(65, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0); Sleep(10); SendMessage(AcroPDF1->Handle,WM_COPY,0,0); TMemo *ed = new TMemo(AcroPDF1); ed->Parent = this; SendMessage(ed->Handle,WM_PASTE,0,0); ed->Lines->SaveToFile("c:\\temp.txt"); delete ed;如果您的設定方式仍與上述所貼的一樣,那麼請您改成我的設定方式試試看 (雖然有點奇怪,但我也是多方測試後,才設成這樣的,因為設成這樣之後,我就可以複製與儲存文字資料了),如果仍舊不行的話,那我也沒輒了,我真的不知道為何我這邊可以複製存檔,而您那邊卻不能....,總之;祝您好運~ |
qubeley2004
一般會員 發表:52 回覆:71 積分:24 註冊:2004-07-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |