Ayuda con Alineación y Justificación TPRINTER

Ayuda con Alineación y Justificación TPRINTER

Postby JoseAlvarez » Sun Apr 11, 2021 3:47 pm

Hola a todos, feliz domingo.

Siempre usé el REPORT de fivewin y la tDosPrint para elaborar mis informes.
El hecho es que ahora necesito irme a class TPrinter (C:\Fw18.01\source\classes\printer.prg) pero no me esta saliendo nada bien.
Entiendo que para ver la impresion igual en cualquier impresora debo usar oPrn:CMSay pero no es asi en mi caso.
Si utilizo impresoras diferentes, las impresiones salen de diferentes sitios.

Incluso el texto que pueden ver J-30918787-2 tiene la misma columna que los textos anteriores y sin embargo se muestra mucho más a la derecha y esto sucede igual cualquiera sea la impresora.

Acá dejo las imagenes de ejemplo y el codigo fuente:

Con impresora EPSON L200 (y es como se quiere ver) a excepcion de J-30918787-2 que debería estar alineado con Calle de la linea anterior

Image


Con impresora virtual CutePdf

Image

Con cualquier otra impresora sucede igual.

Code: Select all  Expand view
function Fnct_ListaArticulos01(nOrientacion) // 1 Vertical   2 horizontal

    Local oPrn, oImage
    Local oFont9, oFont10CN, oFont14, oFont20B
    Local oPenFine , oPenBold

    Local cBmpLogo

    Local nRow, nCol , nColorBlack, nJustLeft, nJustRight, nJustCenter
    Local nRowImage, nColImage, nWidthImage, nHighImage

    nRow:=1.5
    nCol:=9
    nColorBlack:=RGB(0,0,0)

    nJustRight:=1
    nJustLeft:=0
    nJustCenter:=2

    nRowImage:=1
    nColImage:=4
    nWidthImage:=400
    nHighImage:=395

    cBmpLogo:='\neuro32\fondos\logo.bmp'
    oImage:= Timage():Define(,cBmpLogo)

    PRINT oPrn DOC 'Patron de Prueba'  PREVIEW MODAL
    oPrn:SetPage( DMPAPER_LETTER)
    iif(nOrientacion=1,oPrn:SetPortrait(),oPrn:SetLandScape())

    DEFINE    FONT     oFont9      NAME "ARIAL"          SIZE 0, -9        OF oPrn
    DEFINE    FONT     oFont10CN   NAME "COURIER NEW"    SIZE 0, -10 BOLD  OF oPrn
    DEFINE    FONT     oFont14     NAME "ARIAL"          SIZE 0, -14       OF oPrn
    DEFINE    FONT     oFont20B    NAME "ARIAL"          SIZE 0, -20 BOLD  OF oPrn
    DEFINE    PEN       oPenFine    WIDTH 2                                 OF oPrn
    DEFINE    PEN       oPenBold    WIDTH 3                                 OF oPrn

      oPrn:StartPage()

            oPrn:SayImage(nRowImage,40,oImage,nWidthImage,nHighImage)

            oPrn:CMSay( nRow, nCol, alltrim(_cCompanyName), oFont14,,  nColorBlack,, nJustLeft )

            nRow:=nRow+.6
            nCol:=nCol+.89

            oPrn:CMSay( nRow, nCol, alltrim(_cDireccion1)+" "+alltrim(_cDireccion2), oFont10CN,,  nColorBlack,, nJustLeft )
            nRow:=nRow+.4

            oPrn:CMSay( nRow, nCol, alltrim(_cCompanyRif), oFont10CN,,  nColorBlack,, nJustLeft )

            oImage:End()

      oPrn:EndPage()

    oPrn:Preview()
   
    oFont9   :End()
    oFont10CN:End()
    oFont14  :End()
    oFont20B :End()
    oPenFine :End()
    oPenBold :End()
     
    oPrn:End()

return .t.
 


Alguna ayuda o sugerencia?

uso FW-18.01 + xHarbour
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
JoseAlvarez
 
Posts: 726
Joined: Sun Nov 09, 2014 5:01 pm

Re: Ayuda con Alineación y Justificación TPRINTER

Postby karinha » Sun Apr 11, 2021 8:53 pm

Code: Select all  Expand view

#Include "FiveWin.ch"

// *************************************************************
// * Impresion del recibo de pagos
FUNCTION Recibo()

   LOCAL oFont, oFont1, oPrn, nRow
   LOCAL cNombre := "JOSE ALVAREZ COMPANY                      "
   LOCAL nCuit   := 10.000

   PRINT oPrn NAME "Recibo" PREVIEW MODAL

      DEFINE FONT oFont   NAME "ARIAL"   SIZE 0, -14 BOLD OF oPrn
      DEFINE FONT oFont1  NAME "CALIBRI" SIZE 0, -16 BOLD OF oPrn

      oPrn:SetPage( 9 )     //-> A4 //9
      oPrn:SetPortrait()  //-> Vertical(Retrato)

      PAGE

      // * Con nRow puedes ir imprimiendo debajo de lo ultimo que imprimiste
      @ 2, 1 PRINT TO oPrn TEXT "Nombre de la Empresa" SIZE 9, 1 CM FONT oFont1 ALIGN "C" LASTROW nRow

      // * 2, 1 es en 2 cm de margen superior y 1 cm del margen izquierdo
      // * SIZE 9,1 Quiere decir que el texto lo tiene que mostrar en 9 cms de ancho por 1 de alto
      // * ALING "C" te alinea el texto CENTRALIZADO (L: Left, R: Right) en los 9 cms que vos le indicaste
      // * Siempre con el tamaño del font que estes utilizando, eso es lo bueno...
      @ nRow, 01 PRINT TO oPrn TEXT "Domicilio Comercial:" SIZE 9, 1 CM FONT oFont LASTROW nRow ALIGN "C"
      @ nRow, 01 PRINT TO oPrn TEXT "Condicion de IVA"  SIZE 9, 1 CM FONT oFont LASTROW nRow ALIGN "C"

      @ 5.5, 1    PRINT TO oPrn TEXT "C.U.I.T.:"   SIZE 3, .5 CM FONT oFont1 ALIGN "R"

      // @ 5.5, 4.1  PRINT TO oPrn TEXT oQryPag:cuit SIZE 6, .5 CM FONT oFont ALIGN "L"
      @ 5.5, 4.1  PRINT TO oPrn TEXT nCuit SIZE 6, .5 CM FONT oFont ALIGN "L"

      @ 5.5, 7.5  PRINT TO oPrn TEXT "Razon Social:" SIZE 4.5, 1 CM FONT oFont1 ALIGN "R"

      // @ 5.5, 12.5 PRINT TO oPrn TEXT AllTrim( oQryPag:nombre ) SIZE 8, 1 CM FONT oFont LASTROW nRow ALIGN "L"
      @ 5.5, 12.5 PRINT TO oPrn TEXT AllTrim( cNombre ) SIZE 8, 1 CM FONT oFont LASTROW nRow ALIGN "L"

      // * Etc. Etc.
      // * Tambien puedes poner imagenes
      @ 0.5, .5   PRINT TO oPrn IMAGE "logo.jpg" SIZE 06, 1  CM

      ENDPAGE

   ENDPRINT

   oFont:End()
   oFont1:End()

RETURN NIL
 


Saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Ayuda con Alineación y Justificación TPRINTER

Postby JoseAlvarez » Sun Apr 11, 2021 11:48 pm

Joao,

Muchas gracias por estar siempre presto a ayudarnos a todos los foristas.

Voy a probar tu codigo y adaptarlo al mio y te comento.

Un Abrazo.
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
JoseAlvarez
 
Posts: 726
Joined: Sun Nov 09, 2014 5:01 pm

Re: Ayuda con Alineación y Justificación TPRINTER

Postby JoseAlvarez » Mon Apr 12, 2021 12:07 pm

Joao,

Hice un copy & paste de tu codigo para probarlo pero no se compiló. Todo esta muy claro y no veo componentes externos que puedan estar faltando.

Me da error de SINTAXIS al compilar en todas estas lineas donde se indican las coordenadas.

@ 2, 1 PRINT TO oPrn TEXT "Nombre de la Empresa" SIZE 9, 1 CM FONT oFont1 ALIGN "C" LASTROW nRow
.
.
.
@ 5.5, 12.5 PRINT TO oPrn TEXT AllTrim( cNombre ) SIZE 8, 1 CM FONT oFont LASTROW nRow ALIGN "L"

Veo todo bien, alguna idea de que puede estar pasando ? (fw 18.01 + xHarbourBCC51)

Image
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
JoseAlvarez
 
Posts: 726
Joined: Sun Nov 09, 2014 5:01 pm

Re: Ayuda con Alineación y Justificación TPRINTER

Postby karinha » Mon Apr 12, 2021 12:43 pm

Buén dia. Que lástima. No funciona en tú versión. Actualize tú FiveWin. Voy hacer otro ejemplo. Saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Ayuda con Alineación y Justificación TPRINTER

Postby karinha » Mon Apr 12, 2021 1:09 pm

Mira se comprendes:

Code: Select all  Expand view

#Include "FiveWin.ch"

FUNCTION IMP_TIPO_ORDEM_ENT_RECO( DeOndePartiu, oDlgBtn )

   LOCAL oDlgPdf,  oFnt, oFont, IDCor, oPrevAdobe, oSaida, ;
         oIco, oPrevFive, oPrevGravar, oBrush, aGrad

   aGrad := { { 0.30, CLR_WHITE, CLR_WHITE },{ 0.50, CLR_WHITE, CLR_WHITE } }

   DEFINE ICON oIco    NAME "ICONE"
   DEFINE FONT oFnt    NAME "Ms Sans Serif" SIZE 0,  14 BOLD
   DEFINE FONT oFont   NAME "Ms Sans Serif" SIZE 0, -14 BOLD
   // ESTA EM: AMBIENTY.RES
   DEFINE DIALOG oDlgPdf  RESOURCE "DLG_BOTOES_IMPRIMIR_ORDEM" GRADIENT aGrad

   oDlgPdf:lHelpIcon := .F.

   For IDCor = 401 To 402 // Os ID's dos TEXTOS na DIALOG.
      REDEFINE SAY ID IDCor OF oDlgPdf ;
               COLORS CLR_BLACK, CLR_WHITE UPDATE FONT oFnt TRANSPARENT
   Next IDCor

   REDEFINE GROUP oGroup ID 501 OF oDlgPdf FONT oFnt TRANSPARENT COLOR CLR_BLACK

   REDEFINE BUTTONBMP oPrevAdobe ID 301 OF oDlgPdf                         ;
      ACTION( IMPRIMIR_ORDEM_ENTREGA( DeOndePartiu := "DIRETONAIMP", oDlgPdf ) )

   oPrevAdobe:cToolTip := OemToAnsi( "Criar o Arquivo PDF com Preview do Adobe" )

   REDEFINE BUTTONBMP oPrevFive ID 302 OF oDlgPdf                            ;
      ACTION( IMPRIMIR_ORDEM_ENTREGA( DeOndePartiu := "COMPREVIEWFIVE", oDlgPdf ) )

   oPrevFive:cToolTip := OemToAnsi( "Criar o Arquivo PDF com Preview do FiveWin" )

   REDEFINE BUTTONBMP oPrevGravar ID 303 OF oDlgPdf                          ;
      ACTION( IMPRIMIR_ORDEM_ENTREGA( DeOndePartiu := "COMPREVIEWPDF", oDlgPdf ) )

   oPrevGravar:cToolTip := OemToAnsi( "Preview, Apenas Gravar o PDF Para Email" )

   REDEFINE BUTTONBMP oSaida      ID 304 OF oDlgPdf                          ;
            ACTION( oDlgPdf:End() ) CANCEL

   oSaida:cToolTip := OemToAnsi( "Saida - Exit - Cancelar" )

   SET FONT OF oPrevAdobe   TO oFont
   SET FONT OF oPrevFive    TO oFont
   SET FONT OF oPrevGravar  TO oFont
   SET FONT OF oSaida       TO oFont

   ACTIVATE DIALOG oDlgPdf CENTERED

   oFnt:End()
   oFont:End()

RETURN( NIL )

STATIC FUNCTION IMPRIMIR_ORDEM_ENTREGA( DeOndePartiu, oDlgPdf )

   LOCAL nI

   // SetCopies - Nao funciona, fazer assim: se precisar de varias copias
   FOR nI := 1 TO nCopias
      // ImpresionDocumento()

      IMPRIMIR_DOC_ENTREGA( DeOndePartiu, oDlgPdf )

      /*
      MsgRun( "GERANDO RELATÓRIO DO ORÇAMENTO.  AGUARDE...", ;
              "Por Favor, Espere! Pode Demorar um Pouco...", ;                        // 3
              { || CursorWait(), WinExec( IMPRIMIR_DOC_ENTREGA( DeOndePartiu, oDlgPdf ) ), 0 } ) // QUERO QUE ESPERE.
      */


   NEXT

RETURN NIL
// IMPRIMIR A ORDEM DE ENTREGA
STATIC FUNCTION IMPRIMIR_DOC_ENTREGA( DeOndePartiu, oDlgPdf )

   LOCAL oPrn, nMargin, nWidth, nColWidth, nRow, nCol, oImage
   LOCAL XDATALISTA, cAlias
   LOCAL oFont, oFontLogo, oFontDivi, oFontList, oFontCurs, oPen1, oPen2, ;
         oPen3, oFontSubl, ResLinha, ResColuna, cProposta, nLinha, nColuna, ;
         oFontBold, nTotalParc := 0.00, nTotalGeral := 0.00
   LOCAL nPulaLinha, oFontMin, oFontSub2, nPagina, oFontRua, nVrTotal
   LOCAL cFile // := "C:\ORCAMPDF\CHAMADO.PDF"
   LOCAL cImpLinha, cEntregador, cFerramenta, nTotRegistro

   XDATALISTA  := "São Paulo" + ", " + "____/____/_______"

   IF NETERR()

      MsgInfo( "ERRO NA REDE. Verifique!", "Confirma " )

      RETURN( .F. )

   ENDIF

   HB_GCALL( .F. ) // PARA LIMPAR A MEMORIA

   LCHDIR( cDirPleno )
   SET DEFAULT TO

   aPrn := GetPrinters()  // 02/08/2017 Teste para ver se avisa erro.

   IF Empty( aPrn ) // Empty( oPrn:hDC )
      MsgStop( "Nenhuma Impressora Encontrada", "Nenhuma Impressora Encontrada" )
      RETURN NIL
   ENDIF

   PRINTER oPrn PREVIEW MODAL // PARA TESTAR A IMPRESSORA ANTES DE IMPRIMIR

   IF EMPTY( oPrn:hDC ) // MODIFICADO EM: 05/05/2015 - Quebrou na Gilmaria.
      MsgInfo( "ALGUMA COISA OCORREU DE ERRADO COM A IMPRESSORA.", "LIGUE A IMPRESSORA." )
      oPrn:End()
      RETURN( .F. )
   ENDIF

   oPrn:End()

   SELECT( DBRECOMPOS )
   SET ORDER TO 01
   GO TOP

   SEEK VAL( nProposta )

   IF .NOT. FOUND()
      MsgStop( OemToAnsi( "Nenhuma Proposta Localizada Para ImpressÆo" )+CRLF+ ;
               OemToAnsi( "Ou NÆo Tem Produtos Informados nas µreas. " ),      ;
               OemToAnsi( "Nenhuma Proposta Localizada Para ImpressÆo" ) )
      RETURN NIL
   ENDIF

   // cProposta := VAL( nProposta ) // Numero da Proposta de orcamento
   cProposta := nProposta  // PARA O INIDICE TEMPORARIO NAO PODE O VAL()

   /*
   INDEX ON PROPOCOD TAG 04 TO ORCATEMP FOR ( .NOT. EOF() ) .AND. ;
            ( DBRECOMPOS )->PROPOCOD >= cProposta           .AND. ;
            ( DBRECOMPOS )->PROPOCOD <= cProposta  MEMORY //TEMPORARY

   GO TOP

   BROWSE()
   */


   // filtro p/pegar a proposta, caso exista e mostrar na ListBox abaixo
   ORDSCOPE( 0, cProposta )  // SE EXISTE PARA ALTERACAO, EXCLUSAO, INCLUSAO
   ORDSCOPE( 1, cProposta )
   GO TOP

   cAlias := ALIAS()

   nTotRegistro := 0

   WHILE .NOT. EOF()

      SYSREFRESH()

      IF ( cAlias )->PRODUNOME = SPACE(30)

         SKIP

         LOOP

      ENDIF

      SKIP

      ++nTotRegistro

   ENDDO

   // filtro p/pegar a proposta, caso exista e mostrar na ListBox abaixo
   ORDSCOPE( 0, cProposta )  // SE EXISTE PARA ALTERACAO, EXCLUSAO, INCLUSAO
   ORDSCOPE( 1, cProposta )
   GO TOP

   cAlias := ALIAS()

   IF EOF()
      MsgStop( OemToAnsi( "Nenhuma Proposta Localizada Para ImpressÆo" ), ;
               OemToAnsi( "Nenhuma Proposta Localizada Para ImpressÆo" ) )
      RETURN NIL
   ENDIF

   // LOGO DA PROPOSTA
   oImage := ".\LOGO.jpg"  // tem que estar na pasta

   cLogo := "LOGO.JPG"

   IF VALIDA_JPG( cLogo )  // ESTA EM: FUNCOES.PRG
      // NADA A FAZER - IMAGEM VALIDA
   ELSE
      cLogo := "        "  // PARA NAO QUEBRAR
   ENDIF

   IF DeOndePartiu = "DIRETONAIMP" // DIRETO NA IMPRESSORA

      PRINT oPrn NAME "ORDEM_DE_ENTREGA"  // DIRETO NA IMP.

   ELSEIF DeOndePartiu = "COMPREVIEWFIVE"

      PRINT oPrn NAME "ORDEM_DE_ENTREGA" PREVIEW MODAL

   ELSEIF DeOndePartiu = "COMPREVIEWPDF"  // GERAR O ARQUIVO PDF.

     PRINT oPrn PREVIEW

   ENDIF

      DEFINE FONT oFontRua  NAME "Courier New"    SIZE 0, -10 BOLD           OF oPrn
      DEFINE FONT oFontMin  NAME "Courier New"    SIZE 0, -10 BOLD           OF oPrn
      DEFINE FONT oFont     NAME "Lucida Console" SIZE 0, -10                OF oPrn
      DEFINE FONT oFontBold NAME "Lucida Console" SIZE 0, -10 BOLD           OF oPrn
      DEFINE FONT oFontSubl NAME "Courier New"    SIZE 0, -14 BOLD UnderLine OF oPrn
      DEFINE FONT oFontSub2 NAME "Courier New"    SIZE 0, -12 BOLD UnderLine OF oPrn
      //-> Caneta do Preview
      DEFINE PEN oPen1 WIDTH 4 COLOR CLR_BLACK                  OF oPrn
      DEFINE PEN oPen2 WIDTH 2 COLOR CLR_BLACK                  OF oPrn
      DEFINE PEN oPen3 WIDTH 5 COLOR CLR_BLACK                  OF oPrn
 
      oPrn:SetPage(9)     //-> A4
      oPrn:SetPortrait()  //-> Vertical(Retrato)

      //-> Como Imprimir em Centimetros sem errar e em qualquer Impressora.
      ResLinha  := oPrn:nLogPixely()/2.54
      ResColuna := oPrn:nLogPixelx()/2.54

      nMargin   := Int( 0.1 * oPrn:nHorzRes() )
      nWidth    := 8 * nMargin
      nColWidth := Int( ( nWidth - nMargin ) / 2 )
      nPagina   := 1

      PAGE

         // LOGO
         nRow        :=   1.50  // Linha
         nCol        := 650.00  // Coluna do Logo.jpg

         // @ nRow, nCol PRINT TO oPrn IMAGE "LOGO.JPG" SIZE 650, 650 LASTROW nRow
         // oPrn:SayImage( nRow, nCol, "LOGO.JPG", oPrn:nHorzRes(), oPrn:nVertRes() , NIL, .T. )
         // oPrn:SayImage( 0, 0, "LOGO.JPG" )
         oPrn:SayImage( 1.00, 350, "LOGO.JPG", 650, 650 )

         // CABECALHO
         nLinha  := 1.00
         nColuna := 18.00

         //-> Pagina
         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                   ;
                   OemToAnsi( "P g.: " + ALLTRIM( STRZERO( nPagina, 2 ) ) ), ;
                   oFont,, CLR_BLACK,, PAD_CENTER )

         //       ? LEN( ALLTRIM( nProposta ) )

         IF LEN( ALLTRIM( nProposta ) ) = 1

            nLinha  := 2.50
            nColuna := 4.05

         ELSEIF LEN( ALLTRIM( nProposta ) ) = 2

            nLinha  := 2.50
            nColuna := 4.15

         ELSEIF LEN( ALLTRIM( nProposta ) ) = 3

            nLinha  := 2.50
            nColuna := 4.25

         ELSEIF LEN( ALLTRIM( nProposta ) ) = 4 // OK

            nLinha  := 2.50
            nColuna := 4.35

         ELSEIF LEN( ALLTRIM( nProposta ) ) = 5 // OK

            nLinha  := 2.50
            nColuna := 4.45

         ELSEIF LEN( ALLTRIM( nProposta ) ) = 6 // OK

            nLinha  := 2.50
            nColuna := 4.55

         ELSEIF LEN( ALLTRIM( nProposta ) ) = 7 // OK

            nLinha  := 2.50
            nColuna := 4.65

         ELSEIF LEN( ALLTRIM( nProposta ) ) = 8 // OK

            nLinha  := 2.50
            nColuna := 4.75

         ELSEIF LEN( ALLTRIM( nProposta ) ) = 9 // OK

            nLinha  := 2.50
            nColuna := 4.85

         ELSEIF LEN( ALLTRIM( nProposta ) ) = 10 // OK

            nLinha  := 2.50
            nColuna := 4.95

         ELSE

            nLinha  := 2.50
            nColuna := 5.05

         ENDIF

         oPrn:Say( nLinha * ResLinha,  nColuna * ResColuna,                  ;
            "Orçamento Nº.: " + ALLTRIM( nProposta ), oFont, ,               ;
            CLR_BLACK, , PAD_CENTER )

         nColuna := nColuna +=  19.50

         oPrn:cmSay( nLinha, 19.50, "" + XDATALISTA,                             ;
            oFont, ,                                   ;
            CLR_BLACK, , PAD_RIGHT )

         nLinha  := nLinha += 0.80

         //       ? LEN( ALLTRIM( STR( nClienCod ) ) )

         IF LEN( ALLTRIM( STR( nClienCod ) ) ) = 1

            nColuna := 7.60

         ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 2

            nColuna := 7.70

         ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 3

            nColuna := 7.80

         ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 4 // OK

            nColuna := 7.90

         ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 5

            nColuna := 8.00

         ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 6

            nColuna := 8.10

         ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 7

            nColuna := 8.20

         ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 8

            nColuna := 8.30

         ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 9

            nColuna := 8.40

         ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 10

            nColuna := 8.80

         ENDIF

         oPrn:Say( nLinha * ResLinha,  nColuna * ResColuna,                  ;
           + "CÓD.: " + ALLTRIM( STR( nClienCod ) ) + " - " +ClienPropo,     ;
           oFontRua, , CLR_BLACK, , PAD_CENTER )

         nLinha  := nLinha += 0.50
         nColuna :=  6.55  // 7.75

         oPrn:Say( nLinha * ResLinha,  nColuna * ResColuna,                  ;
            + EnderPropo, oFontRua, , CLR_BLACK, , PAD_CENTER )

         nLinha  := nLinha += 0.50
         nColuna :=  5.30  // 5.85

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                   ;
            "BAIRRO: " + BairrPropo, oFontRua, , CLR_BLACK, , PAD_CENTER )

         nColuna := nColuna += 6.50  // 5.05

         // Cidade / Uf  falta
         // CidadPropo, UFdaPropo
         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                   ;
            "CIDADE: " + CidadPropo, oFontRua, , CLR_BLACK, , PAD_CENTER )

         nColuna := nColuna +=   4.50

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                   ;
            "UF: " + UFdaPropo, oFontRua, , CLR_BLACK, , PAD_CENTER )

         cOrcamento  := [ORDEM DE ENTREGA]

         nLinha  := nLinha += 0.70
         nColuna :=  10.50

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                   ;
                   + cOrcamento, oFontSubl,, CLR_BLACK,, PAD_CENTER )

         nLinha  := nLinha += 0.80   // LINHA DA QTDE - OK
         nColuna :=  2.70

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                   ;
                   + OemToAnsi( "QTDE " ),                                   ;
                   oFont,, CLR_BLACK,, PAD_CENTER )

         nLinha  := nLinha -= 0.02
         nColuna :=  6.00

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                   ;
                   + OemToAnsi( "PRODUTOS " ),                               ;
                   oFont,, CLR_BLACK,, PAD_CENTER )

         // QTDE / PRODUTOS - AQUI
         nLinha  := nLinha += 0.20
         nColuna := 1.60

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                   ;
                   REPLICATE( "_", 83 ), oFont,, CLR_BLACK,, PAD_LEFT )

         GO TOP

         nTotLinhas := 0
         nSomaLinha := 0

         nLinRodap := 0
         nLinRoda  := 0

         // 5.97
         nLinEsq  :=  6.31  // LINHA VERTICAL DA ESQUERDA DO QUADRO
         nColEsq  :=  1.50
         // 5.99
         nLinMeio :=  6.31  // LINHA VERTICAL DO MEIO     DO QUADRO
         nColMeio :=  3.30

         nLinDir  :=  6.31  // LINHA VERTICAL DA DIREITA  DO QUADRO
         nColDir  := 19.01

         // GIRAR OS PRODUTOS: AQUI.

         nLinha  := nLinha += 0.50  // PRIMEIRO PRODUTO

         WHILE .NOT. EOF()

            SYSREFRESH()

            IF ( cAlias )->PRODUNOME = SPACE(30)

               SKIP

               LOOP

            ENDIF

            // LINHAS VERTICAIS E HORIZONTAIS DO PREVIEW - 05/04/2019 - Joao

            // LIN VERTICAL DO LADO ESQUERDO DO QUADRO.
            // oPrn:cmSay( nLinEsq, nColEsq, "|", oFont,, CLR_BLACK,, PAD_LEFT )
            oPrn:Say( nLinEsq * ResLinha, nColEsq * ResColuna,               ;
                + "|", oFont,, CLR_BLACK,, PAD_LEFT )

            nLinEsq  += 0.292

            // LIN VERTICAL DO MEIO
            // oPrn:cmSay( nLinMeio, nColMeio, "|", oFont,, CLR_BLACK,, PAD_LEFT )
            oPrn:Say( nLinMeio * ResLinha, nColMeio * ResColuna,               ;
                + "|", oFont,, CLR_BLACK,, PAD_LEFT )

            nLinMeio += 0.292

            // LINHA VERTICAL DO LADO DIREITO DO QUADRO.
            // oPrn:cmSay( nLinDir, nColDir, "|", oFont,, CLR_BLACK,, PAD_LEFT )
            oPrn:Say( nLinDir * ResLinha, nColDir * ResColuna,               ;
                + "|", oFont,, CLR_BLACK,, PAD_LEFT )

            nLinDir  += 0.292

            nColuna :=  1.90 // COLUNA DA QTDE.

            oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
               + STR( ( cAlias )->PRODUQTDE ), oFont,, CLR_BLACK,, PAD_CENTER )

            // LIN VERTICAL DO LADO ESQUERDO DO QUADRO.
            //oPrn:cmSay( nLinEsq, nColEsq, "|", oFont,, CLR_BLACK,, PAD_LEFT )
            oPrn:Say( nLinEsq * ResLinha, nColEsq * ResColuna,               ;
                + "|", oFont,, CLR_BLACK,, PAD_LEFT )

            nLinEsq  += 0.292  // DIZIMA

            // LIN VERTICAL DO MEIO
            // oPrn:cmSay( nLinMeio, nColMeio, "|", oFont,, CLR_BLACK,, PAD_LEFT )
            oPrn:Say( nLinMeio * ResLinha, nColMeio * ResColuna,               ;
                + "|", oFont,, CLR_BLACK,, PAD_LEFT )

            nLinMeio += 0.292

            // LIN VERTICAL DO LADO DIREITO DO QUADRO.
            // oPrn:cmSay( nLinDir, nColDir, "|", oFont,, CLR_BLACK,, PAD_LEFT )
            oPrn:Say( nLinDir * ResLinha, nColDir * ResColuna,               ;
                + "|", oFont,, CLR_BLACK,, PAD_LEFT )

            nLinDir  += 0.292

            nColuna := 7.00 // COLUNA DO PRODUTO

            oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
               + ( cAlias )->PRODUNOME, oFont,, CLR_BLACK,, PAD_CENTER )

            nLinha  := nLinha += 0.20 // SEGUNDA LINHA EMBAIXO DO NOME
            nColuna := 1.60

            oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
                      REPLICATE( "_", 82 ), oFont,, CLR_BLACK,, PAD_LEFT )

            nLinha  := nLinha += 0.38  // PROXIMO PRODUTO

            // ? nLinha

            // NOVA PAGINA AQUI // PREENCHEU O PREVIEW, PULA.
            IF nLinha >= 25.00 // 26.50  // achou o rodape do preview nova pagina

               nLinha   := 27.00
               nColuna  := 10.50

               oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,             ;
                  + OemToAnsi( "Rua Ant“nio Andr‚ Rodrigues, 433 - Ch cara Mafalda - SÆo Paulo - SP" ), ;
                  oFontBold, , CLR_GREEN, , PAD_CENTER )

               nLinha  := nLinha += 0.50
               nColuna := 10.40

               oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,             ;
                  + OemToAnsi( "CEP - 03372-030 - Fone/Fax: 2674-3173 - Site: www.ambienty.com.br " ), ;
                  oFontBold, , CLR_GREEN, , PAD_CENTER )

               ENDPAGE

               PAGE  // NOVA PAGINA, CONTINUACAO

               // LOGO
               nRow        :=   1.50  // Linha
               nCol        := 650.00  // Coluna do Logo.jpg

               // @ nRow, nCol PRINT TO oPrn IMAGE "LOGO.JPG" SIZE 650, 650 LASTROW nRow
               oPrn:SayImage( 1.00, 350, "LOGO.JPG", 650, 650 )

               // proxima pagina
               ++nPagina

               nLinha  := 1.00
               nColuna := 18.00

               //-> Pagina
               oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,             ;
                  OemToAnsi( "P g.: " + ALLTRIM( STRZERO( nPagina, 2 ) ) ),  ;
                  oFont,, CLR_BLACK,, PAD_CENTER )

               IF LEN( ALLTRIM( nProposta ) ) = 1

                  nLinha  := 2.50
                  nColuna := 4.05

               ELSEIF LEN( ALLTRIM( nProposta ) ) = 2

                  nLinha  := 2.50
                  nColuna := 4.15

               ELSEIF LEN( ALLTRIM( nProposta ) ) = 3

                  nLinha  := 2.50
                  nColuna := 4.25

               ELSEIF LEN( ALLTRIM( nProposta ) ) = 4 // OK

                  nLinha  := 2.50
                  nColuna := 4.35

               ELSEIF LEN( ALLTRIM( nProposta ) ) = 5 // OK

                  nLinha  := 2.50
                  nColuna := 4.45

               ELSEIF LEN( ALLTRIM( nProposta ) ) = 6 // OK

                  nLinha  := 2.50
                  nColuna := 4.55

               ELSEIF LEN( ALLTRIM( nProposta ) ) = 7 // OK

                  nLinha  := 2.50
                  nColuna := 4.65

               ELSEIF LEN( ALLTRIM( nProposta ) ) = 8 // OK

                  nLinha  := 2.50
                  nColuna := 4.75

               ELSEIF LEN( ALLTRIM( nProposta ) ) = 9 // OK

                  nLinha  := 2.50
                  nColuna := 4.85

               ELSEIF LEN( ALLTRIM( nProposta ) ) = 10 // OK

                  nLinha  := 2.50
                  nColuna := 4.95

               ELSE

                  nLinha  := 2.50
                  nColuna := 5.05

               ENDIF

               oPrn:Say( nLinha * ResLinha,  nColuna * ResColuna,            ;
                  "Proposta Nº.: " + ALLTRIM( nProposta ), oFont,,           ;
                  CLR_BLACK,, PAD_CENTER )

               oPrn:cmSay( nLinha, 19.50, "" + XDATALISTA,                             ;
                  oFont, ,                                   ;
                  CLR_BLACK, , PAD_RIGHT )

               nLinha  := nLinha += 0.80

               IF LEN( ALLTRIM( STR( nClienCod ) ) ) = 1

                  nColuna := 7.70

               ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 2

                  nColuna := 7.80

               ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 3

                  nColuna := 7.90

               ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 4 // OK

                  nColuna := 8.00

               ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 5

                  nColuna := 8.10

               ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 6

                  nColuna := 8.20

               ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 7

                  nColuna := 8.30

               ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 8

                  nColuna := 8.40

               ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 9

                  nColuna := 8.50

               ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 10

                  nColuna := 8.60

               ENDIF

               oPrn:Say( nLinha * ResLinha,  nColuna * ResColuna,                  ;
                 + "CÓD.: " + ALLTRIM( STR( nClienCod ) ) + " - " +ClienPropo,     ;
                 oFontRua, , CLR_BLACK, , PAD_CENTER )

               nLinha  := nLinha += 0.50
               nColuna :=  6.65  // 7.75

               oPrn:Say( nLinha * ResLinha,  nColuna * ResColuna,                     ;
                  + EnderPropo, oFontRua, , CLR_BLACK, , PAD_CENTER )

               nLinha  := nLinha += 0.50
               nColuna :=  5.35

               oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                     ;
                  "BAIRRO: " + BairrPropo, oFontRua, , CLR_BLACK, , PAD_CENTER )

               nColuna := nColuna += 6.50  // 5.05

               oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                     ;
                  "CIDADE: " + CidadPropo, oFontRua, , CLR_BLACK, , PAD_CENTER )

               nColuna := nColuna +=   4.50

               oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                     ;
                  "UF: " + UFdaPropo, oFontRua, , CLR_BLACK, , PAD_CENTER )

               cOrcamento  := [ORDEM DE ENTREGA]

               nLinha  := nLinha += 0.80
               nColuna :=  10.50

               oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,             ;
                  + cOrcamento, oFontSubl,, CLR_BLACK,, PAD_CENTER )

               nLinha  := nLinha += 0.80   // LINHA DA QTDE - OK
               nColuna :=  2.70

               oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,             ;
                  + OemToAnsi( "QTDE " ), oFont,, CLR_BLACK,, PAD_CENTER )

               nLinha  := nLinha -= 0.02
               nColuna :=  6.00

               oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,             ;
                  + "PRODUTOS ", oFont,, CLR_BLACK,, PAD_CENTER )

               // QTDE / PRODUTOS - AQUI
               nLinha  := nLinha += 0.20
               nColuna := 1.60

               oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,             ;
                  REPLICATE( "_", 83 ), oFont,, CLR_BLACK,, PAD_LEFT )

               nLinEsq  :=  6.41  // LINHA VERTICAL DA ESQUERDA DO QUADRO
               nColEsq  :=  1.50

               nLinMeio :=  6.41  //  74 LINHA VERTICAL DA ESQUERDA DO QUADRO
               nColMeio :=  3.30

               nLinDir  :=  6.41  // LINHA VERTICAL DA DIREITA DO QUADRO
               nColDir  := 19.01

               // GIRAR OS PRODUTOS DO NOVO PREVIEW: AQUI.
               nLinha   := nLinha += 0.50 // 1.00  // PRIMEIRO PRODUTO

            ENDIF

            SKIP

         ENDDO

         // RODAPE DO QUADRO COM POUCOS PRODUTOS

         nLinha  := nLinMeio += 1.25
         nColuna := 18.00

         cImpLinha   := "______________________________" + SPACE(10) +       ;
                        "______________________________"

         cEntregador := "         ENTREGADOR           " + SPACE(10) +       ;
                        "   RECEBIDO POR(NOME/CARGO)   "

         oPrn:cmSay( nLinha, nColuna, "" + cImpLinha,                        ;
                     oFont,, CLR_BLACK,, PAD_RIGHT )

         nLinha  := nLinha += 0.50

         oPrn:cmSay( nLinha, nColuna, "" + cEntregador,                      ;
                     oFont,, CLR_BLACK,, PAD_RIGHT )

         // Ferramentas: 03/04/2019
         cFerramenta :=  "Ferramentas:________________________________________________________"
         cFerrament2 :=  "____________________________________________________________________"

         nLinha  := nLinha += 2.50  // Ferramentas
         nColuna := 10.40

         oPrn:cmSay( nLinha, nColuna, "" + cFerramenta,                      ;
                     oFont,, CLR_BLACK,, PAD_CENTER )

         nLinha  := nLinha += 0.50  // Ferramentas

         oPrn:cmSay( nLinha, nColuna, "" + cFerrament2,                      ;
                     oFont,, CLR_BLACK,, PAD_CENTER )

         nLinha  := nLinha += 0.50  // Ferramentas

         oPrn:cmSay( nLinha, nColuna, "" + cFerrament2,                      ;
                     oFont,, CLR_BLACK,, PAD_CENTER )

         nLinha  := 27.00
         nColuna := 10.50

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                   ;
            + OemToAnsi( "Rua Ant“nio Andr‚ Rodrigues, 433 - Ch cara Mafalda - SÆo Paulo - SP" ), ;
            oFontBold, , CLR_GREEN, , PAD_CENTER )

         nLinha  := nLinha += 0.50
         nColuna := 10.40

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                   ;
            + OemToAnsi( "CEP - 03372-030 - Fone/Fax: 2674-3173 - Site: www.ambienty.com.br " ), ;
            oFontBold, , CLR_GREEN, , PAD_CENTER )

      ENDPAGE

      // DESLIGA O METAFILE NA GERACAO DO PDF. Joao
      IF DeOndePartiu = "COMPREVIEWPDF"
         // oPrn:lMeta = .F.  // Nao mostrar o PREVIEW do PDF.
      ENDIF

   ENDPRINT

   IF DeOndePartiu = "COMPREVIEWPDF"

      oDlgPdf:End()

      /*
      // NAME "ORDEM_DE_ENTREGA" + ALLTRIM( nProposta )
      FWSavePreviewToPDF( oPrn, "ORDEM_DE_ENTREGA" + ALLTRIM( nProposta ), .F. )
      // ESTA EM: PRV2PDF.PRG do Five.

      // .F. NAO PERGUNTA SE QUER VISUALIZAR. ALIAS, NAO CHAMA O ADOBE.
      // FWSavePreviewToPDF( oPrn, "pruebafactura.pdf" ,.F. )

      MsgInfo( "ORDEM DE ENTREGA CRIADO EM C:\ORCAMPDF", ;
               "ORDEM DE ENTREGA CRIADO EM C:\ORCAMPDF" )
      */


      // MUDEI EM: 08/02/2021 Uma nova experiencia com os PDFS. Joao.
      FWSavePreviewToPDF( oPrn, "ORDEMRECOMP.PDF", .F. )

      PDF_SALVO_EM_ORCAMPDF()  // ESTA EM FUNCOES.PRG 23/11/2020 Joao

      // Para visualizar o PDF. HTMLPDF.PRG - Nuevas versiones.
      HTMLVIEW( "C:\ORCAMPDF\ORDEMRECOMP.PDF" )

   ENDIF

   oFont:End()
   oFontBold:End()
   oFontSubl:End()
   oFontMin:End()
   oFontSub2:End()
   oFontRua:End()

   oPen1:End()
   oPen2:End()
   oPen3:End()

   // PARA FECHAR O ARQUIVO TEMPORARIO
   // OrdDestroy( "nome_do_arquico_temporario" )
   OrdDestroy( "ORCATEMP" )

RETURN( .T. )

// fin
 


Saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Ayuda con Alineación y Justificación TPRINTER

Postby karinha » Mon Apr 12, 2021 1:40 pm

Includes:

Code: Select all  Expand view

#Define PAD_LEFT            0
#Define PAD_RIGHT           1
#Define PAD_CENTER          2
 


Saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Ayuda con Alineación y Justificación TPRINTER

Postby FranciscoA » Mon Apr 12, 2021 4:21 pm

Hola José.
Prueba con las siguientes modificaciones a tu código:

Code: Select all  Expand view
function EjeConCmsay(nOrientacion) // 1 Vertical   2 horizontal
    Local oPrn, oImage
    Local oFont9, oFont10CN, oFont14, oFont20B
    Local oPenFine , oPenBold
    Local cBmpLogo
    Local nRow, nCol , nColorBlack
    Local nRowImage, nColImage, nWidthImage, nHighImage

    DEFAULT nOrientacion := 1

    nRow:=1.5
    nCol:=9
    nColorBlack:=RGB(0,0,0)

    nRowImage:=8
    nColImage:=4
    nWidthImage:=386
    nHighImage:=395

    cBmpLogo:="C:\FWH1709\BITMAPS\PNGS\2.PNG"
    oImage:= Timage():Define(,cBmpLogo)

    PRINT oPrn DOC 'Patron de Prueba'  PREVIEW MODAL

    oPrn:SetPage(9)   //A4
    iif(nOrientacion=1,oPrn:SetPortrait(),oPrn:SetLandScape())

    DEFINE FONT oFont9     NAME "ARIAL"        SIZE 0, -9        OF oPrn
    DEFINE FONT oFont10CN  NAME "COURIER NEW"  SIZE 0, -10 BOLD  OF oPrn
    DEFINE FONT oFont14    NAME "ARIAL"        SIZE 0, -14       OF oPrn
    DEFINE FONT oFont20B   NAME "ARIAL"        SIZE 0, -20 BOLD  OF oPrn
    DEFINE PEN  oPenFine   WIDTH 2                               OF oPrn
    DEFINE PEN  oPenBold   WIDTH 3                               OF oPrn

    PAGE
       oPrn:SayImage(nRowImage,40,oImage,nWidthImage,nHighImage)

       oPrn:CmSay( nRow, nCol, "FRANCISCO J. ALEGRIA P.", oFont14,,  nColorBlack,, PAD_LEFT )  //PAD_CENTER )

       nRow:=nRow+.6
       oPrn:CmSay( nRow, nCol, "Sastreria El Jet 70 Vs al Sur, Chinandega", oFont10CN,,  nColorBlack,, PAD_LEFT )  //PAD_CENTER )

       nRow:=nRow+.4
       oPrn:CmSay( nRow, nCol, "XXX-YYYYYY-0000Z", oFont10CN,,  nColorBlack,, PAD_LEFT )  //PAD_CENTER )
    ENDPAGE

    ENDPRINT

    oImage:End()
    RELEASE oFont9,oFont10CN,oFont14,oFont20B,oPenFine,oPenBold
     
return .t.
 
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 71 guests