Serveur d'impression pour imprimer sous xp ou vista avec une canon lbp660 ou autre imprimante non reconnue...

Soyez le premier à donner votre avis sur cette source.

Vue 12 942 fois - Téléchargée 579 fois

Description

Canon n'ayant pas adapté ses drivers pour la laser LBP660, voici une solution pour partager en réseau une LBP660 (ou une autre imprimante non soutenue) avec d'excellents résultats. C'est un tout petit programme qui tourne sur une machine sous Windows 98 (ou certains XP -> j'ai une machine avec XP Pro qui accepte la LBP660 alors que mes autres XP la refusent). Ecrit en VB2005, PrinterLBP660 ne fait qu'attendre des fichiers "jpeg" sur un certain dossier à définir et les imprime. En amont, sur les autres machines XP ou Vista, il faut installer PDFCreator (logiciel gratuit disponible sur le Net) qui crée un driver d'impression capable de transformer vos sorties d'impression sur tous logiciels en fichiers PDF ou JPEG -> choisir Jpeg sur le dossier défini dans PrinterLBP660. Toute impression vers PDFCreator se fait alors sur la LBP660 !

Source / Exemple :


'Créez une Form, nommez-la PrinterLBP660 (ou autre)
'Ajoutez-y un Label nommé lblAffichage
'Ajoutez-y un FileSystemWatcher nommé FileSystemWatcher1 
'Et copiez ce code après avoir modifié :
' 1/ le dossier (ici "C:\AImprimer") -> il doit exister (pas de traitement d'erreur)
' 2/ le nom de l'imprimante (avec le nom donné dans le Panneau de Configuration)
Imports System.Drawing.Printing
Imports System.Environment

Public Class PrinterLBP660
    Dim PrintDoc As New PrintDocument()
    Dim FichiersQueue As New Queue(Of String)

    Private Sub PrinterLBP660_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        ChDir("C:\AImprimer") ' <--- Modifier en indiquant ici votre dossier d'impression
        AddHandler PrintDoc.PrintPage, AddressOf PrintDocument_PrintPage
        lblAffichage.Text = "Prêt à imprimer"
    End Sub

    Private Sub FileSystemWatcher1_Created(ByVal sender As Object, ByVal e As System.IO.FileSystemEventArgs) Handles FileSystemWatcher1.Created
        'S'il y a détection de la création d'un fichier
        If e.ChangeType = IO.WatcherChangeTypes.Created Then
            Dim NomDuFichier As String = e.Name
            'tout fichier du nom de "shutdown.txt" quel que soit son contenu (même vide) provoque l'arrêt de Windows
            If NomDuFichier = "shutdown.txt" Then
                lblAffichage.Text = "Arrêt de Windows..."
                lblAffichage.BackColor = Color.Red
                lblAffichage.Refresh()
                'temporisation de 10 secondes pour être sûr de ne pas l'effacer avant sa fermeture en écriture 
                Dim t As DateTime = Now.Add(New TimeSpan(0, 0, 10))
                Do
                    If Now > t Then Exit Do
                Loop
                'on l'efface
                Kill("shutdown.txt")
                Dim osInfo As OperatingSystem = OSVersion
                'selon la version de Windows
                If osInfo.Platform = PlatformID.Win32Windows Then 'W95/98
                    'pour arrêter Windows98
                    Shell("rundll32.exe user.exe,exitwindows")
                Else
                    'pour arrêter XP
                    Shell("shutdown -s -t 0")
                End If
            ElseIf NomDuFichier.Substring(NomDuFichier.IndexOf(".") + 1) = "jpg" Then
                lblAffichage.Text = "Impression en cours..."
                lblAffichage.BackColor = Color.Red
                lblAffichage.Refresh()
                FichiersQueue.Enqueue(NomDuFichier)
                PrintDoc.PrinterSettings.PrinterName = "Canon LBP-660" ' <-- Modifier en indiquant ici le nom de votre imprimante
                'tel qu'il apparait dans le Panneau de Configuration / Imprimantes et Télécopieurs
                'on commande l'impression
                PrintDoc.Print()
                'temporisation pour laisser le temps au fichier d'être complétement imprimé et fermé
                Do
                    Dim t As DateTime = Now.Add(New TimeSpan(0, 0, 1))
                    Do
                        If Now > t Then Exit Do
                    Loop
                    'toutes les secondes on essaye
                    Try
                        'effacement du fichier
                        Kill(FichiersQueue.Peek)
                        Exit Do
                    Catch
                    End Try
                Loop
                FichiersQueue.Dequeue()
                lblAffichage.Text = "Prêt à imprimer..."
                lblAffichage.BackColor = Color.GreenYellow
                lblAffichage.Refresh()
            End If
        End If
    End Sub

    Private Sub PrintDocument_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
        'temporisation pour laisser le temps au fichier d'être complétement transféré et fermé
        Do
            Dim t As DateTime = Now.Add(New TimeSpan(0, 0, 1))
            Do
                If Now > t Then Exit Do
            Loop
            'toutes les secondes on essaye
            Try
                FileOpen(1, FichiersQueue.Peek, OpenMode.Binary, OpenAccess.ReadWrite, OpenShare.Shared)
                FileClose(1)
                Exit Do
            Catch
            End Try
        Loop
        'copie du bitmap du fichier-image sur le graphics de l'imprimante
        e.Graphics.DrawImage(New Bitmap(FichiersQueue.Peek), e.Graphics.VisibleClipBounds)
        e.HasMorePages = False
    End Sub

End Class

Conclusion :


C'est une solution fonctionnelle pour partager une "vieille imprimante" qui fonctionne encore mais n'est plus soutenue sous XP ou Vista à condition de disposer du "vieux PC" avec le bon driver qui l'utilisait, en mettant le tout en réseau... Avec mes 4 ordinateurs sous XP (1 seul acceptant la LBP660 et 3 autres à divers endroits de la maison) je peux imprimer depuis l'un quelconque d'entre eux au choix en laser couleurs sur une HP2600N (Bien sûr, après ce tour joué par Canon, je n'avais plus envie d'investir dans une marque incapable d'assurer la compatibilité ascendante de ses drivers) ou sur ma bonne vieille laser N&B Canon LBP660 qui fonctionne encore très bien.
Les fichiers créés sur le dossier choisi sont automatiquement effacés et l'écriture d'un fichier nommé "shutdown.txt" sur le même dossier éteint l'ordinateur "serveur d'impression"...

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

leonick5819
Messages postés
1
Date d'inscription
dimanche 23 novembre 2008
Statut
Membre
Dernière intervention
23 novembre 2008

salut mon probleme c que je suis interesse par ce systeme la mais je n y connais rien du tout en code source exite t il une version logiciel ou autre d ailleurs que je puisse faire tourner comme ca

merci d avance
guillaume_00
Messages postés
18
Date d'inscription
dimanche 19 septembre 2004
Statut
Membre
Dernière intervention
19 mars 2009

Salut,

Original mais efficace. Par contre tu devrait remplacer
Dim t As DateTime = Now.Add(New TimeSpan(0, 0, 1))
Do
If Now > t Then Exit Do
Loop

par

System.Threading.Thread.Sleep(new TimpeSpan(0, 0, 1))

C'est plus propre et ca consomme moin de CPU.

++

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.