2010-03-05 7 views
4

Je fais la génération de lettre avec iText (pdf/rtf) dans le servlet java et j'ai eu un problème avec l'accès aux images. Les images se trouvent dans le dossier WebContent/images. Lorsque je l'exécute sur un serveur local et que je pointe le chemin complet du répertoire images (c: //eclipse/myproject/WebContent/images/letterHead.jpg), il fonctionne, mais il ne fonctionne pas sur le serveur avec le répertoire ("WebContent/images/letterHead.jpg ").iText image dans le servlet java

Le projet est déployé en tant WAR sur un serveur tomcat, ainsi se retrouver avec une adresse similaire à

http://someserver:8081/projectName/someJSP.jsp 

Je ne comprends pas comment référencer les images relativement dans cet environnement, et toute aide serait très apprécié.

Voici mon code

Image imghead = Image.getInstance("WebContent/images/letterHead.jpg"); 
imghead.setAbsolutePosition(35,770); 
imghead.scaleAbsolute(125, 42); 
document.add(imghead); 

Répondre

12

Vous ne devez jamais utiliser des chemins relatifs à java.io choses. Vous dépendez du répertoire de travail actuel qui n'est en aucun cas contrôlable dans le cas d'une application Web. Utilisez toujours absolu chemins de système de fichiers disque. Ainsi, c:/full/path/to/file.ext.

Vous pouvez utiliser ServletContext#getRealPath() pour convertir un chemin Web relatif en un chemin de système de fichiers de disque absolu. Le chemin Web relatif est basé sur le dossier webcontent public qui est dans votre cas /WebContent. Ainsi, vous devez remplacer la première ligne de code ci-dessus par:

String relativeWebPath = "/images/letterHead.jpg"; 
String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath); 
Image imghead = Image.getInstance(absoluteDiskPath); 
// ... 
+0

Il fonctionne parfaitement! Merci beaucoup. – Jon

0

Le code suivant peut être utilisé pour accéder au chemin d'image dans une classe java.

URL imageUrl = getClass().getProtectionDomain().getCodeSource().getLocation(); 
Image img=Image.getInstance(imageurl+"../../../some/images/pic.gif");  
1

Après morceau de code peut vous aider ...

String path = request.getContextPath(); 
String split_path[] = path.split("/"); 
path = request.getRealPath(split_path[0]); 
String imagePath="\\resources\\images\\letterHead.jpg"; 
Image image = Image.getInstance(path+imagePath); 
0

donc j'ai eu le même problème, je voulais ajouter une image au format pdf, mais par un chemin relatif, alors quand je fait un programme exécutable, il fonctionnerait dans n'importe quel ordinateur, même si elle avait ou non l'image enregistrée.

J'ai trouvé un moyen d'ajouter l'image en tant que ressource de votre application. Vous avez besoin de mettre l'image dans le répertoire src ou le répertoire de la classe où vous l'appelez et vous pouvez utiliser le code suivant:

Image image = Image.getInstance(yourClassName.class.getResource("/yourImageName"))); 

Si vous mettez l'image dans un dossier, puis, de toute évidence, vous ll faut ajouter le chemin à travers le nom du dossier ("folderName/yourImageName"). J'espère que cela aide!

-1

Resources

Image foto = Image.getInstance(this.getClass().getResource("/static/img/gobierno.jpg"));