Se você puder imprimir uma vez, poderá imprimir um número infinito de vezes.
Considere uma impressora de rede: os dados brutos a serem impressos devem ser enviados para um dispositivo remoto, que seu programa não teria como restringir, mesmo que de alguma forma assumisse a propriedade da máquina inteira do usuário (o que já seria considerado extremamente ofensivo, veja o
escândalo de rootkit da Sony para o tipo de reação que se espera.
Como você poderia dizer que o dispositivo com o qual o usuário está falando é um HP LaserJet real, em vez de algo que finge ser um (ou, ainda mais simples, finge ser um spooler remoto), mas que salva o PCL / raw PS / tudo em vez de imprimi-lo? Uma vez que os dados são tudo o que é necessário para imprimir o trabalho, seria necessário reproduzi-lo várias vezes para uma impressora real para obter várias cópias. Você também pode usar um sniffer (como @dlamblin mencionado) e poupar o trabalho de emular a impressora.
Você poderia pensar em proibir impressoras de rede, mas ter apenas impressoras de rede em um escritório (não impressoras simples conectadas a um PC de uso geral, mas grandes impressoras conectadas diretamente ao comutador Ethernet) não é tão incomum. Por causa disso, vários de seus usuários (quantos dependeriam muito do público alvo) não seriam capazes de imprimir, o que não é bom PR.
E até o USB não está imune (embora seja necessário mais conhecimento técnico e talvez hardware especial); existem sniffers USB. E mesmo sem eles, um "driver de gadget" de impressora USB em um dispositivo Linux embarcado poderia ser suficiente (observe, no entanto, que até este momento não conheço nenhum driver de dispositivo de impressora USB para Linux).
Isso tudo está assumindo que o programa conseguiu, de alguma forma, obter o controle completo da máquina do usuário. Como as várias tentativas fracassadas de proteção contra cópia mostram, é mais fácil falar do que fazer. Como você pode saber que o driver da impressora que você está usando é apenas uma versão incomum do driver da impressora para uma marca popular de impressoras, e não uma versão hackeada para salvar o fluxo no disco? Como você pode saber que não há nenhum driver em algum lugar na pilha de impressão registrando todas as transações USB no disco? E como você pode diferenciar um usuário normal de máquinas virtuais de alguém que as usa para interceptar a comunicação com os dispositivos USB?
Tudo isso dito, você não precisa ir tão longe. A maioria das pessoas, mesmo que tenham o conhecimento técnico, não tentará contornar nem mesmo as tentativas mais fracas de impedir a impressão duplicada que você faz. Na verdade, eu não ficaria surpreso se a maioria dos usuários não imprimisse voluntariamente mais de uma vez, se fosse informada de que o arquivo deveria ser impresso apenas uma vez (mas haveria mais casos de pessoas imprimindo acidentalmente duas vezes). Portanto, crie um programa simples que imprima uma vez e depois apague os dados originais. Avise o usuário que os dados serão apagados após serem impressos uma vez. E aceite que algumas pessoas imprimam mais vezes do que o permitido e que algumas pessoas imprimam menos vezes do que o permitido (problemas de energia, impressoras defeituosas, sistemas mal configurados ou o temido LETRA DE CARREGAMENTO DO PC pode fazer com que a impressão falhe). Esteja preparado para isso.
Para as pessoas que imprimem mais vezes do que o permitido, basta aceitar as perdas, da mesma forma que uma loja física tem que aceitar que uma fração de seu estoque será acidentalmente danificada ou perdida de alguma forma. Tem alguma maneira de encontrar os maiores abusadores e lidar com eles (o sistema legal parece ser uma escolha popular).
Para pessoas que imprimem menos vezes do que o permitido, algo como suporte por telefone, onde o usuário pode solicitar uma nova cópia, seria uma opção (funciona para a Microsoft, certo?). Claro, algumas pessoas vão abusar disso, mas veja o parágrafo anterior.