{"version":"1.1","schema_version":"1.1.0","plugin_version":"1.1.2","url":"https://tutos-gameserver.fr/2019/07/15/gestion-des-formulaires-win32-printserver-bien-choisir-son-serveur-d-impression/","llm_html_url":"https://tutos-gameserver.fr/2019/07/15/gestion-des-formulaires-win32-printserver-bien-choisir-son-serveur-d-impression/llm","llm_json_url":"https://tutos-gameserver.fr/2019/07/15/gestion-des-formulaires-win32-printserver-bien-choisir-son-serveur-d-impression/llm.json","manifest_url":"https://tutos-gameserver.fr/llm-endpoints-manifest.json","language":"fr-FR","locale":"fr_FR","title":"Gestion des formulaires Win32 Printserver\n\n &#8211; Bien choisir son serveur d impression","site":{"name":"Tutos GameServer","url":"https://tutos-gameserver.fr/"},"author":{"id":1,"name":"Titanfall","url":"https://tutos-gameserver.fr/author/titanfall/"},"published_at":"2019-07-15T19:47:47+00:00","modified_at":"2019-07-15T19:47:47+00:00","word_count":1812,"reading_time_seconds":544,"summary":"La plupart des imprimantes prennent en charge plusieurs formats de papier, chacun pouvant être sélectionné à partir du menu de configuration de l&#39;imprimante. Ces tailles incluent Lettre, A4, Légal, et similaires (bien qu&#39;il y ait des centaines de tailles standard utilisées à travers le monde). Le système d’impression sous Windows NT / 2K / XP [&hellip;]","summary_points":["La plupart des imprimantes prennent en charge plusieurs formats de papier, chacun pouvant être sélectionné à partir du\nmenu de configuration de l&#39;imprimante.","Ces tailles incluent Lettre, A4, Légal,\net similaires (bien qu&#39;il y ait des centaines de tailles standard utilisées\nà travers le monde).","Le système d’impression sous Windows NT / 2K / XP OS a\nun mécanisme centralisé de gestion des formats de papier nommés via un\n&quot;API de formulaires&quot;.","La plupart des utilisateurs ne seront pas directement exposés au système de formulaires, mais\nun projet récemment en construisant un PPD (Postscript Printer Description)\npour l’imprimante d’un client, nous avons jugé nécessaire de devenir beaucoup plus\nfamilier avec ce que nous voulions."],"topics":["Serveur d'impression"],"entities":[],"entities_metadata":[{"id":10,"name":"Serveur d'impression","slug":"serveur-dimpression","taxonomy":"category","count":3907,"url":"https://tutos-gameserver.fr/category/serveur-dimpression/"}],"tags":["Serveur d'impression"],"content_hash":"c8ddaea8f9cd1ecbef4e07ea57312a5c","plain_text":"La plupart des imprimantes prennent en charge plusieurs formats de papier, chacun pouvant être sélectionné à partir du\nmenu de configuration de l&#39;imprimante. Ces tailles incluent Lettre, A4, Légal,\net similaires (bien qu&#39;il y ait des centaines de tailles standard utilisées\nà travers le monde). Le système d’impression sous Windows NT / 2K / XP OS a\nun mécanisme centralisé de gestion des formats de papier nommés via un\n&quot;API de formulaires&quot;.\n\nLa plupart des utilisateurs ne seront pas directement exposés au système de formulaires, mais\nun projet récemment en construisant un PPD (Postscript Printer Description)\npour l’imprimante d’un client, nous avons jugé nécessaire de devenir beaucoup plus\nfamilier avec ce que nous voulions.\n\nNotre recherche a été effectuée sur Windows 2000 avec SP4.\nNous espérons que nos découvertes seront utiles aux autres.\n\nLa gestion de la base de données de formulaires se fait avec cinq fonctions API\nfourni par WINSPOOL.LIB:\n\nUn &quot;formulaire&quot; est un nom pour un certain type de support et toutes les imprimantes.\npartager la base de données commune. Chaque formulaire est décrit par un \nFORM_INFO_1    structure composée de quatre membres:\n\n\n    FORM_INFO_1.pName \n    Le nom de ce formulaire, qui doit être unique dans tous les formulaires\nsystème. Le cas ne semble pas avoir d&#39;importance.\n    FORM_INFO_1.Size\n    Largeur et hauteur de la forme en millièmes de millimètre, et\nplusieurs formulaires peuvent avoir des tailles identiques. Ceci est représenté par un\nTAILLE L structure, avec cx et cy membres.\n    FORM_INFO_1.ImageableArea\n    le RECTL qui détient la zone imageable des médias en localisant\nles coins inférieur gauche et supérieur droit semblent être redondants. Bien que\nla disposition en quatre points de ce champ suggère qu&#39;ils représentent le\nla marge matérielle physique, dans la pratique, le coin inférieur gauche est toujours 0,0\net le coin supérieur droit est cx, cy.\n\n\nHeureusement, les marges matérielles sont ne pas reflété ici: bien que tous\n(Par exemple) Le format &quot;A4&quot; a les mêmes dimensions extérieures physiques, chacune\ntype d&#39;imprimante a ses propres restrictions. Il n&#39;y a pas moyen qu&#39;un seul média\nnom pourrait représenter plusieurs arrangements physiques.\n\n    FORM_INFO_1.Flags\n    Chaque formulaire peut être de trois types: FORM_BUILTIN,\nFORM_PRINTER et FORM_USER.\nLes formulaires intégrés font partie intégrante du système d’impression (TODO:\nquelle partie?), et ils ne peuvent pas être supprimés ou modifiés avec l’API Forms.\nLes formulaires &quot;Imprimante&quot; sont stockés dans le registre, de même que les formulaires &quot;Utilisateurs&quot;. le\nLa documentation de Microsoft suggère que les formulaires &quot;Imprimante&quot; soient associés\navec des imprimantes individuelles, mais nous n&#39;avons trouvé aucune indication indiquant qu&#39;ils\nsont autre chose que large du système et disponible pour tout imprimantes.\nNous n&#39;avons pas trouvé comment les formulaires &quot;utilisateur&quot; sont implémentés.\n\n\n\nLa base de données des formulaires utilisateur et d&#39;impression (mais pas des formulaires intégrés) est trouvée\ndans le registre:\n\n\n\n\n\nHKEY_LOCAL_MACHINE  SYSTEM  CurrentControlSet  Control  Print  Forms \n\nIl est possible de supprimer ou de renommer directement les noms de formulaire dans le registre,\nmais bien sûr, c&#39;est une idée terrible: utilisez plutôt l&#39;API Forms.\n\nNous avons observé plusieurs éléments de comportement de l’API Forms qui sont:\npas strictement documenté. Nous allons les aborder ici.\n\n\n\nTous les appels d’API nécessitent un HANDLE vers une imprimante ou un serveur d’impression,\nmais ils ne sont pas complètement interchangeables.\n\n\n\nAPI      \nNT4      \nWin2000  \n\n\n\nEnumForms ()    \nimprimante                    \nimprimante ou serveur          \n\n\nAddForm ()      \nimprimante                    \nimprimante ou serveur          \n\n\nDeleteForm ()   \nimprimante                    \nimprimante ou serveur          \n\n\nSetForm ()      \nimprimante                    \nimprimante ou serveur          \n\n\nGetForm ()      \nimprimante                    \nimprimante                    \n\n\n\n\nOn ne peut pas DeleteForm () sur une forme interne: ça échoue\navec ERROR_INVALID_PARAMETER.\n\nOn ne peut pas AddForm () un formulaire dont le nom ne respecte pas la casse\nexiste déjà: il échoue avec ERROR_FILE_EXISTS.\n\nIl est possible de AddForm () une forme &quot;intégrée&quot;, mais c&#39;est\nnéanmoins toujours stocké dans le registre. Mais une fois ajouté, il ne peut pas\nêtre supprimé avec l’API Forms: l’édition directe du registre est\nChamps obligatoires. Cela suggère des formes &quot;véritables intégrées&quot; et &quot;intégrées&quot;, qui\nl&#39;API Forms ne discute pas. Nous pensons que l&#39;ajout de formes &quot;intégrées&quot;\nvia l&#39;API est une mauvaise idée.\nle GetForm () L&#39;appel d&#39;API ne fonctionnera pas avec un handle vers un serveur d&#39;impression,\nseulement une poignée à une imprimante elle-même: on ne voit pas pourquoi c&#39;est le cas.\n\nLors de la manipulation de la base de données de formulaires via le registre, il faut arrêter\net démarrez le spouleur (par exemple NETTOYEUR DE BUTÉE suivi par\nSPOOLER NET START à partir de la ligne de commande MS-DOS, ou utilisez la commande\nInterface graphique des services du Panneau de configuration) pour qu’elle prenne effet. Suppression\nune entrée de registre pour un formulaire ne permet pas au spouleur d&#39;oublier la\nversion en mémoire immédiatement.\n\nLorsque vous utilisez le SetForm () API, on fournit à la fois le nom\ndans l&#39;appel de l&#39;API et à l&#39;intérieur de la structure FORM_INFO_1, donc\nsuggère que l&#39;on peut Renommer un formulaire avec:\n\nfinfo.pName = &quot;NewForm&quot;;\n...\nSetForm (hPrinter, &quot;OldForm&quot;, 1, &amp; finfo);\n\nmais ça ne marche pas bien. Nouvelle forme est ajouté au registre avec\nles dimensions mises à jour, et OldForm reste avec les anciens, mais\ncela n&#39;est pas visible via l&#39;API de formulaires. Au lieu de cela, l&#39;ancien formulaire est mis à jour\navec les nouvelles dimensions. Le redémarrage du service de spouleur rend visible\nles paramètres du registre, y compris en laissant l&#39;ancien formulaire.\n\nCela ressemble à un bug.\n\n\n\nWindows fournit un moyen de visualiser et de gérer tous les formulaires (intégrés et\nsinon), et on y parvient en ouvrant le Imprimantes applet de\nle panneau de contrôle. Tirer vers le bas Fichier: Propriétés du serveur du haut\nmenu:\n\n\n\n\nqui ouvre la boîte de dialogue de gestion des formulaires:\n\n\n\n\nCertaines formes &#8211; comme Lettre montré ici &#8211; sont intégrés et ne sont pas disponibles\npour modifier ou supprimer, mais tous les formulaires qui ont été ajoutés par l&#39;utilisateur ou une impression\nle programme d&#39;installation du pilote peut être géré directement.\n\nBien que l’interface graphique permette l’utilisation des unités de mesure anglaise et métrique,\nintérieurement tout les formes sont mesurées au millième de millimètre.\n\nPratiquement toutes les imprimantes compatibles PostScript utilisent l’imprimante Adobe / Microsoft.\npilote, et il est assez complet. Plutôt que de modifier le pilote lui-même\nadapter son comportement aux capacités de l’imprimante, l’un à la place\nfournit un fichier PPD (Postscript Printer Description) qui caractérise\nle périphérique de sortie.\n\nLa création d’un PPD va bien au-delà de la portée de ce conseil technique, mais une section\nse rapporte à l&#39;API Forms. le PaperDimension les balises décrivent toutes les\nformats de support pris en charge par cette imprimante, et le pilote les rend disponibles\nà l&#39;application.\n\n\n\n\n\n*% === Dimension du papier ======================\n* DefaultPaperDimension: 14x17\n* Lettre PaperDimension: &quot;612 792&quot;\n* PaperDimension A4: &quot;595 842&quot;\n* PaperDimension 8x10: &quot;576 720&quot;\n* PaperDimension 11x14: &quot;792 1008&quot;\n* PaperDimension 14x17: &quot;1008 1224&quot;\n\nCette partie est documentée dans le Adobe\nSpécification PPD (PDF), mais l’interaction entre les PaperDimension\nbalise et l’API de formulaire ne l’est pas. Nous avons constaté un comportement très déconcertant.\n\nQuand une imprimante est installée, le .PPD le fichier est copié profondément dans le\nHiérarchie Windows, et sur notre système Windows 2000, il est stocké dans cette\nannuaire:\n\n\n\n\n\nC:  WINNT  system32  spool  drivers  w32x86  3 \n\nle .PPD le fichier est &quot;compilé&quot; dans un binaire .BPD déposer chaque fois que le\nle pilote voit que le fichier source a changé &#8211; cela semble arriver à tout moment\nun nouveau travail d’impression commence et il rend probablement le pilote plus rapide en raison de la\nl&#39;analyse réduite du fichier.\n\n\nCertains changements dans le .PPD sont reflétés immédiatement, ce qui le rend facile\npour tester un PPD. En le modifiant simplement sur place, le prochain travail d&#39;impression est recompilé\nle fichier et lit les paramètres. Mais d&#39;autres attributs, y compris les médias\ntailles &#8211; ne sont reconsidérés que lorsque le pilote est installé ou mis à jour.\n\nDans tous les cas, il ne semble pas exister de mécanisme de retour d’erreur pour\nerreurs syntaxiques ou sémantiques. Nous souhaitons que MS / Adobe fournisse un\n&quot;Validateur PPD&quot; utilisant la même logique d&#39;analyse que le pilote\n(peut-être exposé par une API dans le pilote lui-même) &#8211; cela nous permettrait\npour attraper des erreurs stupides à l&#39;avant.\n\nLe plus gros problème avec le pilote jusqu’à présent est l’intégration avec les formulaires.\nAPI: en traitant les descriptions de support, il tente de résoudre le PPD\ntailles avec celles trouvées dans la base de données. Il semble que si le nom du média\nest déjà dans la base de données mais les dimensions ne correspondent pas exactement, cette\net tous les noms de média PPD suivants sont ignoré.\n\nNon seulement ces noms ne sont pas ajoutés à la base de données, mais ils ne sont même pas\najouté à la liste des supports valides pris en charge par cette imprimante &#8211; c&#39;est comme s&#39;ils\nn&#39;ont même pas été trouvés dans le PPD.\n\nDans la liste ci-dessus de PaperDimensions, si la taille à (disons) 8&#215;10 ne\ncorrespond à ce qui se trouve dans la base de données de formulaires, ceci et tous les supports suivants sont\nignoré. Cela signifie que l&#39;interface graphique de configuration de l&#39;imprimante affiche uniquement les formats Letter et A4.\nen tant que support valide.\n\nLa seule solution à ce problème consiste à examiner la base de données de formulaires à l&#39;avance.\net supprimez tous les formulaires préexistants qui ne correspondent pas à la bonne taille. Nous ne\nvoyez un moyen simple de le faire avec le mécanisme d&#39;installation d&#39;imprimante standard:\nNous avons dû développer un code C ++ personnalisé qui supprime les entrées non correspondantes\net repeuple les formes avec les tailles appropriées.\n\n\nClick to rate this post!\r\n                                   \r\n                               [Total: 0  Average: 0]","paragraphs":["La plupart des imprimantes prennent en charge plusieurs formats de papier, chacun pouvant être sélectionné à partir du\nmenu de configuration de l&#39;imprimante. Ces tailles incluent Lettre, A4, Légal,\net similaires (bien qu&#39;il y ait des centaines de tailles standard utilisées\nà travers le monde). Le système d’impression sous Windows NT / 2K / XP OS a\nun mécanisme centralisé de gestion des formats de papier nommés via un\n&quot;API de formulaires&quot;.","La plupart des utilisateurs ne seront pas directement exposés au système de formulaires, mais\nun projet récemment en construisant un PPD (Postscript Printer Description)\npour l’imprimante d’un client, nous avons jugé nécessaire de devenir beaucoup plus\nfamilier avec ce que nous voulions.","Notre recherche a été effectuée sur Windows 2000 avec SP4.\nNous espérons que nos découvertes seront utiles aux autres.","La gestion de la base de données de formulaires se fait avec cinq fonctions API\nfourni par WINSPOOL.LIB:","Un &quot;formulaire&quot; est un nom pour un certain type de support et toutes les imprimantes.\npartager la base de données commune. Chaque formulaire est décrit par un \nFORM_INFO_1    structure composée de quatre membres:","FORM_INFO_1.pName \n    Le nom de ce formulaire, qui doit être unique dans tous les formulaires\nsystème. Le cas ne semble pas avoir d&#39;importance.\n    FORM_INFO_1.Size\n    Largeur et hauteur de la forme en millièmes de millimètre, et\nplusieurs formulaires peuvent avoir des tailles identiques. Ceci est représenté par un\nTAILLE L structure, avec cx et cy membres.\n    FORM_INFO_1.ImageableArea\n    le RECTL qui détient la zone imageable des médias en localisant\nles coins inférieur gauche et supérieur droit semblent être redondants. Bien que\nla disposition en quatre points de ce champ suggère qu&#39;ils représentent le\nla marge matérielle physique, dans la pratique, le coin inférieur gauche est toujours 0,0\net le coin supérieur droit est cx, cy.","Heureusement, les marges matérielles sont ne pas reflété ici: bien que tous\n(Par exemple) Le format &quot;A4&quot; a les mêmes dimensions extérieures physiques, chacune\ntype d&#39;imprimante a ses propres restrictions. Il n&#39;y a pas moyen qu&#39;un seul média\nnom pourrait représenter plusieurs arrangements physiques.","FORM_INFO_1.Flags\n    Chaque formulaire peut être de trois types: FORM_BUILTIN,\nFORM_PRINTER et FORM_USER.\nLes formulaires intégrés font partie intégrante du système d’impression (TODO:\nquelle partie?), et ils ne peuvent pas être supprimés ou modifiés avec l’API Forms.\nLes formulaires &quot;Imprimante&quot; sont stockés dans le registre, de même que les formulaires &quot;Utilisateurs&quot;. le\nLa documentation de Microsoft suggère que les formulaires &quot;Imprimante&quot; soient associés\navec des imprimantes individuelles, mais nous n&#39;avons trouvé aucune indication indiquant qu&#39;ils\nsont autre chose que large du système et disponible pour tout imprimantes.\nNous n&#39;avons pas trouvé comment les formulaires &quot;utilisateur&quot; sont implémentés.","La base de données des formulaires utilisateur et d&#39;impression (mais pas des formulaires intégrés) est trouvée\ndans le registre:","HKEY_LOCAL_MACHINE  SYSTEM  CurrentControlSet  Control  Print  Forms","Il est possible de supprimer ou de renommer directement les noms de formulaire dans le registre,\nmais bien sûr, c&#39;est une idée terrible: utilisez plutôt l&#39;API Forms.","Nous avons observé plusieurs éléments de comportement de l’API Forms qui sont:\npas strictement documenté. Nous allons les aborder ici.","Tous les appels d’API nécessitent un HANDLE vers une imprimante ou un serveur d’impression,\nmais ils ne sont pas complètement interchangeables.","API      \nNT4      \nWin2000","EnumForms ()    \nimprimante                    \nimprimante ou serveur","AddForm ()      \nimprimante                    \nimprimante ou serveur","DeleteForm ()   \nimprimante                    \nimprimante ou serveur","SetForm ()      \nimprimante                    \nimprimante ou serveur","GetForm ()      \nimprimante                    \nimprimante","On ne peut pas DeleteForm () sur une forme interne: ça échoue\navec ERROR_INVALID_PARAMETER.","On ne peut pas AddForm () un formulaire dont le nom ne respecte pas la casse\nexiste déjà: il échoue avec ERROR_FILE_EXISTS.","Il est possible de AddForm () une forme &quot;intégrée&quot;, mais c&#39;est\nnéanmoins toujours stocké dans le registre. Mais une fois ajouté, il ne peut pas\nêtre supprimé avec l’API Forms: l’édition directe du registre est\nChamps obligatoires. Cela suggère des formes &quot;véritables intégrées&quot; et &quot;intégrées&quot;, qui\nl&#39;API Forms ne discute pas. Nous pensons que l&#39;ajout de formes &quot;intégrées&quot;\nvia l&#39;API est une mauvaise idée.\nle GetForm () L&#39;appel d&#39;API ne fonctionnera pas avec un handle vers un serveur d&#39;impression,\nseulement une poignée à une imprimante elle-même: on ne voit pas pourquoi c&#39;est le cas.","Lors de la manipulation de la base de données de formulaires via le registre, il faut arrêter\net démarrez le spouleur (par exemple NETTOYEUR DE BUTÉE suivi par\nSPOOLER NET START à partir de la ligne de commande MS-DOS, ou utilisez la commande\nInterface graphique des services du Panneau de configuration) pour qu’elle prenne effet. Suppression\nune entrée de registre pour un formulaire ne permet pas au spouleur d&#39;oublier la\nversion en mémoire immédiatement.","Lorsque vous utilisez le SetForm () API, on fournit à la fois le nom\ndans l&#39;appel de l&#39;API et à l&#39;intérieur de la structure FORM_INFO_1, donc\nsuggère que l&#39;on peut Renommer un formulaire avec:","finfo.pName = &quot;NewForm&quot;;\n...\nSetForm (hPrinter, &quot;OldForm&quot;, 1, &amp; finfo);","mais ça ne marche pas bien. Nouvelle forme est ajouté au registre avec\nles dimensions mises à jour, et OldForm reste avec les anciens, mais\ncela n&#39;est pas visible via l&#39;API de formulaires. Au lieu de cela, l&#39;ancien formulaire est mis à jour\navec les nouvelles dimensions. Le redémarrage du service de spouleur rend visible\nles paramètres du registre, y compris en laissant l&#39;ancien formulaire.","Cela ressemble à un bug.","Windows fournit un moyen de visualiser et de gérer tous les formulaires (intégrés et\nsinon), et on y parvient en ouvrant le Imprimantes applet de\nle panneau de contrôle. Tirer vers le bas Fichier: Propriétés du serveur du haut\nmenu:","qui ouvre la boîte de dialogue de gestion des formulaires:","Certaines formes &#8211; comme Lettre montré ici &#8211; sont intégrés et ne sont pas disponibles\npour modifier ou supprimer, mais tous les formulaires qui ont été ajoutés par l&#39;utilisateur ou une impression\nle programme d&#39;installation du pilote peut être géré directement.","Bien que l’interface graphique permette l’utilisation des unités de mesure anglaise et métrique,\nintérieurement tout les formes sont mesurées au millième de millimètre.","Pratiquement toutes les imprimantes compatibles PostScript utilisent l’imprimante Adobe / Microsoft.\npilote, et il est assez complet. Plutôt que de modifier le pilote lui-même\nadapter son comportement aux capacités de l’imprimante, l’un à la place\nfournit un fichier PPD (Postscript Printer Description) qui caractérise\nle périphérique de sortie.","La création d’un PPD va bien au-delà de la portée de ce conseil technique, mais une section\nse rapporte à l&#39;API Forms. le PaperDimension les balises décrivent toutes les\nformats de support pris en charge par cette imprimante, et le pilote les rend disponibles\nà l&#39;application.","*% === Dimension du papier ======================\n* DefaultPaperDimension: 14x17\n* Lettre PaperDimension: &quot;612 792&quot;\n* PaperDimension A4: &quot;595 842&quot;\n* PaperDimension 8x10: &quot;576 720&quot;\n* PaperDimension 11x14: &quot;792 1008&quot;\n* PaperDimension 14x17: &quot;1008 1224&quot;","Cette partie est documentée dans le Adobe\nSpécification PPD (PDF), mais l’interaction entre les PaperDimension\nbalise et l’API de formulaire ne l’est pas. Nous avons constaté un comportement très déconcertant.","Quand une imprimante est installée, le .PPD le fichier est copié profondément dans le\nHiérarchie Windows, et sur notre système Windows 2000, il est stocké dans cette\nannuaire:","C:  WINNT  system32  spool  drivers  w32x86  3","le .PPD le fichier est &quot;compilé&quot; dans un binaire .BPD déposer chaque fois que le\nle pilote voit que le fichier source a changé &#8211; cela semble arriver à tout moment\nun nouveau travail d’impression commence et il rend probablement le pilote plus rapide en raison de la\nl&#39;analyse réduite du fichier.","Certains changements dans le .PPD sont reflétés immédiatement, ce qui le rend facile\npour tester un PPD. En le modifiant simplement sur place, le prochain travail d&#39;impression est recompilé\nle fichier et lit les paramètres. Mais d&#39;autres attributs, y compris les médias\ntailles &#8211; ne sont reconsidérés que lorsque le pilote est installé ou mis à jour.","Dans tous les cas, il ne semble pas exister de mécanisme de retour d’erreur pour\nerreurs syntaxiques ou sémantiques. Nous souhaitons que MS / Adobe fournisse un\n&quot;Validateur PPD&quot; utilisant la même logique d&#39;analyse que le pilote\n(peut-être exposé par une API dans le pilote lui-même) &#8211; cela nous permettrait\npour attraper des erreurs stupides à l&#39;avant.","Le plus gros problème avec le pilote jusqu’à présent est l’intégration avec les formulaires.\nAPI: en traitant les descriptions de support, il tente de résoudre le PPD\ntailles avec celles trouvées dans la base de données. Il semble que si le nom du média\nest déjà dans la base de données mais les dimensions ne correspondent pas exactement, cette\net tous les noms de média PPD suivants sont ignoré.","Non seulement ces noms ne sont pas ajoutés à la base de données, mais ils ne sont même pas\najouté à la liste des supports valides pris en charge par cette imprimante &#8211; c&#39;est comme s&#39;ils\nn&#39;ont même pas été trouvés dans le PPD.","Dans la liste ci-dessus de PaperDimensions, si la taille à (disons) 8&#215;10 ne\ncorrespond à ce qui se trouve dans la base de données de formulaires, ceci et tous les supports suivants sont\nignoré. Cela signifie que l&#39;interface graphique de configuration de l&#39;imprimante affiche uniquement les formats Letter et A4.\nen tant que support valide.","La seule solution à ce problème consiste à examiner la base de données de formulaires à l&#39;avance.\net supprimez tous les formulaires préexistants qui ne correspondent pas à la bonne taille. Nous ne\nvoyez un moyen simple de le faire avec le mécanisme d&#39;installation d&#39;imprimante standard:\nNous avons dû développer un code C ++ personnalisé qui supprime les entrées non correspondantes\net repeuple les formes avec les tailles appropriées.","Click to rate this post!\n                                   \n                               [Total: 0  Average: 0]"],"content_blocks":[{"id":"text-1","type":"text","heading":"","plain_text":"La plupart des imprimantes prennent en charge plusieurs formats de papier, chacun pouvant être sélectionné à partir du\nmenu de configuration de l&#39;imprimante. Ces tailles incluent Lettre, A4, Légal,\net similaires (bien qu&#39;il y ait des centaines de tailles standard utilisées\nà travers le monde). Le système d’impression sous Windows NT / 2K / XP OS a\nun mécanisme centralisé de gestion des formats de papier nommés via un\n&quot;API de formulaires&quot;.","html":"<p>La plupart des imprimantes prennent en charge plusieurs formats de papier, chacun pouvant être sélectionné à partir du\nmenu de configuration de l&#039;imprimante. Ces tailles incluent Lettre, A4, Légal,\net similaires (bien qu&#039;il y ait des centaines de tailles standard utilisées\nà travers le monde). Le système d’impression sous Windows NT / 2K / XP OS a\nun mécanisme centralisé de gestion des formats de papier nommés via un\n&quot;API de formulaires&quot;.</p>"},{"id":"text-2","type":"text","heading":"","plain_text":"La plupart des utilisateurs ne seront pas directement exposés au système de formulaires, mais\nun projet récemment en construisant un PPD (Postscript Printer Description)\npour l’imprimante d’un client, nous avons jugé nécessaire de devenir beaucoup plus\nfamilier avec ce que nous voulions.","html":"<p>La plupart des utilisateurs ne seront pas directement exposés au système de formulaires, mais\nun projet récemment en construisant un PPD (Postscript Printer Description)\npour l’imprimante d’un client, nous avons jugé nécessaire de devenir beaucoup plus\nfamilier avec ce que nous voulions.</p>"},{"id":"text-3","type":"text","heading":"","plain_text":"Notre recherche a été effectuée sur Windows 2000 avec SP4.\nNous espérons que nos découvertes seront utiles aux autres.","html":"<p>Notre recherche a été effectuée sur Windows 2000 avec SP4.\nNous espérons que nos découvertes seront utiles aux autres.</p>"},{"id":"text-4","type":"text","heading":"","plain_text":"La gestion de la base de données de formulaires se fait avec cinq fonctions API\nfourni par WINSPOOL.LIB:","html":"<p>La gestion de la base de données de formulaires se fait avec cinq fonctions API\nfourni par WINSPOOL.LIB:</p>"},{"id":"text-5","type":"text","heading":"","plain_text":"Un &quot;formulaire&quot; est un nom pour un certain type de support et toutes les imprimantes.\npartager la base de données commune. Chaque formulaire est décrit par un \nFORM_INFO_1    structure composée de quatre membres:","html":"<p>Un &quot;formulaire&quot; est un nom pour un certain type de support et toutes les imprimantes.\npartager la base de données commune. Chaque formulaire est décrit par un \nFORM_INFO_1    structure composée de quatre membres:</p>"},{"id":"text-6","type":"text","heading":"","plain_text":"FORM_INFO_1.pName \n    Le nom de ce formulaire, qui doit être unique dans tous les formulaires\nsystème. Le cas ne semble pas avoir d&#39;importance.\n    FORM_INFO_1.Size\n    Largeur et hauteur de la forme en millièmes de millimètre, et\nplusieurs formulaires peuvent avoir des tailles identiques. Ceci est représenté par un\nTAILLE L structure, avec cx et cy membres.\n    FORM_INFO_1.ImageableArea\n    le RECTL qui détient la zone imageable des médias en localisant\nles coins inférieur gauche et supérieur droit semblent être redondants. Bien que\nla disposition en quatre points de ce champ suggère qu&#39;ils représentent le\nla marge matérielle physique, dans la pratique, le coin inférieur gauche est toujours 0,0\net le coin supérieur droit est cx, cy.","html":"<p>FORM_INFO_1.pName \n    Le nom de ce formulaire, qui doit être unique dans tous les formulaires\nsystème. Le cas ne semble pas avoir d&#039;importance.\n    FORM_INFO_1.Size\n    Largeur et hauteur de la forme en millièmes de millimètre, et\nplusieurs formulaires peuvent avoir des tailles identiques. Ceci est représenté par un\nTAILLE L structure, avec cx et cy membres.\n    FORM_INFO_1.ImageableArea\n    le RECTL qui détient la zone imageable des médias en localisant\nles coins inférieur gauche et supérieur droit semblent être redondants. Bien que\nla disposition en quatre points de ce champ suggère qu&#039;ils représentent le\nla marge matérielle physique, dans la pratique, le coin inférieur gauche est toujours 0,0\net le coin supérieur droit est cx, cy.</p>"},{"id":"text-7","type":"text","heading":"","plain_text":"Heureusement, les marges matérielles sont ne pas reflété ici: bien que tous\n(Par exemple) Le format &quot;A4&quot; a les mêmes dimensions extérieures physiques, chacune\ntype d&#39;imprimante a ses propres restrictions. Il n&#39;y a pas moyen qu&#39;un seul média\nnom pourrait représenter plusieurs arrangements physiques.","html":"<p>Heureusement, les marges matérielles sont ne pas reflété ici: bien que tous\n(Par exemple) Le format &quot;A4&quot; a les mêmes dimensions extérieures physiques, chacune\ntype d&#039;imprimante a ses propres restrictions. Il n&#039;y a pas moyen qu&#039;un seul média\nnom pourrait représenter plusieurs arrangements physiques.</p>"},{"id":"text-8","type":"text","heading":"","plain_text":"FORM_INFO_1.Flags\n    Chaque formulaire peut être de trois types: FORM_BUILTIN,\nFORM_PRINTER et FORM_USER.\nLes formulaires intégrés font partie intégrante du système d’impression (TODO:\nquelle partie?), et ils ne peuvent pas être supprimés ou modifiés avec l’API Forms.\nLes formulaires &quot;Imprimante&quot; sont stockés dans le registre, de même que les formulaires &quot;Utilisateurs&quot;. le\nLa documentation de Microsoft suggère que les formulaires &quot;Imprimante&quot; soient associés\navec des imprimantes individuelles, mais nous n&#39;avons trouvé aucune indication indiquant qu&#39;ils\nsont autre chose que large du système et disponible pour tout imprimantes.\nNous n&#39;avons pas trouvé comment les formulaires &quot;utilisateur&quot; sont implémentés.","html":"<p>FORM_INFO_1.Flags\n    Chaque formulaire peut être de trois types: FORM_BUILTIN,\nFORM_PRINTER et FORM_USER.\nLes formulaires intégrés font partie intégrante du système d’impression (TODO:\nquelle partie?), et ils ne peuvent pas être supprimés ou modifiés avec l’API Forms.\nLes formulaires &quot;Imprimante&quot; sont stockés dans le registre, de même que les formulaires &quot;Utilisateurs&quot;. le\nLa documentation de Microsoft suggère que les formulaires &quot;Imprimante&quot; soient associés\navec des imprimantes individuelles, mais nous n&#039;avons trouvé aucune indication indiquant qu&#039;ils\nsont autre chose que large du système et disponible pour tout imprimantes.\nNous n&#039;avons pas trouvé comment les formulaires &quot;utilisateur&quot; sont implémentés.</p>"},{"id":"text-9","type":"text","heading":"","plain_text":"La base de données des formulaires utilisateur et d&#39;impression (mais pas des formulaires intégrés) est trouvée\ndans le registre:","html":"<p>La base de données des formulaires utilisateur et d&#039;impression (mais pas des formulaires intégrés) est trouvée\ndans le registre:</p>"},{"id":"text-10","type":"text","heading":"","plain_text":"HKEY_LOCAL_MACHINE  SYSTEM  CurrentControlSet  Control  Print  Forms","html":"<p>HKEY_LOCAL_MACHINE  SYSTEM  CurrentControlSet  Control  Print  Forms</p>"},{"id":"text-11","type":"text","heading":"","plain_text":"Il est possible de supprimer ou de renommer directement les noms de formulaire dans le registre,\nmais bien sûr, c&#39;est une idée terrible: utilisez plutôt l&#39;API Forms.","html":"<p>Il est possible de supprimer ou de renommer directement les noms de formulaire dans le registre,\nmais bien sûr, c&#039;est une idée terrible: utilisez plutôt l&#039;API Forms.</p>"},{"id":"text-12","type":"text","heading":"","plain_text":"Nous avons observé plusieurs éléments de comportement de l’API Forms qui sont:\npas strictement documenté. Nous allons les aborder ici.","html":"<p>Nous avons observé plusieurs éléments de comportement de l’API Forms qui sont:\npas strictement documenté. Nous allons les aborder ici.</p>"},{"id":"text-13","type":"text","heading":"","plain_text":"Tous les appels d’API nécessitent un HANDLE vers une imprimante ou un serveur d’impression,\nmais ils ne sont pas complètement interchangeables.","html":"<p>Tous les appels d’API nécessitent un HANDLE vers une imprimante ou un serveur d’impression,\nmais ils ne sont pas complètement interchangeables.</p>"},{"id":"text-14","type":"text","heading":"","plain_text":"API      \nNT4      \nWin2000","html":"<p>API      \nNT4      \nWin2000</p>"},{"id":"text-15","type":"text","heading":"","plain_text":"EnumForms ()    \nimprimante                    \nimprimante ou serveur","html":"<p>EnumForms ()    \nimprimante                    \nimprimante ou serveur</p>"},{"id":"text-16","type":"text","heading":"","plain_text":"AddForm ()      \nimprimante                    \nimprimante ou serveur","html":"<p>AddForm ()      \nimprimante                    \nimprimante ou serveur</p>"},{"id":"text-17","type":"text","heading":"","plain_text":"DeleteForm ()   \nimprimante                    \nimprimante ou serveur","html":"<p>DeleteForm ()   \nimprimante                    \nimprimante ou serveur</p>"},{"id":"text-18","type":"text","heading":"","plain_text":"SetForm ()      \nimprimante                    \nimprimante ou serveur","html":"<p>SetForm ()      \nimprimante                    \nimprimante ou serveur</p>"},{"id":"text-19","type":"text","heading":"","plain_text":"GetForm ()      \nimprimante                    \nimprimante","html":"<p>GetForm ()      \nimprimante                    \nimprimante</p>"},{"id":"text-20","type":"text","heading":"","plain_text":"On ne peut pas DeleteForm () sur une forme interne: ça échoue\navec ERROR_INVALID_PARAMETER.","html":"<p>On ne peut pas DeleteForm () sur une forme interne: ça échoue\navec ERROR_INVALID_PARAMETER.</p>"},{"id":"text-21","type":"text","heading":"","plain_text":"On ne peut pas AddForm () un formulaire dont le nom ne respecte pas la casse\nexiste déjà: il échoue avec ERROR_FILE_EXISTS.","html":"<p>On ne peut pas AddForm () un formulaire dont le nom ne respecte pas la casse\nexiste déjà: il échoue avec ERROR_FILE_EXISTS.</p>"},{"id":"text-22","type":"text","heading":"","plain_text":"Il est possible de AddForm () une forme &quot;intégrée&quot;, mais c&#39;est\nnéanmoins toujours stocké dans le registre. Mais une fois ajouté, il ne peut pas\nêtre supprimé avec l’API Forms: l’édition directe du registre est\nChamps obligatoires. Cela suggère des formes &quot;véritables intégrées&quot; et &quot;intégrées&quot;, qui\nl&#39;API Forms ne discute pas. Nous pensons que l&#39;ajout de formes &quot;intégrées&quot;\nvia l&#39;API est une mauvaise idée.\nle GetForm () L&#39;appel d&#39;API ne fonctionnera pas avec un handle vers un serveur d&#39;impression,\nseulement une poignée à une imprimante elle-même: on ne voit pas pourquoi c&#39;est le cas.","html":"<p>Il est possible de AddForm () une forme &quot;intégrée&quot;, mais c&#039;est\nnéanmoins toujours stocké dans le registre. Mais une fois ajouté, il ne peut pas\nêtre supprimé avec l’API Forms: l’édition directe du registre est\nChamps obligatoires. Cela suggère des formes &quot;véritables intégrées&quot; et &quot;intégrées&quot;, qui\nl&#039;API Forms ne discute pas. Nous pensons que l&#039;ajout de formes &quot;intégrées&quot;\nvia l&#039;API est une mauvaise idée.\nle GetForm () L&#039;appel d&#039;API ne fonctionnera pas avec un handle vers un serveur d&#039;impression,\nseulement une poignée à une imprimante elle-même: on ne voit pas pourquoi c&#039;est le cas.</p>"},{"id":"text-23","type":"text","heading":"","plain_text":"Lors de la manipulation de la base de données de formulaires via le registre, il faut arrêter\net démarrez le spouleur (par exemple NETTOYEUR DE BUTÉE suivi par\nSPOOLER NET START à partir de la ligne de commande MS-DOS, ou utilisez la commande\nInterface graphique des services du Panneau de configuration) pour qu’elle prenne effet. Suppression\nune entrée de registre pour un formulaire ne permet pas au spouleur d&#39;oublier la\nversion en mémoire immédiatement.","html":"<p>Lors de la manipulation de la base de données de formulaires via le registre, il faut arrêter\net démarrez le spouleur (par exemple NETTOYEUR DE BUTÉE suivi par\nSPOOLER NET START à partir de la ligne de commande MS-DOS, ou utilisez la commande\nInterface graphique des services du Panneau de configuration) pour qu’elle prenne effet. Suppression\nune entrée de registre pour un formulaire ne permet pas au spouleur d&#039;oublier la\nversion en mémoire immédiatement.</p>"},{"id":"text-24","type":"text","heading":"","plain_text":"Lorsque vous utilisez le SetForm () API, on fournit à la fois le nom\ndans l&#39;appel de l&#39;API et à l&#39;intérieur de la structure FORM_INFO_1, donc\nsuggère que l&#39;on peut Renommer un formulaire avec:","html":"<p>Lorsque vous utilisez le SetForm () API, on fournit à la fois le nom\ndans l&#039;appel de l&#039;API et à l&#039;intérieur de la structure FORM_INFO_1, donc\nsuggère que l&#039;on peut Renommer un formulaire avec:</p>"},{"id":"text-25","type":"text","heading":"","plain_text":"finfo.pName = &quot;NewForm&quot;;\n...\nSetForm (hPrinter, &quot;OldForm&quot;, 1, &amp; finfo);","html":"<p>finfo.pName = &quot;NewForm&quot;;\n...\nSetForm (hPrinter, &quot;OldForm&quot;, 1, &amp; finfo);</p>"},{"id":"text-26","type":"text","heading":"","plain_text":"mais ça ne marche pas bien. Nouvelle forme est ajouté au registre avec\nles dimensions mises à jour, et OldForm reste avec les anciens, mais\ncela n&#39;est pas visible via l&#39;API de formulaires. Au lieu de cela, l&#39;ancien formulaire est mis à jour\navec les nouvelles dimensions. Le redémarrage du service de spouleur rend visible\nles paramètres du registre, y compris en laissant l&#39;ancien formulaire.","html":"<p>mais ça ne marche pas bien. Nouvelle forme est ajouté au registre avec\nles dimensions mises à jour, et OldForm reste avec les anciens, mais\ncela n&#039;est pas visible via l&#039;API de formulaires. Au lieu de cela, l&#039;ancien formulaire est mis à jour\navec les nouvelles dimensions. Le redémarrage du service de spouleur rend visible\nles paramètres du registre, y compris en laissant l&#039;ancien formulaire.</p>"},{"id":"text-27","type":"text","heading":"","plain_text":"Cela ressemble à un bug.","html":"<p>Cela ressemble à un bug.</p>"},{"id":"text-28","type":"text","heading":"","plain_text":"Windows fournit un moyen de visualiser et de gérer tous les formulaires (intégrés et\nsinon), et on y parvient en ouvrant le Imprimantes applet de\nle panneau de contrôle. Tirer vers le bas Fichier: Propriétés du serveur du haut\nmenu:","html":"<p>Windows fournit un moyen de visualiser et de gérer tous les formulaires (intégrés et\nsinon), et on y parvient en ouvrant le Imprimantes applet de\nle panneau de contrôle. Tirer vers le bas Fichier: Propriétés du serveur du haut\nmenu:</p>"},{"id":"text-29","type":"text","heading":"","plain_text":"qui ouvre la boîte de dialogue de gestion des formulaires:","html":"<p>qui ouvre la boîte de dialogue de gestion des formulaires:</p>"},{"id":"text-30","type":"text","heading":"","plain_text":"Certaines formes &#8211; comme Lettre montré ici &#8211; sont intégrés et ne sont pas disponibles\npour modifier ou supprimer, mais tous les formulaires qui ont été ajoutés par l&#39;utilisateur ou une impression\nle programme d&#39;installation du pilote peut être géré directement.","html":"<p>Certaines formes &#8211; comme Lettre montré ici &#8211; sont intégrés et ne sont pas disponibles\npour modifier ou supprimer, mais tous les formulaires qui ont été ajoutés par l&#039;utilisateur ou une impression\nle programme d&#039;installation du pilote peut être géré directement.</p>"},{"id":"text-31","type":"text","heading":"","plain_text":"Bien que l’interface graphique permette l’utilisation des unités de mesure anglaise et métrique,\nintérieurement tout les formes sont mesurées au millième de millimètre.","html":"<p>Bien que l’interface graphique permette l’utilisation des unités de mesure anglaise et métrique,\nintérieurement tout les formes sont mesurées au millième de millimètre.</p>"},{"id":"text-32","type":"text","heading":"","plain_text":"Pratiquement toutes les imprimantes compatibles PostScript utilisent l’imprimante Adobe / Microsoft.\npilote, et il est assez complet. Plutôt que de modifier le pilote lui-même\nadapter son comportement aux capacités de l’imprimante, l’un à la place\nfournit un fichier PPD (Postscript Printer Description) qui caractérise\nle périphérique de sortie.","html":"<p>Pratiquement toutes les imprimantes compatibles PostScript utilisent l’imprimante Adobe / Microsoft.\npilote, et il est assez complet. Plutôt que de modifier le pilote lui-même\nadapter son comportement aux capacités de l’imprimante, l’un à la place\nfournit un fichier PPD (Postscript Printer Description) qui caractérise\nle périphérique de sortie.</p>"},{"id":"text-33","type":"text","heading":"","plain_text":"La création d’un PPD va bien au-delà de la portée de ce conseil technique, mais une section\nse rapporte à l&#39;API Forms. le PaperDimension les balises décrivent toutes les\nformats de support pris en charge par cette imprimante, et le pilote les rend disponibles\nà l&#39;application.","html":"<p>La création d’un PPD va bien au-delà de la portée de ce conseil technique, mais une section\nse rapporte à l&#039;API Forms. le PaperDimension les balises décrivent toutes les\nformats de support pris en charge par cette imprimante, et le pilote les rend disponibles\nà l&#039;application.</p>"},{"id":"text-34","type":"text","heading":"","plain_text":"*% === Dimension du papier ======================\n* DefaultPaperDimension: 14x17\n* Lettre PaperDimension: &quot;612 792&quot;\n* PaperDimension A4: &quot;595 842&quot;\n* PaperDimension 8x10: &quot;576 720&quot;\n* PaperDimension 11x14: &quot;792 1008&quot;\n* PaperDimension 14x17: &quot;1008 1224&quot;","html":"<p>*% === Dimension du papier ======================\n* DefaultPaperDimension: 14x17\n* Lettre PaperDimension: &quot;612 792&quot;\n* PaperDimension A4: &quot;595 842&quot;\n* PaperDimension 8x10: &quot;576 720&quot;\n* PaperDimension 11x14: &quot;792 1008&quot;\n* PaperDimension 14x17: &quot;1008 1224&quot;</p>"},{"id":"text-35","type":"text","heading":"","plain_text":"Cette partie est documentée dans le Adobe\nSpécification PPD (PDF), mais l’interaction entre les PaperDimension\nbalise et l’API de formulaire ne l’est pas. Nous avons constaté un comportement très déconcertant.","html":"<p>Cette partie est documentée dans le Adobe\nSpécification PPD (PDF), mais l’interaction entre les PaperDimension\nbalise et l’API de formulaire ne l’est pas. Nous avons constaté un comportement très déconcertant.</p>"},{"id":"text-36","type":"text","heading":"","plain_text":"Quand une imprimante est installée, le .PPD le fichier est copié profondément dans le\nHiérarchie Windows, et sur notre système Windows 2000, il est stocké dans cette\nannuaire:","html":"<p>Quand une imprimante est installée, le .PPD le fichier est copié profondément dans le\nHiérarchie Windows, et sur notre système Windows 2000, il est stocké dans cette\nannuaire:</p>"},{"id":"text-37","type":"text","heading":"","plain_text":"C:  WINNT  system32  spool  drivers  w32x86  3","html":"<p>C:  WINNT  system32  spool  drivers  w32x86  3</p>"},{"id":"text-38","type":"text","heading":"","plain_text":"le .PPD le fichier est &quot;compilé&quot; dans un binaire .BPD déposer chaque fois que le\nle pilote voit que le fichier source a changé &#8211; cela semble arriver à tout moment\nun nouveau travail d’impression commence et il rend probablement le pilote plus rapide en raison de la\nl&#39;analyse réduite du fichier.","html":"<p>le .PPD le fichier est &quot;compilé&quot; dans un binaire .BPD déposer chaque fois que le\nle pilote voit que le fichier source a changé &#8211; cela semble arriver à tout moment\nun nouveau travail d’impression commence et il rend probablement le pilote plus rapide en raison de la\nl&#039;analyse réduite du fichier.</p>"},{"id":"text-39","type":"text","heading":"","plain_text":"Certains changements dans le .PPD sont reflétés immédiatement, ce qui le rend facile\npour tester un PPD. En le modifiant simplement sur place, le prochain travail d&#39;impression est recompilé\nle fichier et lit les paramètres. Mais d&#39;autres attributs, y compris les médias\ntailles &#8211; ne sont reconsidérés que lorsque le pilote est installé ou mis à jour.","html":"<p>Certains changements dans le .PPD sont reflétés immédiatement, ce qui le rend facile\npour tester un PPD. En le modifiant simplement sur place, le prochain travail d&#039;impression est recompilé\nle fichier et lit les paramètres. Mais d&#039;autres attributs, y compris les médias\ntailles &#8211; ne sont reconsidérés que lorsque le pilote est installé ou mis à jour.</p>"},{"id":"text-40","type":"text","heading":"","plain_text":"Dans tous les cas, il ne semble pas exister de mécanisme de retour d’erreur pour\nerreurs syntaxiques ou sémantiques. Nous souhaitons que MS / Adobe fournisse un\n&quot;Validateur PPD&quot; utilisant la même logique d&#39;analyse que le pilote\n(peut-être exposé par une API dans le pilote lui-même) &#8211; cela nous permettrait\npour attraper des erreurs stupides à l&#39;avant.","html":"<p>Dans tous les cas, il ne semble pas exister de mécanisme de retour d’erreur pour\nerreurs syntaxiques ou sémantiques. Nous souhaitons que MS / Adobe fournisse un\n&quot;Validateur PPD&quot; utilisant la même logique d&#039;analyse que le pilote\n(peut-être exposé par une API dans le pilote lui-même) &#8211; cela nous permettrait\npour attraper des erreurs stupides à l&#039;avant.</p>"},{"id":"text-41","type":"text","heading":"","plain_text":"Le plus gros problème avec le pilote jusqu’à présent est l’intégration avec les formulaires.\nAPI: en traitant les descriptions de support, il tente de résoudre le PPD\ntailles avec celles trouvées dans la base de données. Il semble que si le nom du média\nest déjà dans la base de données mais les dimensions ne correspondent pas exactement, cette\net tous les noms de média PPD suivants sont ignoré.","html":"<p>Le plus gros problème avec le pilote jusqu’à présent est l’intégration avec les formulaires.\nAPI: en traitant les descriptions de support, il tente de résoudre le PPD\ntailles avec celles trouvées dans la base de données. Il semble que si le nom du média\nest déjà dans la base de données mais les dimensions ne correspondent pas exactement, cette\net tous les noms de média PPD suivants sont ignoré.</p>"},{"id":"text-42","type":"text","heading":"","plain_text":"Non seulement ces noms ne sont pas ajoutés à la base de données, mais ils ne sont même pas\najouté à la liste des supports valides pris en charge par cette imprimante &#8211; c&#39;est comme s&#39;ils\nn&#39;ont même pas été trouvés dans le PPD.","html":"<p>Non seulement ces noms ne sont pas ajoutés à la base de données, mais ils ne sont même pas\najouté à la liste des supports valides pris en charge par cette imprimante &#8211; c&#039;est comme s&#039;ils\nn&#039;ont même pas été trouvés dans le PPD.</p>"},{"id":"text-43","type":"text","heading":"","plain_text":"Dans la liste ci-dessus de PaperDimensions, si la taille à (disons) 8&#215;10 ne\ncorrespond à ce qui se trouve dans la base de données de formulaires, ceci et tous les supports suivants sont\nignoré. Cela signifie que l&#39;interface graphique de configuration de l&#39;imprimante affiche uniquement les formats Letter et A4.\nen tant que support valide.","html":"<p>Dans la liste ci-dessus de PaperDimensions, si la taille à (disons) 8&#215;10 ne\ncorrespond à ce qui se trouve dans la base de données de formulaires, ceci et tous les supports suivants sont\nignoré. Cela signifie que l&#039;interface graphique de configuration de l&#039;imprimante affiche uniquement les formats Letter et A4.\nen tant que support valide.</p>"},{"id":"text-44","type":"text","heading":"","plain_text":"La seule solution à ce problème consiste à examiner la base de données de formulaires à l&#39;avance.\net supprimez tous les formulaires préexistants qui ne correspondent pas à la bonne taille. Nous ne\nvoyez un moyen simple de le faire avec le mécanisme d&#39;installation d&#39;imprimante standard:\nNous avons dû développer un code C ++ personnalisé qui supprime les entrées non correspondantes\net repeuple les formes avec les tailles appropriées.","html":"<p>La seule solution à ce problème consiste à examiner la base de données de formulaires à l&#039;avance.\net supprimez tous les formulaires préexistants qui ne correspondent pas à la bonne taille. Nous ne\nvoyez un moyen simple de le faire avec le mécanisme d&#039;installation d&#039;imprimante standard:\nNous avons dû développer un code C ++ personnalisé qui supprime les entrées non correspondantes\net repeuple les formes avec les tailles appropriées.</p>"},{"id":"text-45","type":"text","heading":"","plain_text":"Click to rate this post!\n                                   \n                               [Total: 0  Average: 0]","html":"<p>Click to rate this post!\n                                   \n                               [Total: 0  Average: 0]</p>"}],"sections":[{"id":"text-1","heading":"Text","content":"La plupart des imprimantes prennent en charge plusieurs formats de papier, chacun pouvant être sélectionné à partir du\nmenu de configuration de l&#39;imprimante. Ces tailles incluent Lettre, A4, Légal,\net similaires (bien qu&#39;il y ait des centaines de tailles standard utilisées\nà travers le monde). Le système d’impression sous Windows NT / 2K / XP OS a\nun mécanisme centralisé de gestion des formats de papier nommés via un\n&quot;API de formulaires&quot;."},{"id":"text-2","heading":"Text","content":"La plupart des utilisateurs ne seront pas directement exposés au système de formulaires, mais\nun projet récemment en construisant un PPD (Postscript Printer Description)\npour l’imprimante d’un client, nous avons jugé nécessaire de devenir beaucoup plus\nfamilier avec ce que nous voulions."},{"id":"text-3","heading":"Text","content":"Notre recherche a été effectuée sur Windows 2000 avec SP4.\nNous espérons que nos découvertes seront utiles aux autres."},{"id":"text-4","heading":"Text","content":"La gestion de la base de données de formulaires se fait avec cinq fonctions API\nfourni par WINSPOOL.LIB:"},{"id":"text-5","heading":"Text","content":"Un &quot;formulaire&quot; est un nom pour un certain type de support et toutes les imprimantes.\npartager la base de données commune. Chaque formulaire est décrit par un \nFORM_INFO_1    structure composée de quatre membres:"},{"id":"text-6","heading":"Text","content":"FORM_INFO_1.pName \n    Le nom de ce formulaire, qui doit être unique dans tous les formulaires\nsystème. Le cas ne semble pas avoir d&#39;importance.\n    FORM_INFO_1.Size\n    Largeur et hauteur de la forme en millièmes de millimètre, et\nplusieurs formulaires peuvent avoir des tailles identiques. Ceci est représenté par un\nTAILLE L structure, avec cx et cy membres.\n    FORM_INFO_1.ImageableArea\n    le RECTL qui détient la zone imageable des médias en localisant\nles coins inférieur gauche et supérieur droit semblent être redondants. Bien que\nla disposition en quatre points de ce champ suggère qu&#39;ils représentent le\nla marge matérielle physique, dans la pratique, le coin inférieur gauche est toujours 0,0\net le coin supérieur droit est cx, cy."},{"id":"text-7","heading":"Text","content":"Heureusement, les marges matérielles sont ne pas reflété ici: bien que tous\n(Par exemple) Le format &quot;A4&quot; a les mêmes dimensions extérieures physiques, chacune\ntype d&#39;imprimante a ses propres restrictions. Il n&#39;y a pas moyen qu&#39;un seul média\nnom pourrait représenter plusieurs arrangements physiques."},{"id":"text-8","heading":"Text","content":"FORM_INFO_1.Flags\n    Chaque formulaire peut être de trois types: FORM_BUILTIN,\nFORM_PRINTER et FORM_USER.\nLes formulaires intégrés font partie intégrante du système d’impression (TODO:\nquelle partie?), et ils ne peuvent pas être supprimés ou modifiés avec l’API Forms.\nLes formulaires &quot;Imprimante&quot; sont stockés dans le registre, de même que les formulaires &quot;Utilisateurs&quot;. le\nLa documentation de Microsoft suggère que les formulaires &quot;Imprimante&quot; soient associés\navec des imprimantes individuelles, mais nous n&#39;avons trouvé aucune indication indiquant qu&#39;ils\nsont autre chose que large du système et disponible pour tout imprimantes.\nNous n&#39;avons pas trouvé comment les formulaires &quot;utilisateur&quot; sont implémentés."},{"id":"text-9","heading":"Text","content":"La base de données des formulaires utilisateur et d&#39;impression (mais pas des formulaires intégrés) est trouvée\ndans le registre:"},{"id":"text-10","heading":"Text","content":"HKEY_LOCAL_MACHINE  SYSTEM  CurrentControlSet  Control  Print  Forms"},{"id":"text-11","heading":"Text","content":"Il est possible de supprimer ou de renommer directement les noms de formulaire dans le registre,\nmais bien sûr, c&#39;est une idée terrible: utilisez plutôt l&#39;API Forms."},{"id":"text-12","heading":"Text","content":"Nous avons observé plusieurs éléments de comportement de l’API Forms qui sont:\npas strictement documenté. Nous allons les aborder ici."},{"id":"text-13","heading":"Text","content":"Tous les appels d’API nécessitent un HANDLE vers une imprimante ou un serveur d’impression,\nmais ils ne sont pas complètement interchangeables."},{"id":"text-14","heading":"Text","content":"API      \nNT4      \nWin2000"},{"id":"text-15","heading":"Text","content":"EnumForms ()    \nimprimante                    \nimprimante ou serveur"},{"id":"text-16","heading":"Text","content":"AddForm ()      \nimprimante                    \nimprimante ou serveur"},{"id":"text-17","heading":"Text","content":"DeleteForm ()   \nimprimante                    \nimprimante ou serveur"},{"id":"text-18","heading":"Text","content":"SetForm ()      \nimprimante                    \nimprimante ou serveur"},{"id":"text-19","heading":"Text","content":"GetForm ()      \nimprimante                    \nimprimante"},{"id":"text-20","heading":"Text","content":"On ne peut pas DeleteForm () sur une forme interne: ça échoue\navec ERROR_INVALID_PARAMETER."},{"id":"text-21","heading":"Text","content":"On ne peut pas AddForm () un formulaire dont le nom ne respecte pas la casse\nexiste déjà: il échoue avec ERROR_FILE_EXISTS."},{"id":"text-22","heading":"Text","content":"Il est possible de AddForm () une forme &quot;intégrée&quot;, mais c&#39;est\nnéanmoins toujours stocké dans le registre. Mais une fois ajouté, il ne peut pas\nêtre supprimé avec l’API Forms: l’édition directe du registre est\nChamps obligatoires. Cela suggère des formes &quot;véritables intégrées&quot; et &quot;intégrées&quot;, qui\nl&#39;API Forms ne discute pas. Nous pensons que l&#39;ajout de formes &quot;intégrées&quot;\nvia l&#39;API est une mauvaise idée.\nle GetForm () L&#39;appel d&#39;API ne fonctionnera pas avec un handle vers un serveur d&#39;impression,\nseulement une poignée à une imprimante elle-même: on ne voit pas pourquoi c&#39;est le cas."},{"id":"text-23","heading":"Text","content":"Lors de la manipulation de la base de données de formulaires via le registre, il faut arrêter\net démarrez le spouleur (par exemple NETTOYEUR DE BUTÉE suivi par\nSPOOLER NET START à partir de la ligne de commande MS-DOS, ou utilisez la commande\nInterface graphique des services du Panneau de configuration) pour qu’elle prenne effet. Suppression\nune entrée de registre pour un formulaire ne permet pas au spouleur d&#39;oublier la\nversion en mémoire immédiatement."},{"id":"text-24","heading":"Text","content":"Lorsque vous utilisez le SetForm () API, on fournit à la fois le nom\ndans l&#39;appel de l&#39;API et à l&#39;intérieur de la structure FORM_INFO_1, donc\nsuggère que l&#39;on peut Renommer un formulaire avec:"},{"id":"text-25","heading":"Text","content":"finfo.pName = &quot;NewForm&quot;;\n...\nSetForm (hPrinter, &quot;OldForm&quot;, 1, &amp; finfo);"},{"id":"text-26","heading":"Text","content":"mais ça ne marche pas bien. Nouvelle forme est ajouté au registre avec\nles dimensions mises à jour, et OldForm reste avec les anciens, mais\ncela n&#39;est pas visible via l&#39;API de formulaires. Au lieu de cela, l&#39;ancien formulaire est mis à jour\navec les nouvelles dimensions. Le redémarrage du service de spouleur rend visible\nles paramètres du registre, y compris en laissant l&#39;ancien formulaire."},{"id":"text-27","heading":"Text","content":"Cela ressemble à un bug."},{"id":"text-28","heading":"Text","content":"Windows fournit un moyen de visualiser et de gérer tous les formulaires (intégrés et\nsinon), et on y parvient en ouvrant le Imprimantes applet de\nle panneau de contrôle. Tirer vers le bas Fichier: Propriétés du serveur du haut\nmenu:"},{"id":"text-29","heading":"Text","content":"qui ouvre la boîte de dialogue de gestion des formulaires:"},{"id":"text-30","heading":"Text","content":"Certaines formes &#8211; comme Lettre montré ici &#8211; sont intégrés et ne sont pas disponibles\npour modifier ou supprimer, mais tous les formulaires qui ont été ajoutés par l&#39;utilisateur ou une impression\nle programme d&#39;installation du pilote peut être géré directement."},{"id":"text-31","heading":"Text","content":"Bien que l’interface graphique permette l’utilisation des unités de mesure anglaise et métrique,\nintérieurement tout les formes sont mesurées au millième de millimètre."},{"id":"text-32","heading":"Text","content":"Pratiquement toutes les imprimantes compatibles PostScript utilisent l’imprimante Adobe / Microsoft.\npilote, et il est assez complet. Plutôt que de modifier le pilote lui-même\nadapter son comportement aux capacités de l’imprimante, l’un à la place\nfournit un fichier PPD (Postscript Printer Description) qui caractérise\nle périphérique de sortie."},{"id":"text-33","heading":"Text","content":"La création d’un PPD va bien au-delà de la portée de ce conseil technique, mais une section\nse rapporte à l&#39;API Forms. le PaperDimension les balises décrivent toutes les\nformats de support pris en charge par cette imprimante, et le pilote les rend disponibles\nà l&#39;application."},{"id":"text-34","heading":"Text","content":"*% === Dimension du papier ======================\n* DefaultPaperDimension: 14x17\n* Lettre PaperDimension: &quot;612 792&quot;\n* PaperDimension A4: &quot;595 842&quot;\n* PaperDimension 8x10: &quot;576 720&quot;\n* PaperDimension 11x14: &quot;792 1008&quot;\n* PaperDimension 14x17: &quot;1008 1224&quot;"},{"id":"text-35","heading":"Text","content":"Cette partie est documentée dans le Adobe\nSpécification PPD (PDF), mais l’interaction entre les PaperDimension\nbalise et l’API de formulaire ne l’est pas. Nous avons constaté un comportement très déconcertant."},{"id":"text-36","heading":"Text","content":"Quand une imprimante est installée, le .PPD le fichier est copié profondément dans le\nHiérarchie Windows, et sur notre système Windows 2000, il est stocké dans cette\nannuaire:"},{"id":"text-37","heading":"Text","content":"C:  WINNT  system32  spool  drivers  w32x86  3"},{"id":"text-38","heading":"Text","content":"le .PPD le fichier est &quot;compilé&quot; dans un binaire .BPD déposer chaque fois que le\nle pilote voit que le fichier source a changé &#8211; cela semble arriver à tout moment\nun nouveau travail d’impression commence et il rend probablement le pilote plus rapide en raison de la\nl&#39;analyse réduite du fichier."},{"id":"text-39","heading":"Text","content":"Certains changements dans le .PPD sont reflétés immédiatement, ce qui le rend facile\npour tester un PPD. En le modifiant simplement sur place, le prochain travail d&#39;impression est recompilé\nle fichier et lit les paramètres. Mais d&#39;autres attributs, y compris les médias\ntailles &#8211; ne sont reconsidérés que lorsque le pilote est installé ou mis à jour."},{"id":"text-40","heading":"Text","content":"Dans tous les cas, il ne semble pas exister de mécanisme de retour d’erreur pour\nerreurs syntaxiques ou sémantiques. Nous souhaitons que MS / Adobe fournisse un\n&quot;Validateur PPD&quot; utilisant la même logique d&#39;analyse que le pilote\n(peut-être exposé par une API dans le pilote lui-même) &#8211; cela nous permettrait\npour attraper des erreurs stupides à l&#39;avant."},{"id":"text-41","heading":"Text","content":"Le plus gros problème avec le pilote jusqu’à présent est l’intégration avec les formulaires.\nAPI: en traitant les descriptions de support, il tente de résoudre le PPD\ntailles avec celles trouvées dans la base de données. Il semble que si le nom du média\nest déjà dans la base de données mais les dimensions ne correspondent pas exactement, cette\net tous les noms de média PPD suivants sont ignoré."},{"id":"text-42","heading":"Text","content":"Non seulement ces noms ne sont pas ajoutés à la base de données, mais ils ne sont même pas\najouté à la liste des supports valides pris en charge par cette imprimante &#8211; c&#39;est comme s&#39;ils\nn&#39;ont même pas été trouvés dans le PPD."},{"id":"text-43","heading":"Text","content":"Dans la liste ci-dessus de PaperDimensions, si la taille à (disons) 8&#215;10 ne\ncorrespond à ce qui se trouve dans la base de données de formulaires, ceci et tous les supports suivants sont\nignoré. Cela signifie que l&#39;interface graphique de configuration de l&#39;imprimante affiche uniquement les formats Letter et A4.\nen tant que support valide."},{"id":"text-44","heading":"Text","content":"La seule solution à ce problème consiste à examiner la base de données de formulaires à l&#39;avance.\net supprimez tous les formulaires préexistants qui ne correspondent pas à la bonne taille. Nous ne\nvoyez un moyen simple de le faire avec le mécanisme d&#39;installation d&#39;imprimante standard:\nNous avons dû développer un code C ++ personnalisé qui supprime les entrées non correspondantes\net repeuple les formes avec les tailles appropriées."},{"id":"text-45","heading":"Text","content":"Click to rate this post!\n                                   \n                               [Total: 0  Average: 0]"}],"media":{"primary_image":"https://tutos-gameserver.fr/wp-content/uploads/2019/07/winforms-01.gif"},"relations":[{"rel":"canonical","href":"https://tutos-gameserver.fr/2019/07/15/gestion-des-formulaires-win32-printserver-bien-choisir-son-serveur-d-impression/"},{"rel":"alternate","href":"https://tutos-gameserver.fr/2019/07/15/gestion-des-formulaires-win32-printserver-bien-choisir-son-serveur-d-impression/llm","type":"text/html"},{"rel":"alternate","href":"https://tutos-gameserver.fr/2019/07/15/gestion-des-formulaires-win32-printserver-bien-choisir-son-serveur-d-impression/llm.json","type":"application/json"},{"rel":"llm-manifest","href":"https://tutos-gameserver.fr/llm-endpoints-manifest.json","type":"application/json"}],"http_headers":{"X-LLM-Friendly":"1","X-LLM-Schema":"1.1.0","Content-Security-Policy":"default-src 'none'; img-src * data:; style-src 'unsafe-inline'"},"license":"CC BY-ND 4.0","attribution_required":true,"allow_cors":false}