2017-06-21 4 views
2

Je voudrais faire ma propre "imprimante PDF" en utilisant Ghostscript.Impression PDF Ghostscript

La plupart des solutions que je trouve sur Internet impliquent une tierce partie comme Redmon pour rediriger l'imprimante PS vers l'exécutable Gs.

Existe-t-il un moyen de faire la même chose sans un tiers (autre que Gs)?

Voici mes 2 idées:

  • Bypass le pilote d'impression et générer Postscript directement par le logiciel (De GDI à Postscript, en utilisant peut-être existe un contexte de périphérique personnalisé comme le contexte de l'appareil Metafile)

  • Créez par programmation un nouveau port local pour chaque document à convertir. Peut-être en utilisant cette technique: https://stackoverflow.com/a/1331777/99276

La première solution serait génial, mais ne peut pas trouver quoi que ce soit à ce sujet.

Et je suis efraid le second est pas efficace du tout (et détecter le moment où le document est entièrement imprimé peut être difficile)

Répondre

0

Tout d'abord; Notez que le système d'impression Windows a été repensé dans Windows Vista et au-delà. Alors que l'ancien système fonctionne encore dans Windows 7 et 8, je ne sais pas exactement comment il est utilisable dans Windows 10. Dans Windows 10 tout passe par XPS, et je pense (peut-être tort) que PostScript est généré en passant par XPS .

Votre première idée ne me semble pas plausible. Comment pouvez-vous avoir une imprimante (et permettre à votre application d'imprimer dessus) si vous n'avez pas de pilote d'imprimante? Même si vous pouviez le faire, pourquoi créer du PostScript à partir de GDI juste pour l'envoyer à Ghostscript et le créer en PDF? Il serait beaucoup plus raisonnable de créer des PDF directement.

Dans le second cas, je ne vois pas comment ajouter un nouveau port local vous aiderait du tout. Les ports sont simplement là où la sortie du pilote d'imprimante est dirigée. Qu'est-ce qu'un moniteur de port (RedMon est un moniteur de port) est de rediriger le flux de données envoyé au port, et «faire quelque chose» avec elle. Dans le cas de Ghostscript + RedMon, le 'quelque chose' est de créer un fichier PDF. Je ne comprends pas pourquoi vous ne voulez pas utiliser RedMon, étant donné que vous êtes apparemment content d'utiliser Ghostscript. Cependant, si vous ne voulez vraiment pas le faire, alors écrivez votre propre Port Monitor. Le processus est documenté dans le Kit de développement de pilote de périphérique Windows et n'est pas particulièrement difficile. Si vous êtes coincé, vous pouvez même regarder le code RedMon comme un guide. Par exemple, voir here

+0

Ils ont pensé à tout cela. L'idée derrière l'utilisation de postscript est que je n'ai pas besoin de dessiner un PDF par moi-même comme si je surchargeais un contexte de périphérique. Ensuite, l'idée derrière les ports locaux est de sortir des fichiers Postscript sur le disque sans demander l'emplacement d'un fichier comme le fait le port FILE. À la fin oui, j'ai déjà regardé le code source de Redmon. Mais si c'est la seule solution, je suppose que je vais le faire. – MiniScalope

+0

Créer un fichier PDF à partir d'opérations de dessin Windows n'est pas plus difficile que de créer un programme PostScript à partir des mêmes opérations, croyez-moi. Certes, vous pouvez créer des ports locaux qui enregistrent dans un fichier spécifique, mais vous devez alors scanner le code pour ce nom de fichier et le traiter si vous le trouvez. C'est possible (les premières versions de la fonction 'PDF print' d'Adobe l'ont fait, tout comme d'autres implémentations). mais son (comparativement) processeur coûteux.Il est également vulnérable à la perte de données si le programme d'analyse se bloque et que l'utilisateur imprime un autre fichier. – KenS