2009-08-21 68 views
5

我目前正在編寫一些MATLAB代碼來與我公司的內部報告數據庫進行交互。到目前爲止,我可以使用代碼看起來像這樣訪問HTML摘要頁面:從MATLAB運行JavaScript命令來獲取PDF文件

import com.mathworks.mde.desk.*; 
wb=com.mathworks.mde.webbrowser.WebBrowser.createBrowser; 
wb.setCurrentLocation(ReportURL(8:end)); 
pause(1); 

s={}; 
while isempty(s) 
    s=char(wb.getHtmlText); 
    pause(.1); 
end 
desk=MLDesktop.getInstance; 
desk.removeClient(wb); 

我可以從可變s最終的HTML文本中提取出的各種信息片段,但是,該報告的PDF是通過我認爲是JavaScript命令(onClick =「gotoFulltext('','[Report Number]')」)進行訪問。

關於我如何執行這個JavaScript命令並將PDF文件的內容轉換爲MATLAB變量的任何想法?

(MATLAB坐落在Java之上,所以我相信一個Java的解決方案將工作...)

回答

4

我想你應該看看正被調用的JavaScript,看看到最後的請求webserver看起來像。

您可以在Firefox中使用FireBug插件輕鬆完成此操作。

https://addons.mozilla.org/en-US/firefox/addon/1843

一旦你找到了真正的服務器請求,那麼你可以請求該URL或交至該網址,而不是試圖運行的JavaScript。

+2

PJP公司是唯一明智的做法。你還應該讓內部數據庫的網頁界面開發者取出並拍攝 - 或者至少讓他們瞭解漸進式增強功能;-) – NickFitz 2009-08-21 10:36:39

+0

這看起來很有前途 - 我現在有一個URL可以讓我獲得PDF - 我現在需要做的就是弄清楚如何將它變成一個變量... Firebug相當方便! – 2009-08-21 10:47:20

+0

是的,它非常好。 – pjp 2009-08-21 10:57:22

1

一旦您獲得了正確的URL(a la the answer from pjp),您的下一個問題就是「將PDF文件的內容變爲MATLAB變量」。無論這是可能取決於你所說的「內容」是什麼?


如果你想在PDF文件的原始數據,我不認爲有一種方法目前要在MATLAB中做到這一點。該URLREAD功能是我認爲的閱讀從一個URL的內容轉換爲字符串的第一件事情,但它有本說明文檔中:

s = urlread('url')讀取在URL的內容 到字符串s。如果 服務器返回二進制數據,s將 不可讀。

事實上,如果你試圖閱讀PDF如下面的例子中,s包含一些文本與大部分垃圾混雜:

s = urlread('http://samplepdf.com/sample.pdf'); 

如果你想從文本PDF文件,你有一些選擇。首先,你可以使用URLWRITE到URL的內容保存到一個文件:

urlwrite('http://samplepdf.com/sample.pdf','temp.pdf'); 

那麼你應該能夠使用兩個提交一個關於The MathWorks File Exchange提取從PDF文本:

如果單純要視圖 PDF格式,你可以在Adobe Acrobat與OPEN功能打開:

open('temp.pdf'); 
+0

我目前的問題是,URL需要身份驗證來訪問內容,我無法弄清楚如何通過urlread提供。我相信可能會有使用Java URL對象的路由。 使用上面的webbrowser方法,我可以*看到屏幕上的pdf文檔,這令人沮喪地接近我想要的。來自PDF函數的文本看起來很有用...... – 2009-08-21 18:35:38

+0

「URLREAD」和「URLWRITE」函數允許將可選參數傳遞給它們。您將不得不找出參數名稱用於身份驗證,然後將它們與參數值一起作爲單元數組傳遞。此文檔頁面上出現一個示例:http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_prog/f5-136137.html#f5-136158 – gnovice 2009-08-23 17:59:33

+0

Dimitri Shvorob將PDF文件轉換爲文本的解決方案很好地工作 – 2009-08-24 14:43:42

1
wb=com.mathworks.mde.webbrowser.WebBrowser.createBrowser; 
wb.executeScript('javascript:alert(''Some code from a link'')'); 
desk=com.mathworks.mde.desk.MLDesktop.getInstance; 
desk.removeClient(wb);