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çãoiMargincom 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:
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 :
//("xml","/nfeProc/protNFe/infProt/chNFe")
//("xml","/nfeProc/NFe/infNFe/ide/nNF")
//fazer a pesquisa e mostrar // do research and show // faire des recherches et spectacle
//vou fazer uma procedure interna pesquisa tag // i will make an internal tag search procedure
// je vais faire une procédure tag de recherche interne
INTERNAL PROCEDURE pesquisa(_recebe_tag,_recebe_arquivo_xml)
//vou criar string texto inicial e final //i will create string start and ent text
//je vais créer début de chaîne et le texte final
_texto_inicial is string="<"+_recebe_tag+">"
_texto_final is string="</"+_recebe_tag+">"
//criar uma posicao inicial e final //create an initital and final position //créer une position initiale et finale
_posicao_inicial is int=0
_posicao_final is int=0
//vou pegar a posição inicial // i´ll get the startion position //je vais prendre la position de départ
_posicao_inicial=PositionOccurrence(_recebe_arquivo_xml,_texto_inicial,firstRank,FromBeginning)+Length(_texto_inicial)
//vou pegar a posição final // i´ll get the final position // je vais prendre la position finale
_posicao_final=PositionOccurrence(_recebe_arquivo_xml,_texto_final,firstRank,FromBeginning)
//vou verificar se posição final maior inicial // i will check if initial higher end position // je vais vérifieir si la position iniale de haut de gamme
IF _posicao_final>_posicao_inicial THEN
//vou pegar o conteudo da tag // i´ll take the content of the tag //je vais prendrer le contenu de la balise
RESULT Middle(_recebe_arquivo_xml,_posicao_inicial,_posicao_final-_posicao_inicial)
ELSE
RESULT ""
END
//Acima exemplo do xml pegar chave nfe // Above example xml get key nfe // Au-dessus exemple xml obtenir nfe clé
EDT_ChaveNota=XMLRead("xml","/nfeProc/protNFe/infProt/chNFe")
//Vamos pegar numero nota fiscal // let-s take number invoice // prenons facture numéro
EDT_numero_nota=XMLRead("xml","/nfeProc/NFe/infNFe/ide/nNF")
//<?xml version="1.0" encoding="UTF-8"?>
//<nfeProc xmlns="http://www.portalfiscal.inf.br/nfe" versao="3.10">
//<NFe xmlns="http://www.portalfiscal.inf.br/nfe">
//<infNFe Id="NFe43160689054050000165550010011405341015943286" versao="3.10">
//<ide>
//<cUF>43</cUF>
//<cNF>01594328</cNF>
//<natOp>VENDA MERCADORIAS SUBST. TRIBUTARIA</natOp>
//<indPag>1</indPag>
//<mod>55</mod>
//<serie>1</serie>
//<nNF>1140534</nNF>
//<dhEmi>2016-06-24T00:00:00-03:00</dhEmi>
//Vamos pegar a data emissao// let´s get the date issuance // obtenons i´émission de date
s_data_emissao is string=XMLRead("xml","/nfeProc/NFe/infNFe/ide/dhEmi")
//2016-06-24
//1234567890
//Vou transformar data string em data// i´ll turn string date date // je vais chaîne de date jour tourne
d_data_emissao is Date=""
d_data_emissao..Day=s_data_emissao[[9 TO 10]]
d_data_emissao..Month=s_data_emissao[[6 TO 7]]
d_data_emissao..Year=s_data_emissao[[1 TO 4]]
EDT_data_emissao=d_data_emissao
//vou fazer o mesmo para cnpj e numero nota fiscal //i will do the same for cnpj number and invoice
// je vais faire la meme chose pour le numéro de cnpj et la facture
EDT_cnpj_emitente=XMLRead("XML","/nfeProc/NFe/infNFe/emit/CNPJ")
EDT_cnpj_destinatario=XMLRead("XML","/nfeProc/NFe/infNFe/dest/CNPJ")
IF EDT_cnpj_destinatario="" THEN
EDT_cnpj_destinatario="CPF:"+XMLRead("XML","/nfeProc/NFe/infNFe/dest/CPF")
END
EDT_valor_nota_fiscal=XMLRead("XML","/nfeProc/NFe/infNFe/total/ICMSTot/vNF")