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

4/5 (6 avis)

Snippet vu 18 025 fois - Téléchargée 32 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
-
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
-
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
-
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
-
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
-
oui mais je n'est pas rouver d'autre moyen... si tu en voie un je suis preneur!

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.