2009-08-21 8 views
5

Je suis en train d'écrire du code MATLAB pour interagir avec la base de données de rapports internes de mon entreprise. Jusqu'à présent, je peux accéder à la page du résumé HTML en utilisant le code qui ressemble à ceci:Exécution d'une commande JavaScript de MATLAB pour récupérer un fichier 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); 

Je peux en extraire différents bits d'information du texte HTML qui se termine dans la s variable mais le PDF du rapport est accédé via ce que je crois est une commande JavaScript (onClick = "gotoFulltext ('', '[Numéro de rapport]')").

Des idées sur la façon dont j'exécute cette commande JavaScript et obtenir le contenu du fichier PDF dans une variable MATLAB?

(Matlab se trouve au sommet de Java, donc je crois qu'une solution Java fonctionnerait ...)

Répondre

4

Je pense que vous devriez jeter un oeil à la JavaScript qui est appelé et voir ce que la demande finale au webserver ressemble à

Vous pouvez le faire assez facilement dans Firefox en utilisant le plugin FireBug.

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

Une fois que vous avez trouvé la demande réelle de serveur, vous pouvez simplement demander cette URL ou la poste à cette URL au lieu d'essayer d'exécuter le JavaScript.

+2

est la seule approche sensible de PJP. Vous devriez également avoir le développeur de l'interface Web à la base de données interne sorti et tiré - ou au moins leur dire d'en savoir plus sur l'amélioration progressive ;-) – NickFitz

+0

Cela semble un chemin très prometteur - J'ai maintenant une URL qui me donne le PDF - Tout ce que je dois faire maintenant, c'est trouver comment l'obtenir dans une variable ... Firebug est plutôt pratique! –

+0

Oui c'est plutôt sympa. – pjp

1

Une fois que vous avez obtenu l'URL correcte (un la the answer from pjp), votre prochain problème est de "obtenir le contenu du fichier PDF dans une variable MATLAB". Si oui ou non cela est possible peut dépendre de ce que vous entendez par « contenu » ...


Si vous souhaitez obtenir les données brutes dans le fichier PDF, je ne pense pas qu'il y ait un moyen actuellement pour le faire dans MATLAB. La fonction URLREAD était la première chose que je pensais à lire le contenu d'une URL dans une chaîne, mais il a cette note dans la documentation:

s = urlread('url') lit le contenu à une URL dans la chaîne s. Si le serveur renvoie des données binaires, s sera illisible.

En effet, si vous essayez de lire un fichier PDF comme dans l'exemple suivant, s contient un texte entremêlés avec la plupart des déchets:

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

Si vous souhaitez obtenir le texte de la Fichier PDF, vous avez quelques options.Tout d'abord, vous pouvez utiliser URLWRITE pour enregistrer le contenu de l'URL d'un fichier:

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

alors vous devriez être en mesure d'utiliser l'une des deux observations sur The MathWorks File Exchange pour extraire le texte du PDF:

Si vous simplement veulent vue le PDF, il vous suffit de l'ouvrir dans Adobe Acrobat avec la fonction OPEN:

open('temp.pdf'); 
+0

Mon problème pour le moment est que l'URL nécessite une authentification pour accéder au contenu, et je ne peux pas savoir comment le fournir via urlread. Je crois qu'il pourrait y avoir une route utilisant un objet URL Java. En utilisant la méthode webbrowser ci-dessus, je peux * voir * le document pdf à l'écran, ce qui est frustrant près de ce que je veux. Le texte des fonctions PDF semble utile ... –

+0

Les fonctions 'URLREAD' et' URLWRITE' permettent de leur passer des paramètres optionnels. Vous devez trouver les noms des paramètres pour l'authentification, puis les transmettre avec les valeurs des paramètres sous la forme d'un tableau de cellules. Un exemple apparaît sur cette page de documentation: http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_prog/f5-136137.html#f5-136158 – gnovice

+0

La solution de Dimitri Shvorob pour convertir le fichier PDF en texte fonctionne bien –

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