quarta-feira, 6 de julho de 2016

WinDev - Impressão , Pdf, Margens








http://blogs.pcsoft.fr/blogs.awp


A maioria das impressoras têm margens físicas de vários milímetros, e por vezes mais de um centímetro. Por exemplo, se a margem de impressão deixada é de 4 mm, fisicamente unidades da impressora não pode imprimir na região de papel 0-4 mm, mesmo com uma chamada de função iMargin com zero de a margem esquerda, o início da impressão será de 4 mm a partir da borda esquerda.

PDF tem uma moldura vermelha corresponde exatamente com as margens físicas da impressora padrão configurado ao executar o código:

Quando programada edição destina-se apenas para a produção de um documento de PDF, pode ser vantajoso utilizar toda a superfície das páginas. Um truque de conseguir isso é simplesmente selecionar antes de editar a impressora do sistema "Microsoft XPS Document Writer." Na verdade, o piloto de impressora "virtual" para a vantagem de não ter de margem, ou o formato até mesmo definir. Podemos criar um documento sem margens ou com um tamanho de papel que não é aceite por uma impressora padrão. O seguinte código idêntico ao anterior, com a excepção de a escolha do controlador, torna possível representar os resultados:


Publié par

15:45 Lundi
04 Juil. 2016



[Billet publié dans le blog Le blog du ST]
La majeure partie des imprimantes disposent de marges physiques de quelques millimètres, et parfois de plus d'un centimètre. Par exemple si la marge gauche d'une imprimante est de 4 mm, physiquement les mécanismes d'entraînement de l'imprimante ne peuvent imprimer dans la zone de 0 à 4 mm du papier, même avec un appel de la fonction iMarge avec zéro pour la marge gauche, le début de l'impression sera à 4 mm du bord gauche.

Il est possible de se représenter les marges physiques d'une imprimante avec le code suivant :

iMarge(0,0,0,0)
iDestination(iPDFGénérique , "c:\temp\imp_marge.pdf")
iCadre(0,0,iLargeurPage,iHauteurPage,1,0,RougeClair,iContinu)
iImprimeZone("Le cadre tient compte de la marge physique de l'imprimante",0,10, iLargeurPage(), iHauteurPage(),iHaut+iCentreH)
iFinImprime ()
LanceAppliAssociée("c:\temp\imp_marge.pdf")

Le PDF obtenu aura un cadre rouge correspondant exactement aux marges physiques de l'imprimante configurée par défaut lors de l'exécution du code :

Lorsqu'une édition programmée est destinée uniquement à la production d'un document PDF, il peut être intéressant d'utiliser toute la surface des pages. Une astuce pour y parvenir consiste tout simplement à sélectionner avant l'édition l'imprimante système "Microsoft XPS Document Writer". En effet, ce pilote "virtuel" d'imprimante à l'avantage de n'avoir aucun marge, ni même de format imposé. On peut donc créer un document sans aucune marge, ou avec un format de papier qui ne serait pas accepté par une imprimante standard. Le code suivant identique au précédent, à l'exception du choix du pilote, permet de se représenter le résultat :

iConfigure("Microsoft XPS Document Writer")
iMarge(0,0,0,0)
iDestination(iPDF , "c:\temp\imp_sans_marge.pdf")
iCadre(0,0,iLargeurPage,iHauteurPage,1,0,RougeClair,iContinu)
iImprimeZone("Aucune marge le cadre est bien placé en 0x0 du document",0,10, iLargeurPage(), iHauteurPage(),iHaut+iCentreH)
iFinImprime ()

Le PDF obtenu a bien le cadre sur les bords du document :

Un cas pratique dans lequel ce pilote est utile : découper un PDF de N pages en N PDF d'une seule page. Sans utiliser ce pilote, le contenu des pages obtenues est décalé suivant les marges physiques de l'imprimante en cours. Exemple d'un code de découpage d'un PDF, conservant strictement la position des données du document PDF d'origine :

sFichierPDF est une chaîne = "<chemin>\PDF-N-PAGES.pdf"
sUnePagePDF est une chaîne
MonImage est une Image
iConfigure("Microsoft XPS Document Writer")
iMarge(0,0,0,0)
iParamètrePDF("","",iQualitéMaximale)
POUR nPage = 1 _A_ PDFNombreDePages(sFichierPDF)
 MonImage = PDFExtraitPage(sFichierPDF, nPage)
 sUnePagePDF = fExtraitChemin(sFichierPDF,fDisque+fRépertoire+fFichier)+"-"+nPage+".pdf"
 iDestination(iPDF,sUnePagePDF)
 iImprimeImage(MonImage,0,0,iLargeurPage(),iHauteurPage(),iAffichageNormal)
 iFinImprime()
FIN
















Nenhum comentário:

Postar um comentário

Teste

Teste
teste