Newsgroup: it.comp.java
Titolo: Accessing a PDF Document with the Acrobat Viewer JavaBean

Da acrobat.jar
import com.adobe.acrobat.*;
 
Viewer viewer = new Viewer();
mi da java.lang.NoClassDefFoundError
 
Perchè?
 
https://today.java.net/pub/a/today/2005/10/20/accessing-pdf-with-acrobat-viewer-javabean.html
 
-- 
Gulp®
--
"Partimque figuras retulit antiquas, partim nova monstra creavit."
(La Metamorfosi - Ovidio)


L'errore java.lang.NoClassDefFoundError in genere riporta anche il nome 
della classe non trovata.
La causa banale potrebbe essere che non hai aggiunto acrobat.jar nel 
classpath dell'applicazione.

 nel classpath dell'applicazione
 
Dopo aver postato ho continuato a cercare in internet e ti confermo che 
ho trovato qualcosa in questo senso.
Dove trovo la classpath dell'applicazione e come posso impostare il 
percorso ?



Quando lanci l'applicazione vedi usare il comando:
java (o javaw) -cp acrobat.jar;applicazione.jar package.nomeclassemain 
(senza .class)
oppure
java (o javaw) -jar applicazione.jar
in questo ultimo caso nel jar ci deve essere il manifest, ovvero il file:
META-INF/MANIFEST.MF
 
che deve contenere anche le righe:
Manifest-Version: 1.0
Main-Class: package.nomeclassemain
Class-Path: acrobat.jar
 
dove package.nomeclassemain e' il nome della classe che conrìtiene il 
metodo main completa del suo package, quello che si dice Fully qualified 
class name.
Class-Path: contiene la lista dei jar separati da uno spazio, 
eventualmente corredati dalla directory in cui si trovano relativa alla 
directory che include il jar della tua applicazione. Ad esempio, se la 
directory dell'applicazione si chiama "app":
 
app\applicazione.jar
app\lib\acrobat.jar
 
allora nel file MANIFEST.MF la riga del classpath dovra' essere:
 
Class-Path: lib/acrobat.jar
 
 

 META-INF/MANIFEST.MF
 
Tieni presente che, al momento, non ho ancora compilato l'applicazione 
la lancio da Netbeans.
L'unico file MANIFEST.MF che ho trovato si trova dentro alla directory 
dell'applicazione (MiaApp) ed ha solo questo testo:
 
Manifest-Version: 1.0
X-COMMENT: Main-Class will be added automatically by build
 
che seguendo il tuo suggerimento ho cambiato così:
 
Manifest-Version: 1.0
X-COMMENT: Main-Class will be added automatically by build
Class-Path: MiaApp\acrobat.jar
 
Ma continua a presentarsi l'errore:
java.lang.NoClassDefFoundError: com/apple/mrj/MRJAboutHandler
 
Il riferimento di riga mi rimanda a:
Viewer viewer= new Viewer();


 dell'applicazione (MiaApp) ed ha solo questo testo:
In tal caso il manifest c'entra poco, ovvero serve solo per il build.
Putroppo non utilizzo NetBeans e non so come si fa', ma ci dev'essere un 
modo per aggiungere dei jar all'applicazione. In eclipse, che uso io, 
c'e' una voce nel menu contestuale del progetto (che si ottiene 
clikkando destro sulla cartella del progetto) che permette di modificare 
il "Build Path", che determina il classpath risultante dopo il build. 
Immagino che anche in NetBeans ci sia qualcosa di analogo.
Ti segnalo inoltre, che mi sembra che acrobat.jar sia un componente a 
pagamento di Adobe, per cui potrebbe essere che ci sia un qualche limite 
di utilizzo, ad esempio un funzionamento a tempo, oppure un limite sulle 
pagine visualizzabili, informati.
Comunque c'e' un open source gratuito molto flessibile, quello che uso 
io, che si chiama ICE PDF Viewer lo trovi qui:
http://www.icesoft.org/java/projects/ICEpdf/overview.jsf
 


 java.lang.NoClassDefFoundError: com/apple/mrj/MRJAboutHandler
 
Ti manca il jar che contiene MRJAboutHandler, probabilmente 
MRJToolkitStubs-1.0.jar
Prova ad aggiungere questo al classpath 
http://www.findjar.com/jar/mrj/MRJToolkitStubs/1.0/MRJToolkitStubs-1.0.jar.html
 
 
Saluti
CarMas
 


 
Cioè così?:
 
Manifest-Version: 1.0
X-COMMENT: Main-Class will be added automatically by build
Class-Path: 
http://www.findjar.com/jar/mrj/MRJToolkitStubs/1.0/MRJToolkitStubs-1.0.jar.html
 


 
http://www.findjar.com/jar/mrj/MRJToolkitStubs/1.0/MRJToolkitStubs-1.0.jar.html
 
 
LOL :) Ti sta suggerendo di aggiungere il .jar, NON il link alla pagina.
Ti ha detto che ti manca una classe contenuta nel .jar. 
 

 
http://www.icesoft.org/java/projects/ICEpdf/overview.jsf
 
 
Ti ringrazio. 
 
 
 
---
Questa e-mail e stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus
 
 


No, nel manifest non puoi mettere un url, ma un percorso relativo. 
Inoltre, come avrai notato, l'url si riferisce ad una pagina html, dal 
quale scaricare il jar effettivo.

 
http://www.icesoft.org/java/projects/ICEpdf/overview.jsf
 
 
E' possibile con installazione adeguata avere disponibile il componente 
nella palette del design di Netbeans? Come dovrei fare? Ho scaricato la 
seguente directory:
 
ICEpdf-6.0.0-P01-bin
 
Se non è possibile quanto sopra, installo normalmente nelle librerie 
disponibili, come faccio sempre i file *.jar, in particolare:
 
icepdf-viewer.jar
icepdf-core.jar



Non lo so, come ti dicevo non uso NetBeans.
In ogni caso l'icepdf-viewer e' abbastanza semplice da utilizzare. 
Considera che alla fine della fiera si tratta di aggiungere un JPanel 
alla tua frame.
I metodo fondamentali sono questi:
SwingController viewController = new SwingController();
URL pdfviewerProperties = 
getClass().getClassLoader().getResource("pdfviewer.properties");
PropertiesManager propertiesManager = new 
PropertiesManager(System.getProperties(),
	pdfviewerProperties .getPath(), null);
SwingViewBuilder viewBuilder =
	new SwingViewBuilder(viewController , propertiesManager);
JPanel viewerPanel = viewBuilder.buildViewerPanel();
File pdfFile = new File("documento.pdf")
URL pdfDocument = pdfFile.toURI().toURL();
viewController.openDocument(pdfDocument);
 
Il file pdfviewer.properties (che nell'esempio sopra si da' per certo 
che si trovi nel classPath) contiene tutte le proprieta' per 
visualizzare il pdf, compresi gli switch per mostrare i vari tools del 
viewer.
il file pdfFile (che nell'esempio sopra si da' per certo che si trovi 
nella directory corrente) potrebbe in relta' essere ricavato facilmente 
con un JFileChooser che e' un componente molto semplice da utilizzare.
Considerando che gli oggetti del viewer non cambiano mai, potresti 
incapsularli in metodi singletone, ad esempio:
private SwingController getViewController() {
   if (viewController == null)
     viewController = new SwingController();
   return viewController;
}
private PropertiesManager getPropertiesManager() {
  if (propertiesManager == null {
   URL pdfviewerProperties = getClass().getClassLoader()
     .getResource("pdfviewer.properties");
   propertiesManager = new PropertiesManager(System.getProperties(),
       pdfviewerProperties.getPath(), null);
  }
  return propertiesManager;
}
private SwingViewBuilder getViewBuilder() {
   if (viewBuilder == null)
     viewBuilder = new SwingViewBuilder(getViewController(),
       getPropertiesManager());
   return viewBuilder;
}
 
Se dai un'occhiata alla documentazione qui 
https://docs.oracle.com/javase/7/docs/api/javax/swing/JFileChooser.html
 
c'e' un esempio semplice semplice che adattato al tuo caso diventa:
 
private URL getpdfDocument() {
     JFileChooser chooser = new JFileChooser();
     URL pdfDocument = null;
     FileNameExtensionFilter filter = new FileNameExtensionFilter("pdf");
     chooser.setFileFilter(filter);
     int returnVal = chooser.showOpenDialog(parent);
     if(returnVal == JFileChooser.APPROVE_OPTION) {
        pdfDocument = chooser.getSelectedFile().toURI().toURL();
     }
     return pdfDocument;
}
 
per cui, nell'esempio sopra diventa:
 
URL pdfDocument = getpdfDocument();
if (pdfDocument != null) {
    JPanel viewerPanel = getViewBuilder().buildViewerPanel();
    container.add(viewerPanel);
    getViewController().openDocument(pdfDocument);
}
 
 

> icepdf-core.jar
Dimenticavo, se i tuoi pdf contengono oggetti complessi (come immagini o 
componenti vettoriali), al tuo classpath potresti aggiungere anche:
batik-awt-util.jar
batik-dom.jar
batik-svg-dom.jar
batik-svggen.jar
batik-util.jar
batik-xml.jar
jai_codec.jar
jai_core.jar
soprattutto gli ultimi due velocizzano di molto la visualizzazione delle 
immagini. Se l'icepdf-viewer li trova, allora li usa, altrimenti fa come 
puo'.
 
 

 jai_core.jar
 
Ora ho aggiunto anche questi, gli altri li avevo già messi.
Grazie per gli esempi di codice.
Questo Viewer è veramente OK.


Il 12/11/15 10:16, Dr.UgoGagliardelli ha scritto:
 
Il lancio del file non provoca alcun errore, ma viene visualizzato il 
seguente messaggio nella console:
 
org.icepdf.core.pobjects.Document <clinit>
AVVERTENZA: PDF write support was not found on the class path
nov 12, 2015 5:17:48 PM org.icepdf.core.pobjects.Catalog <clinit>
INFORMAZIONI: ICEsoft ICEpdf Core 6.0.0 P01
 
Problemi? Devo fare qualcosa?


Il 12/11/15 10:16, Dr.UgoGagliardelli ha scritto:
 
Ugo, mi daresti un consiglio su questo libro?
 
Manuale di Java 8, Claudio de Sio Cesari (Hoepli)
 
Lo conosci? E' abbordabile?
A me interessa che non dia per scontate troppe cose.
Per un principiante è troppa roba o può andar bene?



No, sta facendo pubblicita', se vuoi anche scriverli i pdf, devi 
comprare qualcosa dalla ICESoft.
 


Non saprei, non lo conosco.


Benvenuto nel magico mondo del "gia' fatto, pronto all'uso".
Il contrario di reinventarsi la ruota ogni volta.

 qualcosa dalla ICESoft.
 
Per quello usi iText. :)
 
 
 
---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus