Quelle est la meilleure façon de conserver/enregistrer les paramètres de l'imprimante dans .Net? Il y avait un bug dans .Net 1.1 dans la sérialisation de l'objet PrinterSetting
et il y avait quelques workarounds mais je me demande s'il n'y a pas une meilleure ou plus facile à faire dans les versions plus récentes du framework. Le principal cas d'utilisation est de permettre à un utilisateur de définir, à l'aide des interfaces utilisateur de configuration d'imprimante standard, tous les détails d'impression (y compris les options spécifiques à l'imprimante) pour une imprimante donnée et de les restaurer. l'utilisateur imprime sur cette imprimante.Paramètres de l'imprimante persistante
Répondre
J'ai fait une jolie méthode ghetto de dumping the current DEVMODE and overwriting it back when they want to use it again pour envoyer certains paramètres d'imprimante propriétaires à un copieur au travail. Je ne pouvais pas trouver un meilleur moyen d'accéder à certaines propriétés qui n'étaient simplement pas exposées via l'API d'impression (comme les options d'agrafage et de repli propriétaires sur un ancien contrôleur Fiery ... Je pense que le nouveau modèle d'imprimante XPS prend en charge pour ceux-ci, mais Lord sait seulement quand nous commencerons à voir le soutien de l'industrie pour cela). Le principal inconvénient est qu'il ne serait pas portable sur plusieurs machines ou sur différentes versions du même pilote d'imprimante. Pour moi, ce n'est pas un gros problème puisque c'est un environnement de bureau contrôlé. Pour vous, je suppose que cela dépend du contexte dans lequel vos utilisateurs utilisent le programme.
Bonne chance!
Vous devez utiliser la classe PrinterSettings
.
La réponse non programmatique serait: utiliser la console de gestion d'impression depuis l'adminpack 2003 du serveur R2 pour exporter la configuration de l'imprimante. Peut-être que cette fonctionnalité a une API pour cela, qui peut être appelée à partir de .net.
Les problèmes liés à la sérialisation d'un objet PrinterSetting concernent la propriété PrintFileName.
Cette propriété doit avoir une valeur pour éviter une exception lorsque vous essayez de désassocier l'objet.
Si vous souhaitez enregistrer PrinterSettings d'un ReportViewer
Me.ReportViewer.PrinterSettings.PrintFileName = "abc"
My.Settings.PrinterSettings = Me.ReportViewer.PrinterSettings
My.Settings.Save()
Et les récupérer
If My.Settings.PrinterSettings IsNot Nothing Then Me.ReportViewer.PrinterSettings = My.Settings.PrinterSettings
sauver Quoi qu'il en soit la PrinterSetting que persistera la valeur "standard". Vous devez utiliser DEVMODE si vous voulez conserver les trucs exotiques de chaque pilote.
Excellent article. Merci beaucoup pour l'article complet! –
Avec l'avènement des imprimantes XPSDrv et PrintTickets, une solution meilleure et plus portable consiste à obtenir un ticket d'impression et à l'utiliser. Un ticket d'impression est une forme XML-sérialisée de la structure devmode. Reportez-vous cette [ce] [1] [1]: http://msdn.microsoft.com/en-us/library/system.printing.printticket(VS.85).aspx – dirkgently
@dirkgently Merci pour le conseil . Nous étions sur 2.0 à l'époque. En effet, la méthode que j'élabore est la plus utile dans les situations où vous avez une vieille imprimante GDI qui n'expose pas les choses via GetDeviceCaps et n'a pas de documentation/capacité pour ExtEscape(). –