Si vous ne pouvez imprimer qu'une fois, vous pouvez imprimer un nombre infini de fois.
Pensez à une imprimante réseau: les données brutes à imprimer doivent être envoyées à un périphérique embarqué distant, ce que votre programme n’aurait aucun moyen de restreindre, même s’il devenait en quelque sorte la propriété de la machine entière de l’utilisateur (ce qui serait déjà considéré comme extrêmement offensant ; voir le Scandale des rootkits Sony pour le genre de réaction à attendre).
Comment savoir que le périphérique avec lequel la machine de l'utilisateur parle est un vrai HP LaserJet, au lieu de quelque chose qui prétend l'être (ou, plus simplement, prétend être un spouleur distant), mais qui enregistre les PCL / PS / quels que soient les fichiers bruts au lieu de l'imprimer? Ces données étant tout ce dont vous avez besoin pour imprimer le travail, il vous suffirait de les relire plusieurs fois sur une imprimante réelle pour obtenir plusieurs copies. Vous pouvez également utiliser un renifleur (comme mentionné par @dlamblin) et éviter les problèmes d'émulation de l'imprimante.
Vous pourriez penser à interdire les imprimantes réseau, mais le fait d’avoir uniquement des imprimantes réseau dans un bureau (pas de simples imprimantes connectées à un PC à usage général, mais des imprimantes volumineuses directement connectées au commutateur Ethernet) n’est pas si rare. De ce fait, plusieurs de vos utilisateurs (dont beaucoup dépendraient du groupe démographique cible) ne seraient pas en mesure d’imprimer, ce qui n’est pas un bon système de relations publiques.
Et même la clé USB n’est pas à l’abri (bien qu’elle nécessite davantage de connaissances techniques et peut-être un matériel spécial); il existe des renifleurs USB. Et même sans eux, un "pilote de gadget" d'imprimante USB sur un périphérique Linux intégré pourrait suffire (à noter, toutefois, qu'à ce jour, je ne connais aucun pilote de gadget d'imprimante USB pour Linux).
Tout cela en supposant que le programme ait réussi à obtenir le contrôle complet de la machine de l'utilisateur. Comme le montrent plusieurs tentatives infructueuses de protection contre la copie, ceci est plus facile à dire qu'à faire. Comment savoir que le pilote d’imprimante que vous utilisez n’est qu’une version peu commune du pilote d’imprimante pour une marque d’imprimantes répandue, et non une version piratée pour enregistrer le flux sur le disque? Comment savoir qu'il n'y a pas de pilote quelque part dans la pile d'impression enregistrant toutes les transactions USB sur le disque? Et comment pouvez-vous différencier un utilisateur normal de machines virtuelles de celui qui les utilise pour intercepter la communication avec les périphériques USB?
Cela dit, vous n'avez pas besoin d'aller si loin. La plupart des gens, même s'ils possèdent le savoir-faire technique, ne tenteront pas de contourner les tentatives les plus faibles d'empêcher les impressions en double que vous faites. En fait, je ne serais pas surpris si la plupart des utilisateurs n'imprimaient volontairement pas plus d'une fois si le fichier ne devait être imprimé qu'une seule fois (mais il y aurait alors plus de cas de personnes imprimant accidentellement deux fois). Alors, créez un programme simple qui imprime une fois puis efface les données originales. Avertissez l'utilisateur que les données seront effacées après avoir été imprimées une fois. Et acceptez que certaines personnes imprimeront plus de fois que vous ne le permettez, et que d’autres imprimeront Moins fois que vous avez permis (problèmes d'alimentation, imprimantes défectueuses, systèmes mal configurés, ou redoutable LETTRE DE CHARGEMENT PC l’échec de l’impression). Soyez prêt pour ça.
Acceptez simplement les pertes pour les personnes qui impriment plus de temps que autorisé, de la même manière qu'un magasin physique doit accepter qu'une fraction de son stock soit endommagée ou perdue d'une manière ou d'une autre. Avoir un moyen de trouver les plus gros abuseurs et de les traiter (le système juridique semble être un choix populaire).
Pour les personnes qui impriment moins de temps que prévu, une assistance telle qu'une assistance téléphonique permettant à l'utilisateur de demander une nouvelle copie serait une option (cela fonctionne pour Microsoft, non?). Bien sûr, certaines personnes vont en abuser, mais voir le paragraphe précédent.