2009-08-21 5 views
5

Attualmente sto scrivendo del codice MATLAB per interagire con il database dei report interni della mia azienda. Finora mi possibile accedere alla pagina astratto HTML utilizzando il codice che è simile al seguente:Esecuzione di un comando JavaScript da MATLAB per recuperare un file 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); 

posso estrarre fuori vari pezzi di informazioni dal testo HTML che finisce nella variabile s, tuttavia il PDF della relazione è accessibile tramite quello che ritengo sia un comando JavaScript (onClick = "gotoFulltext ('', '[Numero rapporto]')").

Qualche idea su come eseguire questo comando JavaScript e ottenere il contenuto del file PDF in una variabile MATLAB?

(MATLAB si trova sulla cima di Java, quindi credo che una soluzione Java avrebbe funzionato ...)

risposta

4

penso che si dovrebbe dare un'occhiata alla JavaScript che viene chiamato e vedere quello che la richiesta finale alla sembra un server web.

Si può fare abbastanza facilmente in Firefox usando il plugin FireBug.

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

Una volta trovata la richiesta server reale, allora si può solo richiedere questo URL o post per questo URL invece di cercare di eseguire il codice JavaScript.

+2

PJP di è l'unico approccio ragionevole. Dovresti anche avere lo sviluppatore dell'interfaccia web nel database interno estratto e sparato - o almeno dirgli di imparare il miglioramento progressivo ;-) – NickFitz

+0

Questo sembra un percorso molto promettente - Ora ho un URL che mi porta il PDF - tutto quello che devo fare ora è capire come inserirlo in una variabile ... Firebug è piuttosto utile! –

+0

Sì, è carino. – pjp

1

Una volta ottenuto l'URL corretto (a la the answer from pjp), il tuo prossimo problema è "ottenere il contenuto del file PDF in una variabile MATLAB". Se questo è possibile, può dipendere da cosa si intende per "contenuti" ...


Se si desidera ottenere i dati grezzi nel file PDF, non credo che ci sia un modo attualmente per farlo in MATLAB. La funzione URLREAD è stata la prima cosa che ho pensato di leggere il contenuto da un URL in una stringa, ma ha questa nota nella documentazione:

s = urlread('url') legge il contenuto ad un URL nella stringa s. Se il server restituisce dati binari, s sarà illeggibile.

In effetti, se si tenta di leggere un PDF come nel seguente esempio, s contiene del testo intermediato con la maggior parte dei rifiuti:

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

Se si desidera ottenere il testo dal PDF file, hai alcune opzioni.In primo luogo, è possibile utilizzare URLWRITE per salvare il contenuto della URL di un file:

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

allora si dovrebbe essere in grado di utilizzare uno dei due mezzi su The MathWorks File Exchange per estrarre il testo dal PDF:

Se semplicemente vogliono vista il PDF, si può solo aprirlo in Adobe Acrobat con la funzione OPEN:

open('temp.pdf'); 
+0

Il mio problema al momento è che l'URL richiede l'autenticazione per accedere ai contenuti e non riesco a capire come fornirlo tramite urlread. Credo che ci possa essere una rotta usando un oggetto URL Java. Usando il metodo del browser web sopra, posso * vedere * il documento pdf sullo schermo, che è frustrantemente vicino a quello che voglio. Il testo delle funzioni PDF sembra utile ... –

+0

Le funzioni 'URLREAD' e' URLWRITE' consentono di passare a loro i parametri facoltativi. Dovresti scoprire quali sono i nomi dei parametri per l'autenticazione, quindi passarli insieme ai valori dei parametri come array di celle. Un esempio appare in questa pagina di documentazione: http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_prog/f5-136137.html#f5-136158 – gnovice

+0

La soluzione di Dimitri Shvorob per convertire il file PDF in testo funziona bene –

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);