Imprimante virtuelle indirecte pour élèves

Résolu/Fermé
lenainjaune Messages postés 616 Date d'inscription mercredi 7 mai 2008 Statut Contributeur Dernière intervention 25 avril 2024 - 5 juil. 2010 à 13:44
lenainjaune Messages postés 616 Date d'inscription mercredi 7 mai 2008 Statut Contributeur Dernière intervention 25 avril 2024 - 9 janv. 2012 à 21:58
Bonjour à tous,

Je suis TICE dans un centre de formation, et je voudrais créer une imprimante virtuelle, pour que les élèves puissent imprimer ... mais pas directement !

Je m'explique. Pour des raisons évidentes, les imprimantes de l'établissement sont inaccessibles aux élèves : gaspillage, qui imprime quoi, contenus contrôlés avant impression définitive, etc. Aussi seuls les formateurs peuvent imprimer. L'élève vient voir le formateur et lui dis : "Tu peux m'imprimer le document xxx qui se trouve dans le dossier yyy ...". Sauf que bien souvent xxx et yyy sont très approximatifs, voire erronés ; les élèves ne se souviennent plus comment ils ont nommé le document et où ils l'ont enregistré, quand ils ne se trompent pas de lecteur (un lecteur réseau leur est individuellement attribué) ou qu'ils enregistrent par mégarde sur leur clef USB ... Bref ! Perte de temps, énervements inutiles de leur part et de la mienne ("Ben si je suis sûr de l'avoir enregistré là ..." "Et moi je te dis que non !"), etc.

Mon idée:
Une imprimante virtuelle du style pdfcreator, qui se contenterait de copier le document à imprimer et de le coller dans un partage réseau quelconque, ce document serait renommé pour indiquer l'élève qui a initié cette impression, le nom du document, un ordre d'impression, date-heure, la salle depuis laquelle l'impression a été initiée, etc. Ainsi le formateur ne poserait pas de question méta-physique pour retrouver ce satané document, et l'élève pourrait poursuivre son travail (... et tout serait pour le mieux dans le meilleur des mondes ...)

En outre, cette imprimante gérerait les doublons inutiles dans le partage (l'élève qui s'acharne sur le bouton imprimer ne doit pas saturer le partage) et bien sûr supprimerait le document une fois imprimé. J'ajouterais que le formateur pourrait faire une dernière vérification, et forcer l'impression en Noir par exemple ...

Vous m'avez suivi ???

Existe il un logiciel prévu pour ça (gratuit si possible - open-source serait le must) ? Si ça n'existe pas dans quelle direction partir ? Script ? Programmation en API, C/C++/Java, autre ... ? Dépendances ? Peut être ce procédé existe déjà sous une autre forme ...

Petite précision:
Je ne veux pas que cette imprimante soit locale à une application (je pense aux macros VB) mais bien considérée comme une imprimante à part entière, pour que n'importe quel logiciel puisse imprimer comme pdfcreator ...

Ah j'oubliais ! Mon réseau est sous domaine Active Directory (Windows 2003 server) et les postes clients sont en Windows XP Pro ...

J'attends avec impatience vos réponses pour voir la faisabilité de ce projet ...

cordialement
lnj



A voir également:

4 réponses

lenainjaune Messages postés 616 Date d'inscription mercredi 7 mai 2008 Statut Contributeur Dernière intervention 25 avril 2024 47
7 juil. 2010 à 13:26
Personne n'a d'idée ?
0
lenainjaune Messages postés 616 Date d'inscription mercredi 7 mai 2008 Statut Contributeur Dernière intervention 25 avril 2024 47
10 juil. 2010 à 04:12
Hello,
Bon ... le projet chemine ... (et pas grand monde pour m'aider ...)

En analysant les sources de PDFCreator ( https://www.pdfforge.org/pdfcreator/download ), j'ai constaté que la redirection était effectuée par le programme redmon ( http://pages.cs.wisc.edu/~ghost/redmon/ ). J'ai donc installé redmon ( https://www.softpedia.com/get/System/System-Miscellaneous/RedMon.shtml#download ), créé une nouvelle imprimante sur un port redirigé (avec le driver Apple Color LaserWriter 12/600), fait un bête script batch qui attend 2 arguments (voir dessous), dans les propriétés du port depuis le champ "Redirect this port ..." j'ai justement redirigé vers le script batch en fournissant les 2 arguments "%REDMON_USER%" et "%REDMON_DOCNAME%" (respectivement le nom d'utilisateur et le nom du fichier à imprimer)

Script batch :
echo %~1_[%~2] > c:\test_ok.txt

NB : le script ne peut rien afficher en tant que tel => redirection vers fichier

Et ça marche très bien ... sauf que je n'ai pas trouvé le moyen de transmettre le chemin du fichier à imprimer ; REDMON_DOCNAME fournit juste le nom du fichier.

Si quelqu'un a l'expérience de redmon pour m'aider à avancer ... ce serait bien cool !

cordialement
lnj
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 685
10 juil. 2010 à 09:36
Bonjour,

Ton projet est très séduisant et je ne doute pas que tu vas arriver à le réaliser mais il est très spécifique et c'est pour cela que nous ne pouvons que te soutenir moralement.
0
lenainjaune Messages postés 616 Date d'inscription mercredi 7 mai 2008 Statut Contributeur Dernière intervention 25 avril 2024 47
10 juil. 2010 à 12:32
Ton projet est très séduisant et je ne doute pas que tu vas arriver à le réaliser 


Merci pour le soutien ... même s'il n'est que moral ...

Du coup j'ai une idée qui me tarabuste depuis cette nuit : modifier les sources de PDFCreator (à la rigueur juste ajouter une variable d'environnement qui donne le chemin du fichier à imprimer), recompiler ... et faire ma propre version (unofficial of course!!!).

Mais bon je ne sais pas trop dans quelle voie je m'engage, je sais avec ma maigre expérience que compiler un projet ne marche jamais vraiment comme sur des roulettes (il manque toujours le truc qui fait tout fonctionner, ou le paramétrage adéquat).

Bref que du bonheur en perspective ....
0
lenainjaune Messages postés 616 Date d'inscription mercredi 7 mai 2008 Statut Contributeur Dernière intervention 25 avril 2024 47
Modifié par lenainjaune le 9/01/2012 à 19:19
'lu

Je repassais par là par hasard ... ça faisait longtemps ...

Comme gbinforme l'avait signalé (10 juil. 2010 à 09:36), j'ai finalement réussi !

Mais j'ai complètement revu la technique et j'ai laissé tomber PDFCreator et redmon !

Et comme les connaissances ne servent que si elles sont partagées, je propose de laisser le résultat de mon travail. De plus, je vais pouvoir clore le topic !

-------------------------------------------------------------------------------

- SOMMAIRE -

LA PROBLÉMATIQUE
COMMENT CA MARCHE ?
-= Mise en garde =-
-= Conditions =-
-= Fournitures =-
-= Explications =-
-= Pourquoi restreindre l'accès avec un lecteur réseau ? =-
-= Avantages =-
-= Inconvénients =-
CODES
INSTALLATION
UTILISATION
CONCLUSION

-------------------------------------------------------------------------------

LA PROBLÉMATIQUE

Je suis ex-TICE, et je voulais créer une imprimante virtuelle, pour que les élèves puissent imprimer ... mais pas directement !

Je m'explique. Pour des raisons évidentes, les imprimantes de l'établissement sont inaccessibles aux élèves : gaspillage, qui imprime quoi, contenus contrôlés avant impression définitive, etc. Aussi seuls les formateurs peuvent imprimer. L'élève vient voir le formateur et lui dis : "Tu peux m'imprimer le document xxx qui se trouve dans le dossier yyy ...". Sauf que bien souvent xxx et yyy sont très approximatifs, voire erronés ; les élèves ne se souviennent plus comment ils ont nommé le document et où ils l'ont enregistré, quand ils ne se trompent pas de lecteur (un lecteur réseau leur est individuellement attribué) ou qu'ils enregistrent par mégarde sur leur clef USB ... Bref ! Perte de temps, énervements inutiles de leur part et de la mienne ("Ben si je suis sûr de l'avoir enregistré là ..." "Et moi je te dis que non !"), etc.

Mon idée:
Une imprimante virtuelle du style pdfcreator, qui se contenterait de copier le document à imprimer et de le coller dans un partage réseau quelconque, ce document serait renommé pour indiquer l'élève qui a initié cette impression, le nom du document, un ordre d'impression, date-heure, la salle depuis laquelle l'impression a été initiée, etc. Ainsi le formateur ne poserait pas de question méta-physique pour retrouver ce satané document, et l'élève pourrait poursuivre son travail (... et tout serait pour le mieux dans le meilleur des mondes ...)

En outre, cette imprimante gérerait les doublons inutiles dans le partage (l'élève qui s'acharne ne doit pas saturer le partage). J'ajouterais que le formateur pourrait faire une dernière vérification, et forcer l'impression en Noir par exemple ...


-------------------------------------------------------------------------------


COMMENT ÇA MARCHE ?

En gros, on utilise un script VBS pour créer un raccourci du document à imprimer. Ce raccourci est créé dans un dossier partagé, et le responsable des impressions n'a plus qu'à imprimer depuis ce dossier.

En gros, l'utilisateur fait clic-droit sur le document à imprimer, il sélectionne "Envoyer pour imprimer", ce qui exécute un script VBS pour créer un raccourci du document à imprimer. Ce raccourci est créé dans un dossier partagé, et le responsable des impressions n'a plus qu'à imprimer depuis ce dossier.


-= Mise en garde =-

Cette technique a répondu avec succès à mes besoins. Je ne garantis pas qu'elle réponde à vos besoins. Ceci étant, si votre besoin est différent, vous pouvez toujours modifier le script et/ou les autres documents.

En tout cas, il n'y a aucune garantie que ça fonctionne pour vous, vous voilà prévenu !


-= Conditions =-

Cette technique a été mis en oeuvre avec succès dans les environnements suivants :
- serveur de fichier : Windows 2003 Server
- clients : Windows XP Pro


-= Fournitures (voir plus bas leurs contenus) =-

- sendDoc.vbs : moteur imprimante
- config.xml : configuration du script (à placer dans le dossier de sendDoc.vbs)
- deploy.reg : déploiement sur postes clients


-= Explications =-

Depuis le poste serveur Windows 2003 server :
- sendDoc.vbs crée un raccourci vers le document à imprimer (la copie ne pourra se faire que si le document est accédé depuis un lecteur réseau).Ce script devra être accessible pour tout le monde et en lecture seule. Ce script sera lié au fichier de configuration config.xml (lecture seule et accessible à tous), qui donnera le chemin du dossier caché a_imprimer.
- Un dossier caché a_imprimer (lecture/écriture et accessible à tous), où seront stockés les raccourcis des documents à imprimer. Un raccourci est nommé comme ceci : nom de l'utilisateur qui a demandé l'impression suivi du nom du document ciblé.
- Les dossiers utilisateurs. On devra impérativement utiliser des lecteurs réseaux depuis les postes clients, pour accéder à ces dossiers.

Remarque : le dossier caché a_imprimer est accessible en lecture, donc un utilisateur futé peut lire son contenu, mais ça s'arrête là, vu qu'il n'a pas les droits de lecture sur le document créé par un autre utilisateur !

Depuis un poste client sous domaine Active Directory :
- Un nouvel élément dans le menu contextuel, relatif à tous les documents : -= Envoyer pour imprimer =- ; cet élément appelle le script sendDoc.vbs
- Au moins un lecteur réseau, pour accéder aux documents utilisateurs (obligatoire)


-= Pourquoi restreindre l'accès avec un lecteur réseau ? =-

Pour contraindre l'utilisateur à ne pas enregistrer sur le bureau par exemple. Fonctionnant en profils itinérants standards, si un utilisateur enregistre dans son profil, cet enregistrement sera dupliqué sur chaque poste visité, et cela va rapidement poser des problèmes en terme de stockage, mais aussi de débit réseau. Je sais qu'il existe des techniques pour rediriger le bureau, mais j'ai choisi de ne pas le faire. Si vous le souhaitez vous pouvez enlever cette restriction.

-= Avantages =-

- simple à mettre en place et léger,
- accessible par tous les utilisateurs du poste client,
- documents à imprimer centralisés et indiquent le nom de celui qui a demandé l'impression,
- pas de copie inutile de documents sur le réseau,
- pas de contrainte sur les mises à jour du document (on est synchronisé),
- possibilité de modifier le document par double-clic,
- pas de suppression accidentelle potentielle d'un document (seulement de son raccourci),
- le plus important à mon avis : on se fiche éperdument du nom donné au document, ou de son emplacement réel, puisqu'on y accède par un raccourci !

-= Inconvénients =-

- pas de multi-envoi possible, mais seulement un document à la fois,
- pas de multi-impression possible avec des raccourcis (en tout cas je n'ai pas trouvé de solution) ; si on tente de multi-sélectionner plusieurs documents, seul le premier document sera imprimé, les autres seront ignorés !

-------------------------------------------------------------------------------

CODES

Copier/coller les contenus des documents ci-dessous, en les nommant correctement et en les adaptant au besoin !

deploy.reg (remplacer <nom_serveur> par le nom du serveur et <dossier_partage> par le nom du dossier partagé)
Windows Registry Editor Version 5.00

; a executer sur tous les postes clients au deploiement
[HKEY_CLASSES_ROOT\*\shell\-= Envoyer pour imprimer =-\Command]
@="wscript \"\\\\<nom_serveur>\\<dossier_partage>$\\sendDoc.vbs\" \"%1\""


Remarque : comme c'est la partie commune à tous les clients, et qu'elle n'est pas centralisée, il convient de choisir ju-di-cieu-se-ment le libellé, sinon il faudra refaire le déploiement. Changer au besoin le nom de la clé du registre (dans mon cas : -= Envoyer pour imprimer =-)

----

sendDoc.vbs
' sendDoc v 1.2
' script pour permettre aux eleves d'envoyer un document au formateur
' LNJ 21:11 06/09/2011

Dim fichier, cheminFichier, nomFichier, user, lecteursReseaux, cheminCible
Dim cheminUNCUtilisateur
Dim fso, lnk, shell, colDiskDrives, shellProcessEnv, xmlConfig
Const FloppyDisc = 1, FixedDrive = 2, NetworkDrive = 3


Set shell = WScript.CreateObject("WScript.Shell")
Set fso = WScript.CreateObject("Scripting.FileSystemObject")

' Le script necessite un unique parametre
' NB : vu qu'on ne peut selectionner n fichiers, le script sera lance n fois, donc ne pas indiquer d'erreur !
If WScript.Arguments.Count <> 1 Then
  WScript.Quit()  
End If

fichier = WScript.Arguments(0)

' On lit la configuration depuis le dossier du script
' https://baptiste-wicht.developpez.com/tutoriels/microsoft/vbscript/xml/xpath/
Set xmlConfig = CreateObject("Microsoft.XMLDOM")
xmlConfig.Async = False
xmlConfig.Load(fso.GetParentFolderName(WScript.ScriptFullName) & "/config.xml")
cheminCible = xmlConfig.selectSingleNode("/data/configuration/chemin_cible").text
Set xmlConfig = Nothing


' On separe le chemin, du nom
cheminFichier = Mid(fichier, 1, InStrRev(fichier, "\"))
nomFichier = Right(fichier, Len(fichier) - InStrRev(fichier, "\"))


' On recupere le nom de l'utilisateur
' https://vb.developpez.com/faq/vbs
Set shellProcessEnv = shell.Environment("Process") 
user = shellProcessEnv("USERNAME")
Set shellProcessEnv = Nothing



' On verifie si la source est enregistree depuis un lecteur reseau et on recupere le chemin UNC
' https://forum.hardware.fr/hfr/Programmation/VB-VBA-VBS/lister-lecteurs-reseaux-sujet_121798_1.htm
Set colDiskDrives = fso.Drives
lecteursReseaux = ""
For Each objDiskDrive in colDiskDrives
    If objDiskDrive.DriveType = NetworkDrive then
        lecteursReseaux = lecteursReseaux & objDiskDrive.DriveLetter

				' On recupere le chemin UNC du lecteur reseau de l'utilisateur
        If objDiskDrive.DriveLetter = Left(fichier, 1) Then
          cheminUNCUtilisateur = objDiskDrive.ShareName & _
							Right(fichier, Len(fichier) - 2)
        End If
    End if
Next
Set colDiskDrives = Nothing

If InStr(lecteursReseaux, Left(fichier, 1)) = 0 Then
	Msgbox "Pour envoyer ce document, vous devez d'abord enregistrer le document sur " & _
		"votre lecteur réseau personnel ou de classe !", vbExclamation, "Attention !"
	WScript.Quit()
End If


' Creation du raccourci avec le nom du user
' https://www.developpez.net/forums/d388921/autres-langages/general-visual-basic-6-vbscript/vbscript/creation-d-raccourci-vbs/
Set lnk = shell.CreateShortcut(cheminCible & user & "_" & nomfichier & ".lnk")
lnk.TargetPath = cheminUNCUtilisateur
lnk.Save
Set lnk = Nothing

MsgBox "Le document " & chr(34) & nomFichier & chr(34) & " a été envoyé avec succès !", vbInformation, "Succès !"


Set fso = Nothing
Set shell = Nothing

WScript.Quit()



----

config.xml (remplacer <nom_serveur> par le nom du serveur)
<?xml version="1.0" encoding="ISO-8859-1"?>
<data>
	<configuration>
		<chemin_cible>
			 \\<nom_serveur>\a_imprimer$\
		</chemin_cible>
	</configuration>
</data>



-------------------------------------------------------------------------------

INSTALLATION

Installation côté serveur :
- créer le dossier partagé (Lecture seule, accessible à tout le monde, créer un partage caché avec $ final)
- créer le dossier a_imprimer (Lecture/Ecriture, accessible à tout le monde, créer un partage caché avec $ final)
- copier sendDoc.vbs et config.xml dans dossier partagé

Installation côté client :
- fusionner deploy.reg (double-clic, puis Oui)

-------------------------------------------------------------------------------

UTILISATION

Utilisation côté client :
- Sélectionner le document à imprimer depuis un lecteur réseau
- Faire clic-droit, puis -= Envoyer pour imprimer =-.

NB : si l'utilisateur ne sélectionne pas son document depuis un lecteur réseau, un message l'informe de la restriction. Si tout se passe bien, un message lui signale que le document a bien été envoyé.

Utilisation côté serveur :
- Dans le dossier a_imprimer, sélectionner le raccourci constitué du nom de l'utilisateur qui a demandé l'impression, suivie du nom qu'il a donné au document
- S'il fait double-clic, il ouvre le document ciblé par la raccourci et peut l'imprimer ou le modifier

-------------------------------------------------------------------------------

CONCLUSION

Je ne fais pas de FAQ ou de section bugs connus, pour la bonne et simple raison, que je n'ai plus de poste en production sous la main (j'ai changé d'emploi, je ne suis plus TICE). Si vous avez des questions, j'essayerai tout de même d'y répondre du mieux que je peux.

J'en profite également pour remercier toutes les personnes qui n'hésitent pas à consacrer du temps pour aider les autres et pour partager leurs connaissances. Je cite certaines personnes parmi tant d'autres, avec des liens en commentaire dans le script sendDoc.vbs, que j'ai mis un certain temps à mettre au point.

Problème résolu, donc !

Cordialement
lnj

0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 685
9 janv. 2012 à 21:38
bonjour,

ça faisait longtemps ...

Effectivement ... mais c'est très intéressant d'avoir ta réalisation très détaillée qui peux aussi servir pour d'autres fonctionnalités réseaux.

Comme tu l'as constaté, avec un peu d'opiniâtreté, l'on parvient à résoudre les problèmes techniques mais il faut parfois, comme tu l'as fait, utiliser d'autres fonctionnalités que celles que l'on envisageait initialement.

Merci du retour et bonne année 2012 dans tes nouvelles fonctions.
0
lenainjaune Messages postés 616 Date d'inscription mercredi 7 mai 2008 Statut Contributeur Dernière intervention 25 avril 2024 47
9 janv. 2012 à 21:58
Salut gbinforme et bonne année 2012 à toi aussi ...
0