Cria um objeto que permite visualizar e imprimir relatório.
Método construtor da classe.
FWMsPrinter(): New ( < cFilePrintert >, [ nDevice], [ lAdjustToLegacy], [ cPathInServer], [ lDisabeSetup ], [ lTReport], [ @oPrintSetup], [ cPrinter], [ lServer], [ lPDFAsPNG], [ lRaw], [ lViewPDF], [ nQtdCopy] ) --> oPrinter
Nome | Tipo | Descrição | Obrigatório | Referência |
cFilePrintert | Caracter | Nome do arquivo de relatório a ser criado (caracteres especiais podem ser removidos da string caso utilizados, pois geram problemas na geração e utilização do arquivo) | X | |
nDevice | Numérico | Tipos de Saída aceitos:IMP_SPOOL Envia para impressora.IMP_PDF Gera arquivo PDF à partir do relatório.Default é IMP_SPOOL | ||
lAdjustToLegacy | Lógico | Se .T. recalcula as coordenadas para manter o legado de proporções com a classe TMSPrinter. Default é .T.IMPORTANTE: Este cálculos não funcionam corretamente quando houver retângulos do tipo BOX e FILLRECT no relatório, podendo haver distorções de algumas pixels o que acarretará no encavalamento dos retângulos no momento da impressão. | ||
cPathInServer | Caracter | Diretório onde o arquivo de relatório será salvo | ||
lDisabeSetup | Lógico | Se .T. não exibe a tela de Setup, ficando à cargo do programador definir quando e se será feita sua chamada. Default é .F. | ||
lTReport | Lógico | Indica que a classe foi chamada pelo TReport. Default é .F. | ||
oPrintSetup | Objeto | Objeto FWPrintSetup instanciado pelo usuário. | X | |
cPrinter | Caracter | Impressora destino "forçada" pelo usuário. Default é "" | ||
lServer | Lógico | Indica impressão via Server (.REL Não será copiado para o Client). Default é .F. | ||
lParam10 | Lógico | Parâmetro descontinuado, mantido para compatibilidade. | ||
lRaw | Lógico | .T. indica impressão RAW/PCL, enviando para o dispositivo de impressão caracteres binários(RAW) ou caracteres programáveis específicos da impressora(PCL) | ||
lViewPDF | Lógico | Quando o tipo de impressão for PDF, define se arquivo será exibido após a impressão. O default é .T. | ||
nQtdCopy | Numérico | Define a quantidade de cópias a serem impressas quando utilizado o metodo de impressão igual a SPOOL. Recomendavel em casos aonde a utilização da classe FwMsPrinter se da por meio de eventos sem a intervenção do usuario (JOBs / Schedule por exemplo)Obs: Aplica-se apenas a ambientes que possuam o fonte FwMsPrinter.prw com data igual ou superior a 03/05/2012. | ||
lConvertFont | Lógico | .T. indica se converte o tamanho da fonte. Caso .F. não será feita a conversão. O Default é .T. | ||
lHasBuffer | Lógico | A partir da LIB 20240520 será disponibilizado o parâmetro lHasBuffer para definir se deverá ou não ser usado o Buffer de arquivo. Sendo .T. o indicativo para utilização do Buffer e .F. para não utilização. O Default .T. |
- Retorna o objeto criado.
lAdjustToLegacy := .F. lDisableSetup := .T. oPrinter := FWMSPrinter():New("Danfe.rel", IMP_PDF, lAdjustToLegacy, , lDisableSetup)// Ordem obrigátoria de configuração do relatório oPrinter:SetResolution(72) oPrinter:SetPortrait() oPrinter:SetPaperSize(DMPAPER_A4) oPrinter:SetMargin(60,60,60,60) // nEsquerda, nSuperior, nDireita, nInferior oPrinter:cPathPDF := "c:\directory\" // Caso seja utilizada impressão em IMP_PDF
Ativa a chave "Real Font Sizes" que diminui a divergência nos tamanhos de fonte encontrados entre impressões com saída PDF e Fila de Impressão. Faz com que as fontes do texto sejam exibidas em seu tamanho natural sem redimensionamentos. Documentos gerados em PDF, Fila de Impressão, Preview, etc, exibirão textos com tamanhos de fonte muito próximos entre si. Entretanto ainda é importante prever uma pequena margem de erro para que textos não fiquem truncados ou excedam seus limites previstos, isto deve-se ao fato de que a origem do arquivo de fontes usado na impressão pode variar dependendo da plataforma. Se este parâmetro for omitido, o sistema considera a chave desativada por padrão. Disponível somente em builds superiores à 7.00.121227P e a partir da versão 1.4.3 da TotvsPrinter.
FWMsPrinter(): SetParm ("-RFS" ) -->
oPrinter:SetParm( "-RFS")
Insere um retângulo no relatório.
FWMsPrinter(): Box ( < nRow>, < nCol>, < nBottom>, < nRight>, [ cPixel] ) -->
Nome | Tipo | Descrição | Obrigatório | Referência |
nRow | Numérico | Indica a coordenada vertical em pixels. | X | |
nCol | Numérico | Indica a coordenada horizontal em pixels. | X | |
nBottom | Numérico | Indica a posição do objeto em relação ao rodapé. | X | |
nRight | Numérico | Indica a posição do objeto à direita. | X | |
cPixel | Caracter | Expessura da linha em pixels. Default é "-2" |
oPrinter:Box( 130, 10, 600, 900, "-4")
Define cancelamento do relatorio.
FWMsPrinter(): Cancel ( ) -->
oPrinter:Cancel()
Retorna estado do relatório.
FWMsPrinter(): Canceled ( ) --> lRet
- ()
- Retorna se o relatório foi cancelado pelo método Cancel().
oPrinter:Canceled()
Devolve por referência, o valor convertido em pixels de uma coluna e uma linha.
FWMsPrinter(): Cmtr2Pix ( [ nLinha], [ nCol] ) -->
Nome | Tipo | Descrição | Obrigatório | Referência |
nLinha | Numérico | Indica a linha que será calculada. | ||
nCol | Numérico | Indica a coluna que será calculada. |
nCol1 := 10nRow1 := 10oPrinter:Cmtr2Pix( nCol1, nRow1)//Resultado//nCol1 := 1107.08955224//nRow1 := 1107.26600985
Imprime código de barra no padrão EAN13
Obs: A utilização deste método não é homologado para a impressão de relatórios em ambientes que utilizam sistema operacional com o recurso de "Zoom" ou "Lupa" ativo.
FWMsPrinter():EAN13(<nRow>, <nCol>, <cCodeBar>, <nTotalWidth>, <nHeight>)
Nome | Tipo | Descrição | Obrigatório | Referência |
nRow | Numérico | Posição relativa ao topo | X | |
nCol | Numérico | Posição relativa à esquerda | X | |
cCodeBar | Caracter | Texto a ser transformado em código de barra | X | |
nTotalWidth | Numérico | Largura total do código de barras | X | |
nHeight | Numérico | Altura da Barra | X |
#INCLUDE "RPTDEF.CH" #INCLUDE "FWPrintSetup.ch" #INCLUDE "protheus.ch" User Function MyCod128() Local lAdjustToLegacy := .F. Local lDisableSetup := .T. Local cLocal := "\spool" Local oPrinter oPrinter := FWMSPrinter():New("exemplo.rel", IMP_PDF, lAdjustToLegacy,cLocal, lDisableSetup, , , , , , .F., ) oPrinter:Say( 20, 30, "Código de barras EAN13:") oPrinter:Ean13(180/*nRow*/ ,280/*nCol*/,"876543210987"/*cCode*/,100/*nWidth*/,95/*nHeigth*/) oPrinter:Ean13(230/*nRow*/ ,450/*nCol*/,"987654321098"/*cCode*/,100/*nWidth*/,45/*nHeigth*/) oPrinter:Ean13(150/*nRow*/ ,30 /*nCol*/,"098765432109"/*cCode*/,186/*nWidth*/,95/*nHeigth*/) oPrinter:Ean13(300/*nRow*/ ,30 /*nCol*/,"123456789012"/*cCode*/,200/*nWidth*/,95/*nHeigth*/) oPrinter:Ean13(300/*nRow*/ ,300/*nCol*/,"900223631103"/*cCode*/,250/*nWidth*/,95/*nHeigth*/) oPrinter:Setup() if oPrinter:nModalResult == PD_OK oPrinter:Preview() EndIf Return
Imprime código de barra no padrão Code128
Obs: A utilização deste metodo não é homologado para a impressão de relatorios em ambientes que utilizam sistema operacional com o recurso de "Zoom" ou "Lupa" ativo.
FWMsPrinter():Code128(<nRow>, <nCol>, <cCodeBar>, <nWidth>, <nHeight>, [lSay], [oFont], [nTotalWidth])
Nome | Tipo | Descrição | Obrigatório | Referência |
nRow | Numérico | Posição relativa ao topo | X | |
nCol | Numérico | Posição relativa à esquerda | X | |
cCodeBar | Caracter | Texto a ser transformado em código de barra | X | |
nWidth | Numérico | Largura da Barra | X | |
nHeight | Numérico | Altura da Barra | X | |
lSay | Lógico | Indica se deve colocar say com o conteúdo em baixo do código de barras | ||
oFont | Objeto | Objeto TFont que fornecerá o oFont:nHeight para definição do Say | ||
nTotalWidth | Numérico | Indica largura total do código de barras (invalida o quarto parâmetro) |
#INCLUDE "RPTDEF.CH" #INCLUDE "FWPrintSetup.ch" #INCLUDE "protheus.ch" User Function MyCod128() Local lAdjustToLegacy := .F. Local lDisableSetup := .T. Local cLocal := "\spool" Local oPrinter oPrinter := FWMSPrinter():New("exemplo.rel", IMP_PDF, lAdjustToLegacy,cLocal, lDisableSetup, , , , , , .F., ) oPrinter:Say( 450, 30, "Código de barras CODE128:") oPrinter:Code128(470/*nRow*/ ,30/*nCol*/, "123456789011010"/*cCode*/,1/*nWidth*/,50/*nHeigth*/,.T./*lSay*/,,400) oPrinter:Code128(580/*nRow*/ ,30/*nCol*/, "12345678901"/*cCode*/,2/*nWidth*/,30/*nHeigth*/,.F./*lSay*/) oPrinter:Code128(650/*nRow*/ ,30/*nCol*/, "123456789011010"/*cCode*/,3/*nWidth*/,40/*nHeigth*/,.T./*lSay*/) oPrinter:Code128(720/*nRow*/ ,30/*nCol*/, "12345678901"/*cCode*/,4/*nWidth*/,95/*nHeigth*/,.T./*lSay*/,,100) oPrinter:Setup() if oPrinter:nModalResult == PD_OK oPrinter:Preview() EndIf Return
Imprime código de barra no padrão Code128C
Observações:
- A utilização deste método não é homologado para a impressão de relatórios em ambientes que utilizam sistema operacional com o recurso de "Zoom" ou "Lupa" ativo.
- Esse método trabalha sempre com caracteres em número par (1234, 457985), caso o parâmetro cCodeBar seja enviado com caracteres em quantidade ímpar (15782, 12345), será gerado um zero a mais no código de barras. Portanto fica na responsabilidade do desenvolvedor enviar ou não um zero no começo ou no final da string para compensar a quantidade ímpar de caracteres, exemplo "015782" ou "157820".
FWMsPrinter(): Code128C ( < nRow>, < nCol>, < cCodeBar>, < nSizeBar> ) -->
Nome | Tipo | Descrição | Obrigatório | Referência |
nRow | Numérico | Posição relativa ao topo | X | |
nCol | Numérico | Posição relativa à esquerda | X | |
cCodeBar | Caracter | Texto a ser transformado em código de barra | X | |
nSizeBar | Numérico | Tamanho da fonte (código de barra) | X |
#Include "PROTHEUS.CH" #Include "RPTDEF.CH" #INCLUDE "TBICONN.CH" User Function Code128C() Local oPrinter := Nil PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" oPrinter := FWMSPrinter():New('teste',6,.F.,,.T.,,,,,.F.) oPrinter:Setup() oPrinter:setDevice(IMP_PDF) oPrinter:cPathPDF :="C:\" oPrinter:Say(10,0,"Teste para Code128C") oPrinter:Code128c(100, 10, '1234567', 50) oPrinter:EndPage() oPrinter:Preview() FreeObj(oPrinter) oPrinter := Nil RESET ENVIRONMENT Return
FwMsBar
Imprime codigo de barras suportados pela função MsBar().Obs: A utilização deste metodo não é homologado para a impressão de relatorios em ambientes que utilizam sistema operacional com o recurso de "Zoom" ou "Lupa" ativo.
Sintaxe FWMsPrinter():FWMsBar(cTypeBar,nRow,nCol,cCode,oPrint,lCheck,Color,lHorz, nWidth,nHeigth,lBanner,cFont,cMode,lPrint,nPFWidth,nPFHeigth,lCmtr2Pix)-->
Parâmetros
Observações Este método utiliza-se da mesma classe utilizada pela MsBar(). Importante O valor mínimo para o parâmetro nWidth é de 0.0164. Valores abaixo deste farão com que a classe não imprima o código de barras.
Exemplos #INCLUDE "RPTDEF.CH" #INCLUDE "FWPrintSetup.ch" #INCLUDE "protheus.ch" User Function totvsprt() Local lAdjustToLegacy := .F. Local lDisableSetup := .T. Local oPrinter Local cLocal := "\spool" Local cCodINt25 := "34190184239878442204400130920002152710000053475" Local cCodEAN := "123456789012" oPrinter := FWMSPrinter():New("exemplo.rel", IMP_PDF, lAdjustToLegacy,cLocal, lDisableSetup, , , , , , .F., ) oPrinter:FWMSBAR("INT25" /*cTypeBar*/,1/*nRow*/ ,1/*nCol*/, cCodINt25/*cCode*/,oPrinter/*oPrint*/,.T./*lCheck*/,/*Color*/,.T./*lHorz*/,0.02/*nWidth*/,0.8/*nHeigth*/,.T./*lBanner*/,"Arial"/*cFont*/,NIL/*cMode*/,.F./*lPrint*/,2/*nPFWidth*/,2/*nPFHeigth*/,.F./*lCmtr2Pix*/ oPrinter:FWMSBAR("EAN13" /*cTypeBar*/,5/*nRow*/ ,1/*nCol*/ ,cCodEAN /*cCode*/,oPrinter/*oPrint*/,/*lCheck*/,/*Color*/,/*lHorz*/, /*nWidth*/,/*nHeigth*/,/*lBanner*/,/*cFont*/,/*cMode*/,.F./*lPrint*/,/*nPFWidth*/,/*nPFHeigth*/,/*lCmtr2Pix*/) oPrinter:Setup() if oPrinter:nModalResult == PD_OK oPrinter:Preview() EndIf Return |
Imprime codigo de barra no padrão DataMatrix
Obs: A utilização deste metodo não é homologado para a impressão de relatorios em ambientes que utilizam sistema operacional com o recurso de "Zoom" ou "Lupa" ativo.
FWMsPrinter(): DataMatrix ( < nCol>, < nRow>, < cCodeBar>, < nSizeBar> ) -->
Nome | Tipo | Descrição | Obrigatório | Referência |
nCol | Numérico | Posição relativa à esquerda | X | |
nRow | Numérico | Posição relativa ao topo | X | |
cCodeBar | Caracter | Texto a ser codificado | X | |
nSizeBar | Numérico | Tamanho do codigo de barras | X |
O código é gerado com suas dimensões naturais (que são os valores mínimos sugeridos pelo motor de geração de código de barras 2D), que irão variar de acordo com a quantidade de caracteres codificados.
No entanto, é importante ressaltar que até a versão 1.7.1 do agente TOTVSPrinter a imagem do código de barras não podia ser redimensionada para dimensões inferiores ao natural, porque poderia ficar corrompida, comprometendo a sua leitura. Sendo assim, era possível apenas passar um tamanho superior para que a imagem fosse escalada corretamente. Entretanto, a partir da versão 1.7.2 essa limitação foi removida, permitindo assim que as dimensões da imagem gerada possam ser escaladas para um tamanho inferior ao natural para que seja possível adequar-se a um espaço limitado e fixo, por exemplo. Assim, ao usar esse recurso, é preciso certificar-se de que, após o redimensionamento, um leitor ainda consegue interpretar corretamente as informações codificadas.
Os códigos de barras 2D possuem os seguintes limites da quantidade de caracteres:
- Data Matrix: No máximo 1200 caracteres
- QR Code: Aproximadamente 2930 caracteres
#Include "PROTHEUS.CH" #Include "RPTDEF.CH" #INCLUDE "TBICONN.CH" User Function DataMatrix() Local oPrinter PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" oPrinter := FWMSPrinter():New('teste',6,.F.,,.T.,,,,,.F.) oPrinter:Setup() oPrinter:setDevice(IMP_PDF) oPrinter:cPathPDF :="C:\" oPrinter:Say(180,0,"Teste para DataMatrix") oPrinter:DataMatrix(0,300,"DataMatrix gerado com sucesso", 100) oPrinter:EndPage() oPrinter:Preview() FreeObj(oPrinter) oPrinter := Nil RESET ENVIRONMENT Return
Insere uma elipse no relatório.
FWMsPrinter(): Ellipse ( < nLeft>, < nTop>, < nBottom>, < nRigth>, [ nColorIn], [ nColorOut], [ nLineType], [ cPixel] ) -->
Nome | Tipo | Descrição | Obrigatório | Referência |
nLeft | Numérico | Indica a coordenada horizontal em pixels. | X | |
nTop | Numérico | Indica a coordenada ao topo em pixels. | X | |
nBottom | Numérico | Indica a posição do objeto em relação ao rodapé. | X | |
nRigth | Numérico | Indica a posição do objeto à direita. | X | |
nColorIn | Numérico | Cor do preenchimento do elipse. Default CLR_BLACK. | ||
nColorOut | Numérico | Cor da linha do elipse. Default CLR_BLACK | ||
nLineType | Numérico | Estilo da linha. Default 0. Para mais informações sobre os tipos disponíveis, consulte a área Observações. | ||
cPixel | Caracter | Pixel no formato caractere exemplo “02”, caso necessário us de decimais utilize “-2” para 0,2 Pixels. |
Tabelas com as opções de linha disponíveis.
- 0 - Solid Line;
- 1 - Dash Line;
- 2 - Dash Dot Line;
- 3 - Dash Dot Dot Line;
- 4 - Dot Line;
- 5 - Custom Dash Line
oPrinter:Ellipse( 10, 10, 100, 100, CLR_BLACK, CLR_BLACK, 0, “-2”)
Cria um objeto do tipo retângulo, que pode ser preenchido com uma determinada cor.
FWMsPrinter(): FillRect ( < aCoords>, [ oBrush], [ cPixel] ) -->
Nome | Tipo | Descrição | Obrigatório | Referência |
aCoords | Vetor | Vetor de coordenadas {nTop,nLeft,nBottom,nRight} | X | |
oBrush | Objeto | Indica o objeto do tipo TBrush utilizado para definir a cor de preenchimento do shape e responsável pelo preenchimento do retângulo. | ||
cPixel | Caracter | Expessura da linha em pixels. Default é "-2" |
oBrush1 := TBrush():New( , CLR_YELLOW)oPrinter:Fillrect( {100, 10, 200, 200 }, oBrush1, "-2")
Retorna a largura dos caracteres de uma determinada fonte
FWMsPrinter(): GetFontWidths ( [ oFont], [ @aFontSize] ) --> aRet
Nome | Tipo | Descrição | Obrigatório | Referência |
oFont | Objeto | Objeto do tipo fonte | ||
aFontSize | Array of Record | Vetor passado por referencia que recebera a lista de largura da fonte selecionada | X |
- ()
- Vetor passado por referencia que recebera a lista de largura da fonte selecionada
Retorna a orientação (Retrato ou Paisagem) do objeto.
FWMsPrinter(): GetOrientation ( ) --> nOrientation
- ()
- Retorna orientação do relatório. Para mais informações sobre os retornos que podem ser apresentados, consulte a área Observações.
Tabela com os valores de retorno.
- 0 - Ainda não definido pelo usuário;
- 1 - Portrait(retrato);
- 2 - Landscape(paisagem)
oPrinter:GetOrientation()
Retorna a altura do texto, conforme as características da fonte definida.
FWMsPrinter(): GetTextHeight ( < cTexto>, < oFont> ) --> nHeight
Nome | Tipo | Descrição | Obrigatório | Referência |
cTexto | Caracter | Indica o texto que será calculado. | X | |
oFont | Objeto | Indica o objeto do tipo TFont, utilizado para definir as características da fonte e realizar o cálculo. | X |
- ()
- Retorna a altura do texto.
oFont1 := TFont():New( 'Courier New', , -18, .T.)nHeight := oPrinter:GetTextheight( "Teste", oFont1)
Retorna a largura do texto, conforme as características da fonte definida.
FWMsPrinter(): GetTextWidth ( < cTexto> , < oFont> , <nType> ) --> nWidth
Nome | Tipo | Descrição | Obrigatório | Referência |
cTexto | Caracter | Indica o texto que será calculado. | X | |
oFont | Objeto | Indica o objeto do tipo TFont, utilizado para definir as características da fonte e realizar o cálculo. | X | |
nType | Numérico | Informa o tipo de cálculo [1=GetFontPixWidths | 2=CalcFieldSize | 0=Default] |
- ()
- Retorna a largura do texto.
oFont1 := TFont():New( 'Courier New', , -18, .T.)nWidht := oPrinter:GetTextWidth( "Teste", oFont1,0)
Quando o tipo de impressão for PDF, retorna se o arquivo será exibido após a impressão.
FWMsPrinter(): GetViewPDF ( ) --> lViewPDF
- (logico)
- .T. para exibir o relatório após a impressão.
oPrinter:GetViewPDF()
Retorna se a impressora está ativa.
FWMsPrinter(): IsPrinterActive ( ) -->
oPrinter:IsPrinterActive()
Insere uma linha no relatório.
FWMsPrinter(): Line ( < nTop>, < nLeft>, < nBottom>, < nRight>, [ nColor], [ cPixel] ) -->
Nome | Tipo | Descrição | Obrigatório | Referência |
nTop | Numérico | Indica a coordenada vertical em pixels. | X | |
nLeft | Numérico | Indica a coordenada horizontal em pixels. | X | |
nBottom | Numérico | Indica a posição do objeto ao rodapé. | X | |
nRight | Numérico | Indica a posição do objeto à direita. | X | |
nColor | Numérico | Cor da linha. Default é 0 | ||
cPixel | Caracter | Expessura da linha em pixels. Default é "-2" |
oPrinter:Line( 130, 10, 130, 900, "-4")
Retorna a resolução horizontal da impressora configurada.
FWMsPrinter(): nHorzRes ( ) --> nResult
- ()
- Retorna a resolução horizontal da impressora configurada.
oPrinter:nHorzRes()
Retorno largura da página.
FWMsPrinter(): nHorzSize ( ) --> nHorzSize
- ()
- Largura da página
oPrinter:nHorzSize()
Retorna a resolução vertical, em pixels, da impressora configurada.
FWMsPrinter(): nLogPixelX ( ) --> nResult
- ()
- Retorna a resolução vertical em pixels da impressora configurada.
oPrinter:nLogPixelX()
Retorna a resolução horizontal, em pixels, da impressora configurada.
FWMsPrinter(): nLogPixelY ( ) --> nResult
- ()
- Retorna a resolução horizontal em pixels da impressora configurada.
oPrinter:nLogPixelY()
Retorna a resolução vertical da impressora configurada.
FWMsPrinter(): nVertRes ( ) --> nResult
- ()
- Retorna a resolução vertical da impressora configurada.
oPrinter:nVertRes()
Retorno altura da página.
FWMsPrinter(): nVertSize ( ) --> nVertSize
- ()
- Altura da página.
oPrinter:nVertSize()
Retorna o tamanho do papel.
FWMsPrinter(): PaperSize ( ) --> nPaperSize
- ()
- Tamanho do papel.
oPrinter:PaperSize()
Envia o relatório para impressora.
FWMsPrinter(): Preview ( ) -->
oPrinter:Preview()
Envia o relatório para impressora.
FWMsPrinter(): Print ( ) -->
oPrinter:Print()
Retorna o nome da impressora.
FWMsPrinter(): PrinterName ( ) --> cImpressora
- (caracter)
- Nome da impressora.
A imagem é ajustada para preencher todo o espaço definido entre a altura e largura do objeto.
oPrinter:PrinterName()
Imprime codigo de barra no padrão QRCode
FWMsPrinter(): QRCode ( < nRow>, < nCol>, < cCodeBar>, < nSizeBar> ) -->
Nome | Tipo | Descrição | Obrigatório | Referência |
nRow | Numérico | Posição relativa ao topo | X | |
nCol | Numérico | Posição relativa à esquerda | X | |
cCodeBar | Caracter | Texto a ser codificado | X | |
nSizeBar | Numérico | Tamanho do codigo de barras | X |
O código é gerado com suas dimensões naturais (que são os valores mínimos sugeridos pelo motor de geração de código de barras 2D), que irão variar de acordo com a quantidade de caracteres codificados.
No entanto, é importante ressaltar que até a versão 1.7.1 do agente TOTVSPrinter a imagem do código de barras não podia ser redimensionada para dimensões inferiores ao natural, porque poderia ficar corrompida, comprometendo a sua leitura. Sendo assim, era possível apenas passar um tamanho superior para que a imagem fosse escalada corretamente. Entretanto, a partir da versão 1.7.2 essa limitação foi removida, permitindo assim que as dimensões da imagem gerada possam ser escaladas para um tamanho inferior ao natural para que seja possível adequar-se a um espaço limitado e fixo, por exemplo. Assim, ao usar esse recurso, é preciso certificar-se de que, após o redimensionamento, um leitor ainda consegue interpretar corretamente as informações codificadas.
Os códigos de barras 2D possuem os seguintes limites da quantidade de caracteres:
- Data Matrix: No máximo 1200 caracteres
- QR Code: Aproximadamente 2930 caracteres
#Include "PROTHEUS.CH" #Include "RPTDEF.CH" #INCLUDE "TBICONN.CH" User Function QRCode() Local oPrinter PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" oPrinter := FWMSPrinter():New('teste',6,.F.,,.T.,,,,,.F.) oPrinter:Setup() oPrinter:setDevice(IMP_PDF) oPrinter:cPathPDF :="C:\" oPrinter:QRCode(150,150,"QR Code gerado com sucesso", 100) oPrinter:EndPage() oPrinter:Preview() FreeObj(oPrinter) oPrinter := Nil RESET ENVIRONMENT Return
Insere um texto no relatório.
FWMsPrinter(): Say ( < nRow>, < nCol>, < cText>, [ oFont], [ nWidth], [ nClrText], [ nAngle] ) -->
Nome | Tipo | Descrição | Obrigatório | Referência |
nRow | Numérico | Indica a coordenada vertical em pixels ou caracteres. | X | |
nCol | Numérico | Indica a coordenada horizontal em pixels ou caracteres. | X | |
cText | Caracter | Texto a ser impresso. | X | |
oFont | Objeto | Indica o objeto do tipo TFont utilizado para definir as características da fonte aplicada na exibição do conteúdo do controle visual. | ||
nWidth | Nulo | Indica a largura em pixels do objeto. | ||
nClrText | Numérico | Indica a cor do texto do objeto. | ||
nAngle | Numérico | Ângulo de rotação do texto. |
A imagem é ajustada para preencher todo o espaço definido entre a altura e largura do objeto.
oFont1 := TFont():New( "Courier New", , -18, .T.)oPrinter:Say( 10, 10, "texto para visualização", oFont1, 1400, CLR_HRED)
Cria um objeto do tipo texto, permitindo alinhamento Horizontal e Vertical.
FWMsPrinter(): SayAlign ( < nRow>, < nCol>, < cText>, [ oFont], [ nWidth], [ nHeigth], [ nClrText], [ nAlignHorz], [ nAlignVert ] ) -->
Nome | Tipo | Descrição | Obrigatório | Referência |
nRow | Numérico | Indica a coordenada vertical em pixels ou caracteres. | X | |
nCol | Numérico | Indica a coordenada horizontal em pixels ou caracteres. | X | |
cText | Caracter | Indica o texto que será impresso. | X | |
oFont | Objeto | Indica o objeto do tipo TFont utilizado para definir as características da fonte aplicada na exibição do conteúdo do controle visual. | ||
nWidth | Numérico | Indica a largura em pixels do objeto. | ||
nHeigth | Numérico | Indica a altura em pixels do objeto. | ||
nClrText | Numérico | Indica a cor do texto do objeto. | ||
nAlignHorz | Numérico | Alinhamento Horizontal. Para mais informações sobre os alinhamentos disponíveis, consulte a área Observações. | ||
nAlignVert | Numérico | Alinhamento Vertical. Para mais informações sobre os alinhamentos disponíveis, consulte a área Observações. |
Tabela de códigos de alinhamento horizontal.
- 0 - Alinhamento à esquerda;
- 1 - Alinhamento à direita;
- 2 - Alinhamento centralizado
3 - Alinhamento justificado. (Opção disponível somente a partir da versão 1.6.2 da TOTVS Printer.)
Tabela de códigos de alinhamento vertical.
- 0 - Alinhamento centralizado;
- 1 - Alinhamento superior;
- 2 - Alinhamento inferior
oFont1 := TFont():New('Courier new',,-18,.T.)oPrinter:SayAlign( 10,10,"Texto para visualização",oFont1,1400, 200, CLR_HRED, 0, 2 )
Insere uma imagem no relatório.
FWMsPrinter(): SayBitmap ( < nRow>, < nCol>, < cBitmap>, [ nWidth], [ nHeight] ) -->
Nome | Tipo | Descrição | Obrigatório | Referência |
nRow | Numérico | Indica a coordenada vertical em pixels ou caracteres. | X | |
nCol | Numérico | Indica a coordenada horizontal em pixels ou caracteres. | X | |
cBitmap | Caracter | Indica o diretório e o nome, com extensão BMP (Bitmap), da imagem. | X | |
nWidth | Numérico | Indica a largura em pixels do objeto. Default é 100. | ||
nHeight | Numérico | Indica a altura em pixels do objeto. Default é 100. |
A imagem é ajustada para preencher todo o espaço definido entre a altura e largura do objeto.
A impressão de imagens maiores que 1MB e a possibilidade de utilizar arquivos locais ou compartilhados via rede estarão disponiveis à partir da totvsPrinter versão 1.5.5.
Se o relatório for executado via SERVIDOR, essa máquina deverá ter acesso aos arquivos, caso as imagens estejam no drive local da estação onde serão executadas.
oPrinter:SayBitmap( 100, 200, "C:\Dir\totvs.bmp", 800, 800)
oPrinter:SayBitMap( 100, 200, "\\maquina\public\totvs.bmp", 2000, 2000) // Acesso a arquivos via rede.
Seleciona o dispositivo de impressao
FWMsPrinter(): SetDevice ( < nDevice> ) -->
Nome | Tipo | Descrição | Obrigatório | Referência |
nDevice | Numérico | Tipos de Saída aceitos: IMP_SPOOL Envia para impressora. IMP_PDF Gera arquivo PDF à partir do relatório. Default é IMP_SPOOL | X |
oPrint:SetDevice(IMP_SPOOL)
Define o fonte a ser utilizado no relatório.
FWMsPrinter(): SetFont ( < oFont>, < lForceFont> ) -->
Nome | Tipo | Descrição | Obrigatório | Referência |
oFont | Objeto | Objeto do tipo TFont. | X | |
lForceFont | Lógico | Se .T. atualiza a fonte do texto do relatório setada no TFont |
oFont1 := TFont():New('Courier new',,-18,.T.)oPrinter:SetFont(oFont1, .T.)
Define a orientação do relatório como paisagem (Landscape).
FWMsPrinter(): SetLandscape ( ) -->
oPrinter:SetLandscape()
Define a margem do relatório.
FWMsPrinter(): SetMargin ( < nLeft>, < nTop>, < nRight>, < nBottom> ) -->
Nome | Tipo | Descrição | Obrigatório | Referência |
nLeft | Numérico | Margem esquerda | X | |
nTop | Numérico | Margem superior | X | |
nRight | Numérico | Margem direita | X | |
nBottom | Numérico | Margem inferior | X |
oPrinter:SetMargin(10,10,10,10)
Define o tamanho que será adotado pela página a ser impressa.
FWMsPrinter(): SetPaperSize ( < nPaperSize>, [ nHeight], [ nWidth] ) -->
Nome | Tipo | Descrição | Obrigatório | Referência |
nPaperSize | Numérico | Indica o tamanho que será utilizado no papel. Para mais informações dos tipos de tamanho disponíveis, consulte a área Observações. | X | |
nHeight | Numérico | Altura da página. | ||
nWidth | Numérico | Largura da página. |
- 0 - Tamanho customizavel pelo usuario, informado em nHeight/nWidth. Aplicavel apenas em impressoes do tipo PDF.
- 1 - Letter 216mm x 279mm 637 x 823
- 3 - Tabloid 279mm x 432mm 823 x 1275
- 7 - Executive 184mm x 267mm 543 x 788
- 8 - A3 297mm x 420mm 876 x 1240
- 9 - A4 210mm x 297mm 620 x 876
oPrinter:setPaperSize(9)
Define a orientação do relatório como retrato (Portrait).
FWMsPrinter(): SetPortrait ( ) -->
oPrinter:SetPortrait()
Define resolução do relatório.
FWMsPrinter(): SetResolution ( [ nResolution] ) -->
Nome | Tipo | Descrição | Obrigatório | Referência |
nResolution | Numérico | Resolução do relatório. Default é 72 |
oPrinter:Resolution()
Apresenta a janela de configuração de impressoras.
FWMsPrinter(): Setup ( ) -->
oPrinter:Setup()
Quando o tipo de impressão for PDF, define se o arquivo será exibido após a impressão.
FWMsPrinter(): SetViewPDF ( < lViewPDF> ) -->
Nome | Tipo | Descrição | Obrigatório | Referência |
lViewPDF | Lógico | .T. para exibir o PDF após a impressão. | X |
// para não apresentar o PDF após a geração do relatório.oPrinter:SetViewPDF(.F.)
Imprime codigo de barra no padrão Pdf417FWMsPrinter(): pdf417( nRow, nCol, cCodeBar, nSizeBar,nHeight ) -->
oPrinter:pdf417( nRow, nCol, cCodeBar, nSizeBar,nHeight ) |
---|
Informa uma senha para a geração e visualização do PDF
FWMsPrinter(): SetPassword( < cPassword > )
Parâmetros
Nome | Tipo | Descrição | Obrigatório | Referência |
cPassword | Character | Senha para a geração e visualização do PDF | x |
A senha funciona apenas para a geração de PDF (IMP_PDF), qualquer outro formato não acatará a senha, como SPOOL ou outros. Esse método está disponível na lib 20230807 ou superior.
oPrinter:SetPassword("Daniel")
Retorna o status da geração do PDF que a printer gerou
FWMsPrinter(): GetStatusPrinter() → nStatusPrinter
Retorno
nStatusPrinter - numeric - Status da geração do PDF retornado pelo binário da printer
Esse status não deve ser utilizado para validar a geração bem sucedida do PDF. Esse método está disponível na lib 20231009 ou superior.
oPrinter:GetStatusPrinter()
Inicia a impressão de uma nova página
FWMsPrinter(): StartPage ( ) -->
oPrinter:StartPage()
Propriedade | Descrição | Tipo |
aImages | Lista de imagens do relatório. | Vetor |
cFileName | Nome do arquivo a ser gerado. | Caracter |
cFilePrint | Arquivo que conterá o binário do relatório. | Caracter |
cPathPDF | Path do arquivo PDF. | Caracter |
cPathPrint | Nome do diretório onde o relatório será gerado. | Caracter |
cPrinter | Nome da impressora para impressão do relatório. | Caracter |
cSession | Informações de configuração da impressora. | Caracter |
IsFirstPage | Determina se é a primeira página do relatório. | Array of Record |
lCanceled | Define se o relatório foi cancelado. | Lógico |
lInJob | Determina se o relatório está sendo executado via Job. | Lógico |
lServer | Indica impressão via Server (.REL Não será copiado para o Client). | Lógico |
lTReport | Indica que o relatório foi chamado pelo TReport. | Lógico |
lViewPDF | Indica se o arquivo será exibido após a impressão em PDF. | Lógico |
nDevice | Dispositivo de impressão. | Numérico |
nModalResult | Retorna o ModalResult do Setup, para que o usuário trate a informação | Numérico |
nPageCount | Quantidade de páginas do relatório. | Numérico |
nPageHeight | Altura da página. | Numérico |
nPageWidth | Largura da página. | Numérico |
nPaperSize | Tamanho da folha do relatório. | Numérico |
oFontAtu | Fonte do relatório. | Objeto |
oPrint | Objeto de impressão. | Objeto |
Code128B()
Descrição: O método Code128b faz a impressão de código de barras no padrão estabelecido. O código é convertido antes da impressão. Sintaxe: Code128B( nRow, nCol, cCodeBar, nSizeBar ) - > Nil Parâmetros:
Exemplo //------------------------------------------------------------------- /*/{Protheus.doc} Code128b Exemplo de uso da função Code128b() @author FRAMEWORK @since 23/09/2024 @version 1.0 /*/ //------------------------------------------------------------------ #Include "PROTHEUS.CH" #Include "RPTDEF.CH" #INCLUDE "TBICONN.CH" User Function Code128b() Local oPrinter := Nil PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" oPrinter := FWMSPrinter():New('teste',6,.F.,,.T.,,,,,.F.) oPrinter:Setup() oPrinter:setDevice(IMP_PDF) oPrinter:cPathPDF :="C:\" oPrinter:Say(10,0,"Teste para Code128b") oPrinter:Code128b(100, 10, '1234567', 50) oPrinter:EndPage() oPrinter:Preview() FreeObj(oPrinter) oPrinter := Nil RESET ENVIRONMENT Return |
A opção do tipo de impressão não é salva pela última escolha feita. Caso exista a necessidade desse comportamento deve-se realizar a implementação diretamente no programa que se utiliza da classe gravando, recuperando e informando qual o tipo.
Uma opção desse tipo de controle pode ser vista abaixo (FWProfile)
Function u_localPrint() Local lAdjustToLegacy := .F. Local lDisableSetup := .T. Local oPrinter Local cLocal := "c:\temp" Local nPrtType := 6 // IMP_PDF > 6 || IMP_SPOOL > 2 Local aDevice := {} Local cSession := GetPrinterSession() AADD(aDevice,"DISCO") // 1 AADD(aDevice,"SPOOL") // 2 AADD(aDevice,"EMAIL") // 3 AADD(aDevice,"EXCEL") // 4 AADD(aDevice,"HTML" ) // 5 AADD(aDevice,"PDF" ) // 6 oProfile := FWProfile():New() oProfile:SetTask('PRINTTYPE') cDevice := oProfile:LoadStrProfile() nPrtType := aScan(aDevice,{|x| x == cDevice }) oPrinter := FWMSPrinter():New("exemplo", nPrtType, lAdjustToLegacy, cLocal, lDisableSetup, , , , , , .F., ) oPrinter:Say(10, 0, "teste") oPrinter:Setup() If oPrinter:nModalResult == PD_OK oProfile:SetTask('PRINTTYPE') oProfile:SetStringProfile(If(oPrinter:nDevice==2, "SPOOL", "PDF")) oProfile:Save() oPrinter:Preview() EndIf Return
Comportamento de opções de impressão em relação aos acessos dos usuários
No cadastro de usuários existem 4 acessos que podem influenciar nas opções de impressão da classe FwMsPrinter:
- 111 - Gerar Rel. em Disco Local
- 112 - Gerar Rel. no Servidor
- 121 - Usa Impressora no Server
- 122 - Usa Impressora no Client
Esses acessos devem estar de acordo com a parametrização das configurações de diretório e impressão:
Opções disponíveis na FwMsPrinter:
Os comportamentos esperados de acordo com os acessos dados aos usuários são:
111 Gerar Rel. em Disco Local | 112 Gerar Rel. no Servidor | 121 Usa Impressora no Server | 122 Usa Impressora no Client | DESTINO | TIPO DE IMPRESSÃO |
---|---|---|---|---|---|
Sem permissão para imprimir | X | ||||
X | X | X | X | Local | Servidor | Spool Server/Client | PDF |
X | Local | ||||
X | Servidor | ||||
X | X | Local | Spool Client | PDF | ||
X | X | Servidor | Spool Server | PDF | ||
X | X | X | Local | Servidor | Spool Client | PDF | |
X | X | X | Local | Servidor | Spool Server | PDF |
Importante
Para impressões em que o usuário seleciona a opção de destino "Servidor", é importante ressaltar que apenas o arquivo intermediário é gerado no servidor (arquivo .rel) e desta forma a conversão final deste arquivo em pdf ocorre por meio do recurso printer.exe localizado na pasta do smartclient em execução pelo usuário.
Apenas em situações em que o componente esta rodando sem interface grafica (Exemplo: rotinas executadas via job), a conversão final do arquivo .rel em pdf ocorrerá por meio do recurso printer.exe localizada na pasta do AppServer em execução.
Caso exista a necessidade de realizar a impressão de um relatório via JOB utilizando a impressão via Spool informe a impressora diretamente para ser considerada na impressão.
lAdjustToLegacy := .F. lDisableSetup := .T. cLocal := "\spool" oPrinter := FwMsPrinter():New("exemplo.rel", IMP_SPOOL, lAdjustToLegacy, cLocal, lDisableSetup, , , , , , .F., ) oPrinter:StartPage() oPrinter:Say( 20, 30, "Linha Teste") oPrinter:EndPage() oPrinter:lServer := .T. oPrinter:cPrinter := "\\printserver-02.sp01.local\SPCloudPrinter-Mono" // Endereço da impressora que será utilizada oPrinter:Preview()