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