Gestion d'imprimante - options d'impression

Résolu
Maybe68 Messages postés 7 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 9 novembre 2010 - 5 oct. 2010 à 16:12
megayaya Messages postés 8 Date d'inscription jeudi 7 octobre 2010 Statut Membre Dernière intervention 10 novembre 2010 - 10 nov. 2010 à 09:50
Bonjour à tous,

Un petit défi, la gestion des options d'impressions.

TOPO : J'ai développé une application qui doit imprimer des documents de correspondance à des clients. Ces documents sont en format Word et/ou PDF. Les documents PDF contiennent qu'une seule correspondance par document, mais les documents DOC peuvent en contenir plusieurs, donc je doit imprimer seulement une page du document. Naturellement, c'est l'usager qui détermine ce qu'il imprime, généralement il imprime plusieurs correspondances à la fois. Le programme est relativement simple, il fait une boucle dans tous les documents sélectionnés, l'ouvre, imprime la page voulue et le referme, ainsi de suite. Je veux que mon application demande l'imprimante et les options d'impression qu'une seule fois au début.

PROBLÈME : Tout simplement, appliquer l'imprimante et les options d'impression à chaque document à imprimer. Quand je dis les options d'impression, je parle par exemple d'imprimer à partir d'un bac de papier particulier, ou ajouter un filigrane, ou dans une boîte d'usager sur l'imprimante.

ESSAIS : Un windows.forms.printdialog avant la boucle, mais comment faire pour transmettre les options d'impressions au document Word à imprimer. Facile pour dire sur quelle imprimante avec
Word.ActivePrinter = Windows.Forms.PrintDialog.PrinterSettings.PrinterName, mais les options?

ESSAIS : Utiliser Word.Dialog de Word avant la boucle, mais j'ai le même problème avec les documents PDF.

ESSAIS : Définir l'imprimante sélectionnée comme imprimante par défaut du système et modifier les options d'impression sur l'imprimante par défaut du système, ça fonctionne, mais là j'ai un autre problème. Comment remettre les options d'impression d'origine sans l'intervention de l'usager?

ALORS : en cour, comment passer les options d'impression d'un PrintDialog à Word et Acrobat? Ou encore comment backuper les options d'impression de l'imprimante par défaut et les restorer?

Merci!

14 réponses

Maybe68 Messages postés 7 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 9 novembre 2010
12 oct. 2010 à 16:37
J'ai trouvé,

C'est un problème de printui.dll 64 bits qui appel le module TcpMonUi.dll 32 bits qui cause l'erreur. Comme ici http://support.microsoft.com/kb/981070/fr

Alors la solution qui fonctionne, exécuter printui 32 bits qui ce trouve dans C:\Windows\SysWOW64

rundll32 %windir%\syswow64\printui.dll,PrintUIEntry /Sr /n "Imprimante" /a "fichier.dat"

En VB.net ça donne ceci:
      If System.IO.File.Exists(System.Environment.ExpandEnvironmentVariables("%temp%") & "\OptionImpression.dat") Then
        ' Le fichier existe remettre automatiquement les options d'impression 
        'If System.Is64BitOperatingSystem Then  ' Seulement avec FrameWork 4.0 et plus
        If System.IO.Directory.Exists(System.Environment.ExpandEnvironmentVariables("%windir%") & "\SysWOW64") Then
          Shell("rundll32 " & System.Environment.ExpandEnvironmentVariables("%windir%") & "\SysWOW64\printui.dll,PrintUIEntry /Sr /n """ & _NomImprimanteTemporaire & """ /a " & System.Environment.ExpandEnvironmentVariables("%temp%") & """\OptionImpression.dat""", vbNormalFocus)

        Else
          Shell("rundll32 printui.dll,PrintUIEntry /Sr /n """ & _NomImprimanteTemporaire & """ /a " & System.Environment.ExpandEnvironmentVariables("%temp%") & """\OptionImpression.dat""", vbNormalFocus)

        End If
        ' Supprimer le fichier temporaire
        Try
          System.IO.File.Delete(System.Environment.ExpandEnvironmentVariables("%temp%") & "\OptionImpression.dat")
        Catch ex As Exception
          ' Ne rien faire
        End Try

      Else
        ' Impossible de remettre automatiquement les options d'impression, le faire mauellement
        MessageBox.Show("Vous avez préalablement modifié les préférences de l'imprimante " & _NomImprimanteTemporaire & Environment.NewLine & Environment.NewLine & _
                        "Malheureusement il m'est impossible de remettre les préférences originales, vous deverez le faire manuellement avec la fenêtre de préférence qui suit ce message", _
                        "Récupération des options d'impression", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Shell("rundll32 printui.dll,PrintUIEntry /e  /n""" & _NomImprimanteTemporaire & """", vbNormalFocus)

      End If


Benoit
3
megayaya Messages postés 8 Date d'inscription jeudi 7 octobre 2010 Statut Membre Dernière intervention 10 novembre 2010 1
10 nov. 2010 à 09:50
Salut ! alors j'ai fait sur mes 3 imprimante dispos les commandes en DOS :

1) Pour l'imprimante réseau sur laquelle je n'ai pas les droit >>> erreur impossible de terminer l'opération >>> normal !

2)Pour l'imprimante réservée à mon service pour laquelle j'ai les droits >>>
ca marche bien

3)Pour l'imprimante FinePrint (http://en.wikipedia.org/wiki/FinePrint)
Seul les changements sur les propriétés de l'imprimante sont sauvegardés puis restaurés, par les changements d'options d'impression ou l'on peut ajoute ces fameux en-tête qui hantent mes nuits.
1
megayaya Messages postés 8 Date d'inscription jeudi 7 octobre 2010 Statut Membre Dernière intervention 10 novembre 2010 1
7 oct. 2010 à 16:04
Bonjour, alors commençons par la fin je n'ai aucune réponse a tes problème , désole , par contre je viens de commencer le vb depuis une semaine et on me demande justement de, a partir de vb , pourvoir paramétrer l'imprimante par défaut pour créer un nouveau filigrane a l'image du logo d'une société.

Je vois qu'apparemment tu t'es penché sur la question, et si tu pouvais m'aiguiller sur comment depuis vb, en ayant les informations de l'imprimante par défaut, je peux donc créer un filigrane , le paramétrer et l'appliquer, ça serait super.

Merci d'avance,

Yannis
0
Maybe68 Messages postés 7 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 9 novembre 2010
7 oct. 2010 à 21:44
Désolé Yannis, Mais mon application ne cherche pas à paramètrer une imprimante. Mais plutôt à l'usager de choisir les paramètres voulus via un PrintDialog et de les appliquer dans un document Word ou PDF à ouvrir!.

Alors pour le filigrane je ne sais pas!

Si par contre tu veux changer l'imprimante par défaut du système voici un lien du code que j'utilise http://www.planet-source-code.com/URLSEO/vb/scripts/ShowCode!asp/txtCodeId!3053/lngWid!10/anyname.htm

Et pour modifier les options d'impression de l'imprimante par défaut via le pilote de l'imprimante j'utilise :
    Shell("rundll32 printui.dll,PrintUIEntry /e  /n""NomDeLImprimanteParDefaut""", vbNormalFocus)



Et je relance ma question, comment backuper les options d'impression de l'imprimante par défaut et les restorer?



Maybe68
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
megayaya Messages postés 8 Date d'inscription jeudi 7 octobre 2010 Statut Membre Dernière intervention 10 novembre 2010 1
8 oct. 2010 à 11:54
Bien je ne sais pas si ca peut être ca , mais j'ai vu grâce à ton indication qu'il etait possible de sauvegarder les propriétés de l'imprimante dans un fichier .dat, et de la même facon charger les paramètres de l'imprimante via un fichier.

ne pourrais-tu pas :

1) choisir l'imprimante par défault
2) enregistrer ses paramètres initiaux dans le fichier .Dat
3) permettre à l'utilisateur de faire ses modifications
4) faire l'impression
5) restaurer via le fichier les paramètres initiaux via ton .dat
6) hop le tour est jouer?

dans la doc c'est :
Enregistrer tous les paramètres de l'imprimante dans un fichier :
rundll32 printui.dll,PrintUIEntry /Ss /n "imprimante" /a "fichier.dat"

Enregistrer tous les paramètres de l'imprimante à partir d'un fichier :
rundll32 printui.dll,PrintUIEntry /Sr /n "imprimante" /a "fichier.dat"

Enregistrer les informations de niveau 2 de l'imprimante dans un fichier :
rundll32 printui.dll,PrintUIEntry /Ss /n "imprimante" /a "fichier.dat" 2

j'espère que ca peut t'aider car moi pour l'instant je me dirige vers cette solution. >>>par contre je devrais si possible créer les fichiers .dat au préalable avec les filigrane intégrés et les charger directement dans l'imprimante par défault, mais je ne sais pas encore si c'est possible.

En tout cas bonne chance !
0
megayaya Messages postés 8 Date d'inscription jeudi 7 octobre 2010 Statut Membre Dernière intervention 10 novembre 2010 1
11 oct. 2010 à 13:51
en fait je suis au même point que toi, je fais les changements mais je dois backuper après sur cette imprimante..... seulement avec le driver et les lignes que je t'ai posté au dessus, j'ai l'erreur "impossible de terminer l'opération" pour la ligne :
rundll32 printui.dll,PrintUIEntry /Sr /n "imprimante" /a "fichier.dat"
j'ai beau chercher comme un malade la raison de cette erreur , je ne trouve rien de concret qui puisse m'aider.
Tiens moi au courant si tu trouve des solutions !
0
Maybe68 Messages postés 7 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 9 novembre 2010
12 oct. 2010 à 03:00
Merci Yannis, j'avais déjà essayé ces deux fonctions et j'avais la même erreur. Mais j'ai re-tester chez moi en mode DOS et ça fonctionne.

Alors chez moi Un windows 7 32 bits imprimante Brother MFC-5460cn en réseau port TCP-IP, les deux commandes fonctionnent
Au bureau Windows 7 64 bits imprimantes Canon iR-ADV 5035 en réseau port TCP-IP et OKIDATA 6250 en réseau port TCP-IP et ça ne fonctionne pas.

J'ai aussi une Brother MFC-5460cn au bureau mais elle n'est pas encore configuré sur mon poste, j'essai ça demain et je te donne des nouvelles.

Benoit

PS Nous ne sommes pas les seuls : Forum Microsoft
0
megayaya Messages postés 8 Date d'inscription jeudi 7 octobre 2010 Statut Membre Dernière intervention 10 novembre 2010 1
12 oct. 2010 à 13:21
bien vu ton message et j'ai fait pas mal de test , et il semblerait que le message d'erreur "impossible de terminer l'opération" était du au fait que je n'avais pas les droits nécessaire sur l'imprimante pour restaurer les paramètre du coup avec une autre ca passe, mais j'ai encore quelques soucis ^^
je te tiens au courant aussi, et merci pour la piste , c'est grâce a ton message que j'ai pus me diriger vers le problème de droit sur l'imprimante ^^
0
megayaya Messages postés 8 Date d'inscription jeudi 7 octobre 2010 Statut Membre Dernière intervention 10 novembre 2010 1
12 oct. 2010 à 16:45
En fait mon véritable problème était que pour le nom de l'imprimante , je lui envoyais :/n \\serveur\nomImprimante , et j'avais pas les droits sur le serveur.

la je fais juste un /n nomImprimante, en local donc et ca passe sans problèmes.

@+
0
Maybe68 Messages postés 7 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 9 novembre 2010
12 oct. 2010 à 17:13
OK je comprend le problème que tu avais!

Prend quand même note que la commande rundll32 printui.dll,PrintUIEntry /Sr /n "Imprimante" /a "fichier.dat" fonctionne sous un Windows 32 bits et non sur un 64 bits.

Mais que rundll32 %windir%\syswow64\printui.dll,PrintUIEntry /Sr /n "Imprimante" /a "fichier.dat" fonctionne sous Windows 64bits mais pas sur 32 bits.
0
megayaya Messages postés 8 Date d'inscription jeudi 7 octobre 2010 Statut Membre Dernière intervention 10 novembre 2010 1
9 nov. 2010 à 16:12
Salut , je réouvre la discussion en espérant que tu soit toujours la ^^

En fait j'ai un petit problème, je t'avais dis avant que mon problème etait que j'essayais de modifier les options d'impression en passant en paramètre.
une imprimante serveur : /n \\serveur\nomImprimante
j'avais réglé ce problème en passant juste /n nomImprimante.

Le problème est qu'en revenant quelque peu après sans avoir fait de modifications, ce code ne marche plus et il me dit que le /n nomImprimante n'est pas un nom d'imprimante connue.

Je me retrouve plutôt coincé alors si tu avais une idée d'une solution alternative pour contourner ce problème de droit sans poser de réel problème de sécurité, je t'en serais très reconnaissant, car pour l'instant je sèche un peu.

Merci d'avance !
0
Maybe68 Messages postés 7 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 9 novembre 2010
9 nov. 2010 à 16:31
Salut,

Chez nous ont utilise une installation local des imprimantes central avec un port TCP/IP et non un partage d'une imprimante installée sur le serveur. Alors pas de soucis avec la sécurité.

Es-tu sûr du nom de l'imprimante?
Utilises-tu la commande via un écran DOS ou sous VB?

En esperant pourvoir t'aider!
0
megayaya Messages postés 8 Date d'inscription jeudi 7 octobre 2010 Statut Membre Dernière intervention 10 novembre 2010 1
9 nov. 2010 à 16:51
A effectivement tu n'a pas de problème avec la sécurité.

En tout cas merci de répondre si vite , c'est vraiment très agréable.

1) Le nom de l'imprimante j'en suis sur de son nom réseau, du type
\\nomReseau\nomImprimante
Apres au niveau du "nom local" sur lequel je suis censé faire mes modification .... je suis un peu embrouillé ....je mettais simplement nomImprimante et ca marchait...en tout cas dans les propriétés de l'imprimante c'est bien marqué : nomImprimante

2) j'utilise la commande sous VB6.
0
Maybe68 Messages postés 7 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 9 novembre 2010
9 nov. 2010 à 17:37
Test la commande dans une fenêtre DOS

1 - En DOS ' Remplace Canon 5035 par le nom d'une imprimante dans ton système
rundll32 printui.dll,PrintUIEntry /Ss /n "Canon 5035" /a "C:\fichier.dat"

2 - Vérifie que le fichier.dat existe à la racine de ton disque C:

3 - En Windows, modifie les paramètres de l'imprimante en question

4 - En DOS' Remplace Canon 5035 par le nom d'une imprimante dans ton système
rundll32 printui.dll,PrintUIEntry /Sr /n "Canon 5035" /a "C:\fichier.dat"

5 - En Windows, vérifie si les paramètres modifiés en étape 3 sont disparus
0
Rejoignez-nous