03 juillet 2014
publié par 
L'impression physique d'un état et son aperçu dans le visualisateur de rapports sont des processus dépendants :
  • des API de Windows qui peuvent donc présenter des variantes d'une version à l'autre,
  • du pilote de l'imprimante et de son adéquation avec l'imprimante utilisée,
  • du mode de compilation 32 ou 64 bits,
  • des processus lancés en parallèle sur la station qui imprime...
Combiné au fait que chaque état a ses propres particularités en fonction de la disposition et du type de ses champs, et de ses blocs, chaque impression devient pratiquement un cas d'utilisation unique.

Dans la majeure partie des cas, cela n'a aucune incidence et une même édition donne toujours le même résultat. Mais, en fonction d'un état et/ou d'un pilote et/ou d'une version de Windows, un comportement inattendu peut survenir, c'est "l'exception qui va confirmer la règle" :
  • un rendu inattendu : espacement trop important de caractères, ou à l'inverse superposition,
  • message "l'état est trop large", "espace insuffisant sur le disque...",
  • une instabilité : processus figé "pas de réponse", processus arrêté sans message, RAM occupée par le processus ou dans le spool de Windows plus importante que sur d'autres stations ...
Le processus d'impression repose sur les api de Windows, qui vont s'appuyer sur le pilote de l'imprimante, la conduite à tenir en cas de difficulté consiste donc à suspecter en tout premier lieu le pilote de l'imprimante ! En effet, généralement une simple mise à jour du pilote à partir du site de son fabricant, ou parfois à l'inverse l'utilisation d'un pilote générique, supprime le défaut.

Lorsque ça n'est pas le cas, voici les actions pouvant être tentées au niveau de l'état en question. Sachant que la plupart des difficultés sont liées à la consommation mémoire, surtout si la compilation est en 32 bits car dans ce cas le système limite les possibilités d'allocation, elles visent principalement à réduire la consommation :

 

  • recompiler l'application avec la version 19 s'il s'agit d'une version antérieure, l'occupation mémoire étant moindre (nouveauté 75).
  • appeler la fonction iRAZ avant le lancement de l'édition.
  • augmenter sensiblement les marges de l'état si elles sont très proches des marges physiques de l'imprimante.
  • éviter de stocker tout le document à imprimer dans le spool de Windows. Cocher pour cela dans le volet "Options" de la description de l'état, l'option "Envoyer chaque page séparément à l'imprimante"

  • supprimer la transparence des images, si elle n'est pas utilisée. En effet à partir de la version 19 (nouveauté 73) la transparence est gérée ce qui peut avec certains pilotes augmenter la taille du travail d'impression dans le spool. Il suffit pour cela d'intervenir sur la description des images, volet "Style", afin de remplacer la transparence demandée dans la couleur de fond :

  • si la non conformité concerne la mise en forme de données en RTF (superposition de caractères, mots tronqués), inverser l'utilisation faite de l'option iRTFAvecImagesEtTableaux de la fonction iParamètre (l'avoir en paramètre des réglages des applications peut être un plus).
  • si des caractères se superposent, effectuer une recherche sur le site de Microsoft avec le nom de la polices de caractères. Des effets sont parfois spécifiques à certaines polices (palatino, Rotis, Raleway, Calibri, Candara...), et nécessitent la mise en place de contournement spécifiques. L'appel suivant avant l'état peut apporter une solution : iParamètre("PLACEMENTCARACTERE=VRAI")
  • dans le cas d'une imprimante relativement lente, ralentir l'envoi de l'impression par une temporisation de quelques secondes, après impression du bas de page, toutes les 10 pages par exemple. Idéalement le délai de temporisation sera paramétrable via les options de configurations de l'application. Cela permet une adaptation en situation en fonction des périphériques rencontrés, dans tous les cas où le matériel n'est pas connu à l'avance.
  • dans un contexte TSE limiter les sollicitations graphiques notamment s'il y a des restrictions dans les ressources de chaque utilisateur :

    SI EnModeTSE() ALORS FenDésactiveEffet(effetAnimation + effetCadreTranslucide + effetGFI + effetHalo)

  • la prévention d'exécution des données peut également impacter les processus d'impression.
  • la fonctionnalité EasyPrint de Windows pour les imprimantes partagées peut être très consommatrice de ressources. Au lieu d'avoir un pilote local utilisant un fichier spool standard, la station va devoir manipuler et transférer des archives zips très importantes. En 32 bits les limites d'allocations peuvent être atteintes. Le passage en 64 bits peut être une alternative, tout comme la désactivation de EasyPrint.

_________________________________

 

Si aucune solution ne s'applique, et qu'il ne s'agit pas d'une imprimante pour laquelle le fabricant ne propose plus de pilote, n'hésitez pas à soumettre le cas à notre support. Il suffit de formuler une demande par le menu "Aide" du volet "Accueil" de WINDEV. La demande doit nécessairement contenir :
  • détail du cas de figure (copie message, symptôme, configuration système, défaut en aperçu ou en impression physique ou les deux...),
  • constat au niveau de l'occupation mémoire du processus, et de l'impression dans le spool de Windows,
  • lien permettant d'obtenir le pilote d'imprimante concerné,
  • lien vers un serveur web ou ftp permettant de télécharger une archive zip contenant :
  • un projet de test,
  • une fenêtre commentée lançant le traitement d'édition (libellés explicatifs "cliquez ici, "observez que"...)
  • l'état en question lancé par la fenêtre,
  • si l'état ne peut pas être adapté pour imprimer des données statiques, "en dur", ajouter :
  • l'analyse (dossier \NomAnalyse.wdx\ ou \NomAnalyse.ana\ sans ses sous-dossiers)
  • un jeu de données *.FIC permettant l'exécution dans le cas d'une base HFSQL , un script SQL (fichier texte avec Create table et Insert) dans le cas d'une autre base.

 

< Retour

Publier un commentaire : 
Votre adresse email ne sera pas publiée