Impression d'un fichier rtf ou doc en tache de fond

Soyez le premier à donner votre avis sur cette source.

Snippet vu 18 645 fois - Téléchargée 34 fois

Contenu du snippet

Bonjour,
Ce code va vous permetre d'imprimer un Fichier RTF ou DOC.
Mais avant cela il va faloir vous munire d'une librairie gratuite.
http://danadler.com/jacob/
Cette librairie va vous permettre d'utilisé les ocx de windows, et dans mon cas celle de word.
Aller sur ce amusé vous bien!

Source / Exemple :


import javax.print.PrintService;
import javax.print.PrintServiceLookup;

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;

/*

  • Created on 23 févr. 2005
*
  • TODO Imprime un fichier RTF ou DOC en tache de fond
  • /
/**
  • @author Waldo2188
*
  • /
public class ImpressionRTF { public static void main(String[] args) { String Chemin = "c:\\monDossier\\MonDocRtfOuDoc.rtf"; // initialisation du composant ActiveX de Word ActiveXComponent Wd = new ActiveXComponent("word.Application"); //Récupération de l'impprimante pas défaut PrintService service = PrintServiceLookup.lookupDefaultPrintService(); //fait tourner word en tache de fond Wd.setProperty("Visible", new Variant(false)); //empèche des l'affichage de message à louverture du fichier Wd.setProperty("DisplayAlerts", new Variant(false)); //définition du type de document Object Doc = Wd.getProperty("Documents").toDispatch(); //ouverture du fichier désigné par le chemin Object doc = Dispatch.call(Doc, "Open", Chemin).toDispatch(); //récupération du Dispatch du document actif Object mydoc = Dispatch.get(Wd, "ActiveDocument").toDispatch(); //deffinition de l'impression Dispatch.put(Wd, "ActivePrinter", service.getName()); //impression du document Variant t = new Variant(true); Variant f = new Variant(false); Dispatch.callN(mydoc, "PrintOut", new Variant[] {t}); try { //le tread dort pendant 3min afin que word puisse charger les fichiers en impression //3mimute c'est pour le gros fichier environ 130pages Thread.sleep(240000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } //fermeture silentieuse de word Variant toto =new Variant(false); Wd.invoke("Quit", new Variant[] {toto}); System.out.println("c'est bon c'est fermé!"); } }

A voir également

Ajouter un commentaire Commentaires
cs_mariam1987 Messages postés 20 Date d'inscription vendredi 29 février 2008 Statut Membre Dernière intervention 21 août 2010
12 mai 2008 à 09:22
salut,
j'ai un pb avec l'ocx jacob.dll j'arrive pas a le faire entre dans la base de registre je fait :

regsvr32 C:\WINDOWS\system32\jacob.dll

il affiche qu'il a etait chargé mais ne trouve pas le point d'entrée a DllRegistreServer, je ne comprend riens.

aide !!
merci.
patchaq Messages postés 1 Date d'inscription jeudi 6 janvier 2005 Statut Membre Dernière intervention 10 juillet 2007
10 juil. 2007 à 08:47
Bonjour,

J'ai un petit pb lors de la définition du type de document :
Object Doc = Wd.getProperty("Documents").toDispatch();

Exception levée :
com.jacob.com.ComFailException: A COM exception has been encountered:
At Invoke of: Documents
Description: An unknown COM error has occured.
at com.jacob.com.Dispatch.invokev(Native Method)
at com.jacob.activeX.ActiveXComponent.getProperty(ActiveXComponent.java)

Je pense que cela vient de l'enregistrement de la dll jacob.dll, je pense qu'elle n'est pas enregistrée correctement, car lorsque j'essaie de l'enregistrer j'ai le message d'erreur suivant :
"jacob.dll a été chargé mais le point d'entrée DllRegisterServer est introuvable"

Je désespére un peu, quelqu'un aurait-il une solution ???

Par avance merci
cs_sgamier Messages postés 3 Date d'inscription mercredi 12 février 2003 Statut Membre Dernière intervention 20 février 2008
14 juin 2006 à 10:22
Merci pour la source ... je m'en suis bien inspiré.

Une petite chose ... plutot que d'attendre 3 min on peut remplacé le code
try {
//le tread dort pendant 3min afin que word puisse charger les fichiers en impression
//3mimute c'est pour le gros fichier environ 130pages
Thread.sleep(240000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

par celui ci :
for (int done 1; done > 0; done Dispatch.get(Wd, "BackgroundPrintingStatus").toInt())
{
try
{Thread.sleep(500);
}catch (InterruptedException e){
e.printStackTrace();
}
System.out.println("Je dors...");
}
System.out.println("Je me réveille...");
cs_Waldo2188 Messages postés 142 Date d'inscription jeudi 12 février 2004 Statut Membre Dernière intervention 20 mai 2008
2 mars 2005 à 10:50
Je pense à une autre solution, c'est de la bidouille, mais ca doit marcher.
Bon le truck c'est de passer le RTF en PDF avec une librairie qui s'appel iText (je crois) puis d'imprimer le pdf!
c'est une autre solution.
cs_Waldo2188 Messages postés 142 Date d'inscription jeudi 12 février 2004 Statut Membre Dernière intervention 20 mai 2008
24 févr. 2005 à 21:05
oui mais je n'est pas rouver d'autre moyen... si tu en voie un je suis preneur!
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.