Page 1 of 2

No logro definir tamaño de papel

Posted: Fri Aug 09, 2024 12:46 pm
by jpcavagnaro
Hola Gente, hace rato que estoy dando vueltas con esto.

Por ejemplo pongo una comandera como predeterminada y chau hace cualquier cosa.

Tengo definido así

printer oPrn file xnombrenota preview
* oPrn:setpage( 9 ) // tama¤o de papel A4
oPrn:setsize( 2098, 2970 )

que estoy haciendo mal, de ninguna de las 2 maneras responde

Re: No logro definir tamaño de papel

Posted: Fri Aug 09, 2024 12:56 pm
by karinha
Hola, mira se ayuda,

Code: Select all | Expand

// C:\FWH\SAMPLES\IMPDIRET.PRG EN TPRINTER.PRG

#Include "FiveWin.ch"

STATIC oWnd

FUNCTION Main()

   DEFINE WINDOW oWnd FROM 1, 1 TO 20, 60 TITLE "Printing Direct"

   @ 3, 3 BUTTON "&Print me" OF oWnd SIZE 80, 20 ACTION( PrintMe() )

   ACTIVATE WINDOW oWnd CENTERED

RETURN NIL

FUNCTION PrintMe()

   FIELD STREET

   LOCAL oPrn, nAltPag, cTexto, nWidt, nFtHi, oFont, oFont2
   LOCAL nTckCol := 3 // Tabulação - 3 espaços - Coluna
   LOCAL nLinha, cAlias

   USE CUSTOMER
   GO TOP

   cAlias := ALIAS()

   cTexto  := "Impressão dos Produtos"

   nLinha  := 1 // Linha Inicial

   PRINT oPrn NAME "Test" PREVIEW

      DEFINE FONT oFont  NAME "Courier New" SIZE 0, - 12 BOLD OF oPrn
      DEFINE FONT oFont2 NAME "Courier New" SIZE 0, - 8  BOLD OF oPrn

      oPrn:SetPage( 256 )

      nWidt := oFont2:nWidth + ( oFont2:nWidth / 4 )
      nFtHi := oFont2:nHeight  // Altura da FONT

      // Altura da página: (60 * Altura da fonte) * 1.3
      nAltPag := ( 60 * nFtHi ) * 1.3

      oPrn:SetSize( 1000, nAltPag )  // 5200.00

      PAGE

        oPrn:Say( nLinha*nFtHi,000, SPACE(nTckCol)+"--------------------------" + ;
                                                   "--------------", oFont2 )
        nLinha := nLinha + 1

        oPrn:Say( nLinha*nFtHi,000, SPACE(nTckCol)+cTexto, oFont2 )

        nLinha := nLinha + 1

        oPrn:Say( nLinha*nFtHi,000, SPACE(nTckCol)+"--------------------------" + ;
                                                  "--------------", oFont2 )

        nLinha := nLinha + 2

        // Produtos
        WHILE( .NOT. EOF() )

           SYSREFRESH()

           IF EOF()

              EXIT

           ENDIF

           oPrn:Say( nLinha*nFtHi,000, SPACE(nTckCol) + ( cAlias )->STREET, oFont2 )

           nLinha := nLinha + 1

           IF( nLinha * nFtHi ) >= ( 180 * nFtHi )

               oPrn:EndPage()

               oPrn:StartPage()

               nLinha := 1

           ENDIF

           SKIP

        ENDDO

      ENDPAGE

   ENDPRINT

   oFont:End()
   oFont2:End()

RETURN NIL

// FIN / END - kapiabafwh@gmail.com
 
Regards, saludos.

Re: No logro definir tamaño de papel

Posted: Fri Aug 09, 2024 1:35 pm
by jpcavagnaro
Hola gracias por responder, no me funciona.

https://drive.google.com/file/d/1UFcIwi ... drive_link

Re: No logro definir tamaño de papel

Posted: Fri Aug 09, 2024 2:06 pm
by karinha
jpcavagnaro wrote:Hola gracias por responder, no me funciona.

https://drive.google.com/file/d/1UFcIwi ... drive_link
Explique lo que quiere hacer y lo que no puede hacer. Si es posible, publique el código fuente.

https://forums.fivetechsupport.com/view ... hp?t=12647

https://forums.fivetechsupport.com/view ... it=SETPAGE

Regards, saludos.

Re: No logro definir tamaño de papel

Posted: Fri Aug 09, 2024 2:23 pm
by jpcavagnaro
Lo que quiero es imprimir un informe en hoja A4 y que se respete el tamaño sin que tenga en cuenta la impresora predeterminada.

El tema es que se usa en varias pc y tienen distintas impresoras y tamaños de papel predeterminados y sale en algunas bien y en otras mal, porque no se respeta el A4 que necesito.

xnombrenota = "c:\archivos pdf\Informe de Auditorias - " + str( xnrocli, 6 ) + "-" + strzero( xnAudit, 8 ) + ".pdf"
lvalorizada = .F.
publ xhoja := 0
printer oPrn file xnombrenota preview
oPrn:setpage( 9 ) // tama¤o de papel A4

Re: No logro definir tamaño de papel

Posted: Fri Aug 09, 2024 3:24 pm
by karinha
Simples, D+

Code: Select all | Expand

// C:\FWH\SAMPLES\BOXROUND.PRG - kapiabafwh@gmail.com

#include "FiveWin.ch"

#define PAD_LEFT            0
#define PAD_RIGHT           1
#define PAD_CENTER          2

FUNCTION BoxRed() // CAIXA REDONDA - BOXROUND.

   LOCAL oPrn, oFont, oFont2, oFont3, oPen, oPen1, oPen2, oPen3
   LOCAL oBrush, oFondo
   LOCAL ResLinha, ResColuna, nLinha, nColuna
   LOCAL nLinBox, nColBox, nAltBox, nTamBox, lBorEsq, lBorDir
   // 60 caracteres en el maximo
   LOCAL cTxt1 := "Lo que quiero es imprimir un informe en hoja A4 y que se"
   LOCAL cTxt2 := "respete el tamaño sin que tenga en cuenta la impresora  "
   LOCAL cTxt3 := "predeterminada. El tema es que se usa en varias pc y    "
   LOCAL cTxt4 := "tienen distintas impresoras y tamaños de papel          "
   LOCAL cTxt5 := "predeterminados y sale en algunas bien y en otras mal,  "
   LOCAL cTxt6 := "porque no se respeta el A4 que necesito.                "
   LOCAL cTxt7 := "Cómo imprimir en centímetros en cualquier impresora     "
   LOCAL cTxt8 := "                                     jpcavagnaro - Jorge"

   PRINT oPrn NAME "Ejemplo de caja redondeada" PREVIEW

      DEFINE BRUSH oBrush   COLOR nRGB(250,213,174) // Bello
      DEFINE BRUSH oFondo   COLOR CLR_GRAY  // HGRAY

      DEFINE PEN oPen  WIDTH 2  COLOR CLR_CYAN                    OF oPrn
      Define Pen oPen1 Width 25 COLOR nRgb( 192, 192, 192 )       OF oPrn
      DEFINE PEN oPen2 WIDTH 2  COLOR CLR_BROWN                   OF oPrn
      DEFINE PEN oPen3 WIDTH 50 COLOR nRgb( 192, 192, 192 )       OF oPrn

      DEFINE FONT oFont  NAME "Arial" SIZE 0, - 6  BOLD           OF oPrn
      DEFINE FONT oFont2 NAME "Arial" SIZE 0, - 12 BOLD Underline OF oPrn
      DEFINE FONT oFont3 NAME "Arial" SIZE 0, - 16 BOLD           OF oPrn

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

      // Cómo imprimir en centímetros en cualquier impresora
      ResLinha  := oPrn:nLogPixely() / 2.54
      ResColuna := oPrn:nLogPixelx() / 2.54

      PAGE

        nLinha  := 2.25
        nColuna := 9.50

        nLinBox := 1.60  // Linha que Inicia o Box
        nColBox := 5.50  // Coluna que inicia o Box
        nAltBox := 3.50  // Altura do Box
        nTamBox := 13.60 // Tamanho(Largura) do Box horizontal
        lBorEsq := 90    // Bordas arredondadas esquerda.
        lBorDir := 90    // Bordas arrendondadas direita.

        Box_Round( nLinBox , nColBox , nAltBox, nTamBox, oPrn, lBorEsq, lBorDir, oPen, oFondo )

        oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                    ;
           + "DESCRIZIONE DOCUMENTO", oFont2,, CLR_BLACK,, PAD_CENTER )

        nLinha := nLinha + .80

        oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                    ;
           + "FiveWin is invincible.", oFont,, CLR_BLACK,, PAD_CENTER )

        nLinha := nLinha + 2.50

        oPrn:Say( nLinha * ResLinha, nColuna + 10 * ResColuna,               ;
           + cTxt7, oFont3,, CLR_BLACK,, PAD_CENTER )

        nLinha := nLinha + 1.50

        oPrn:Say( nLinha * ResLinha, nColuna + 10 * ResColuna,               ;
           + cTxt1, oFont3,, CLR_BLACK,, PAD_CENTER )

        nLinha := nLinha + 0.80

        oPrn:Say( nLinha * ResLinha, nColuna + 10 * ResColuna,               ;
           + cTxt2, oFont3,, CLR_BLACK,, PAD_CENTER )

        nLinha := nLinha + 0.80

        oPrn:Say( nLinha * ResLinha, nColuna + 10 * ResColuna,               ;
           + cTxt3, oFont3,, CLR_BLACK,, PAD_CENTER )

        nLinha := nLinha + 0.80

        oPrn:Say( nLinha * ResLinha, nColuna + 10 * ResColuna,               ;
           + cTxt4, oFont3,, CLR_BLACK,, PAD_CENTER )

        nLinha := nLinha + 0.80

        oPrn:Say( nLinha * ResLinha, nColuna + 10 * ResColuna,               ;
           + cTxt5, oFont3,, CLR_BLACK,, PAD_CENTER )

        nLinha := nLinha + 0.80

        oPrn:Say( nLinha * ResLinha, nColuna + 10 * ResColuna,               ;
           + cTxt6, oFont3,, CLR_BLACK,, PAD_CENTER )

        nLinha := nLinha + 1.50

        oPrn:Say( nLinha * ResLinha, nColuna + 10 * ResColuna,               ;
           + cTxt7, oFont3,, CLR_BLACK,, PAD_CENTER )

        nLinha := nLinha + 10.00

        oPrn:Say( nLinha * ResLinha, nColuna + 10 * ResColuna,               ;
           + cTxt8, oFont3,, METRO_VIOLET,, PAD_CENTER )

      ENDPAGE

   ENDPRINT

   oBrush:End()
   oFondo:End()
   oPen:End()
   oPen:Release()

RETURN nil

FUNCTION Box_Round( nArriba, nIzq, nAbajo, nDerecha, oPrn, a, b, oPen, oBrush )

   LOCAL hOldPen, xCor := {} , yCor := {}
   LOCAL hOldBrush

   // Pasamos coordenadas de cms a pixel
   xCor := oPrn:Cmtr2Pix(nArriba,nIzq)
   yCor := oPrn:Cmtr2Pix(nAbajo,nDerecha)

   // Guardamos el Lapiz y la brocha que teniamos
   hOldPen   := SelectObject( oPrn:hDcOut, oPen:hPen )
   hOldBrush := SelectObject( oPrn:hDcOut, oBrush:hBrush )

   //Dibujamos el rectangulo redondeado
   roundrect(oPrn:hdcOut,xCor[2],xCor[1],yCor[2],yCor[1],a,b)

   // y  seleccionamos el que habiamos guardado
   selectObject( oPrn:hDcOut, hOldPen )
   selectObject( oPrn:hDcOut, hOldBrush )

RETURN NIL

#IFDEF __HARBOUR__
   DLL FUNCTION RoundRect( hDC AS LONG, ;
              iLeft AS _INT , iTop AS _INT, ;
              iRight AS _INT, iBottom AS _INT, ;
              iWidth AS _INT, iHeight AS _INT ) AS BOOL PASCAL LIB "GDI32.DLL"
#ELSE
   DLL FUNCTION RoundRect( hDC AS WORD, ;
              iLeft AS _INT , iTop AS _INT, ;
              iRight AS _INT, iBottom AS _INT, ;
              iWidth AS _INT, iHeight AS _INT ) AS BOOL PASCAL LIB "GDI.EXE"
#ENDIF
 
Regards, saludos.

Re: No logro definir tamaño de papel

Posted: Fri Aug 09, 2024 6:10 pm
by jpcavagnaro
No, sigue sin funcionar, puede ser que me falte alguna librería o dll

Re: No logro definir tamaño de papel

Posted: Fri Aug 09, 2024 6:13 pm
by karinha
jpcavagnaro wrote:No, sigue sin funcionar, puede ser que me falte alguna librería o dll
No es posible, lo uso así desde hace años y funciona bien en varias impresoras. ¿Cuál es la marca y modelo de la impresora, por favor?

Regards, saludos.

Re: No logro definir tamaño de papel

Posted: Sun Aug 11, 2024 1:32 pm
by jpcavagnaro
Hola, en principio definiendo así se soluciona, pero me genero otros problemas, por ej. tuve que anular Box_Round porque da error:

TPrinter():lUseHaruPDF := .t.
PRINT oPrn PREVIEW FILE "jorge.pdf"

Sigo intentando, pero es una alternativa
También tuve problemas con oPrn:FillRect entre otros, no entiendo porque pero bueno si se supone que no tiene que modificar tanto

Re: No logro definir tamaño de papel

Posted: Sun Aug 11, 2024 2:37 pm
by nageswaragunupudi
Please try

Code: Select all | Expand

TPrinter():lUseHaruPDF := .F.
PRINT oPrn PREVIEW FILE "jorge.pdf"
 
What is the problem?

Re: No logro definir tamaño de papel

Posted: Mon Aug 12, 2024 2:51 pm
by jpcavagnaro
Tengo definido así:

TPrinter():lUseHaruPDF := .f.
PRINT oPrn PREVIEW FILE "jorge.pdf"
oPrn:setpage( 9 ) // tama¤o de papel A4


publ xAncho := ( ( oPrn:nHorzRes() / 25.4 ) / 10 ) //-1
publ xAltocm := ( ( oPrn:nVertRes() / 25.4 ) / 10 ) // -1.5

? xaltocm, xancho

los valores que muestra xAncho y xAltocm sin los valores que tiene la impresora predeterminada y no los valores del setpage(9)

Re: No logro definir tamaño de papel

Posted: Mon Aug 12, 2024 3:07 pm
by karinha
Jorge, show the lines where you generate the TEXT/PDF, pls.

Jorge, muestra las líneas donde generas el TEXTO/PDF, por favor.

Y no dijiste la marca y modelo de la impresora con problemas.

And you didn't say the brand and model of the printer with problems.

Tks.

Regards, saludos.

Re: No logro definir tamaño de papel

Posted: Mon Aug 12, 2024 7:10 pm
by jpcavagnaro
Hola, no me hago entender, ahí donde muestro los datos del ancho y alto de la hoja no me toma el set page(9)

Igual la impresora es una hp deskjet 3050 que le puse como ejemplo A5

Tambien lo probre con una comandera SAM4S GIANT-100 y tambien con una Brother HL-1200

Con cualquiera que pruebe los comandos oPrn:nHorzRes() y oPrn:nVertRes() me devuelven los valores que tiene la impresora predeterminada que no tiene nada que ver con el pdf que quiero generar con una hoja A4

no copio el listado porque es muy grande pero imprimos con oPrn:cmsay(........

Re: No logro definir tamaño de papel

Posted: Mon Aug 12, 2024 7:32 pm
by karinha
NO

Code: Select all | Expand

 oPrn:cmsay
 
cambie a:

Code: Select all | Expand

 oPrn:say
 
Regards, saludos.

Re: No logro definir tamaño de papel

Posted: Wed Aug 14, 2024 12:31 pm
by karinha

Code: Select all | Expand

// C:\FWH\SAMPLES\BOXROUND.PRG - kapiabafwh@gmail.com - 14/08/2024 - Joao.

#include "FiveWin.ch"

#define PAD_LEFT            0
#define PAD_RIGHT           1
#define PAD_CENTER          2

FUNCTION BoxRed() // CAIXA REDONDA - BOXROUND.

   LOCAL oPrn, oFont, oFont2, oFont3, oPen, oPen1, oPen2, oPen3
   LOCAL oBrush, oFondo
   LOCAL ResLinha, ResColuna, nLinha, nColuna
   LOCAL nLinBox, nColBox, nAltBox, nTamBox, lBorEsq, lBorDir
   // 60 caracteres en el maximo
   LOCAL cTxt1 := "Lo que quiero es imprimir un informe en hoja A4 y que se"
   LOCAL cTxt2 := "respete el tamaño sin que tenga en cuenta la impresora  "
   LOCAL cTxt3 := "predeterminada. El tema es que se usa en varias pc y    "
   LOCAL cTxt4 := "tienen distintas impresoras y tamaños de papel          "
   LOCAL cTxt5 := "predeterminados y sale en algunas bien y en otras mal,  "
   LOCAL cTxt6 := "porque no se respeta el A4 que necesito.                "
   LOCAL cTxt7 := "Cómo imprimir en centímetros en cualquier impresora     "
   LOCAL cTxt8 := "                                     jpcavagnaro - Jorge"
   LOCAL xAncho, xAltocm

   PRINT oPrn NAME "Ejemplo de caja redondeada" PREVIEW

      DEFINE BRUSH oBrush COLOR nRGB(250,213,174) // Bello
      DEFINE BRUSH oFondo COLOR CLR_GRAY          // HGRAY

      DEFINE PEN oPen  WIDTH 2  COLOR CLR_CYAN                    OF oPrn
      Define Pen oPen1 Width 25 COLOR nRgb( 192, 192, 192 )       OF oPrn
      DEFINE PEN oPen2 WIDTH 2  COLOR CLR_BROWN                   OF oPrn
      DEFINE PEN oPen3 WIDTH 50 COLOR nRgb( 192, 192, 192 )       OF oPrn

      DEFINE FONT oFont  NAME "Arial" SIZE 0, - 6  BOLD           OF oPrn
      DEFINE FONT oFont2 NAME "Arial" SIZE 0, - 12 BOLD Underline OF oPrn
      DEFINE FONT oFont3 NAME "Arial" SIZE 0, - 16 BOLD           OF oPrn

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

      /*
      // Cómo imprimir en centímetros en cualquier impresora
      ResLinha  := oPrn:nLogPixely() / 2.54
      ResColuna := oPrn:nLogPixelx() / 2.54
      */

      /* MEJOR, SIEMPRE USAR LOCAL.
      publ xAncho := ( ( oPrn:nHorzRes() / 25.4 ) / 10 ) //-1
      publ xAltocm := ( ( oPrn:nVertRes() / 25.4 ) / 10 ) // -1.5
      */

      // USANDO: oPrn:Say
      xAncho    := ( ( oPrn:nHorzRes() / 25.4 ) )
      xAltocm   := ( ( oPrn:nVertRes() / 25.4 ) )

      ResLinha  := xAncho
      ResColuna := xAltocm

      PAGE

        nLinha  := 2.25
        nColuna := 9.50

        nLinBox := 1.60  // Linha que Inicia o Box  // 1.60
        nColBox := 7.40  // Coluna que inicia o Box // 7.50
        nAltBox := 3.50  // Altura do Box
        nTamBox := 15.60 // Tamanho(Largura) do Box horizontal // 13.60
        lBorEsq := 90    // Bordas arredondadas esquerda.
        lBorDir := 90    // Bordas arrendondadas direita.

        Box_Round( nLinBox , nColBox , nAltBox, nTamBox, oPrn, lBorEsq, lBorDir, oPen, oFondo )

        oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                    ;
           + "DESCRIZIONE DOCUMENTO", oFont2,, CLR_BLACK,, PAD_CENTER )

        nLinha := nLinha + 1.50

        oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                    ;
           + "FiveWin is invincible.", oFont,, CLR_BLACK,, PAD_CENTER )

        nLinha := nLinha + 3.50

        oPrn:Say( nLinha * ResLinha, nColuna + 8.9 * ResColuna,              ;
           + cTxt7, oFont3,, CLR_BLACK,, PAD_CENTER )

        nLinha := nLinha + 1.50

        oPrn:Say( nLinha * ResLinha, nColuna + 8.9 * ResColuna,              ;
           + cTxt1, oFont3,, CLR_BLACK,, PAD_CENTER )

        nLinha := nLinha + 1.50

        oPrn:Say( nLinha * ResLinha, nColuna + 8.9 * ResColuna,              ;
           + cTxt2, oFont3,, CLR_BLACK,, PAD_CENTER )

        nLinha := nLinha + 1.50

        oPrn:Say( nLinha * ResLinha, nColuna + 8.9 * ResColuna,              ;
           + cTxt3, oFont3,, CLR_BLACK,, PAD_CENTER )

        nLinha := nLinha + 1.50

        oPrn:Say( nLinha * ResLinha, nColuna + 8.9 * ResColuna,              ;
           + cTxt4, oFont3,, CLR_BLACK,, PAD_CENTER )

        nLinha := nLinha + 1.50

        oPrn:Say( nLinha * ResLinha, nColuna + 8.9 * ResColuna,              ;
           + cTxt5, oFont3,, CLR_BLACK,, PAD_CENTER )

        nLinha := nLinha + 1.50

        oPrn:Say( nLinha * ResLinha, nColuna + 8.9 * ResColuna,              ;
           + cTxt6, oFont3,, CLR_BLACK,, PAD_CENTER )

        nLinha := nLinha + 1.50

        oPrn:Say( nLinha * ResLinha, nColuna + 8.9 * ResColuna,              ;
           + cTxt7, oFont3,, CLR_BLACK,, PAD_CENTER )

        nLinha := nLinha + 15.00

        oPrn:Say( nLinha * ResLinha, nColuna + 8.9 * ResColuna,              ;
           + cTxt8, oFont3,, METRO_VIOLET,, PAD_CENTER )

      ENDPAGE

   ENDPRINT

   oBrush:End()
   oFondo:End()
   oPen:End()
   oPen:Release()

RETURN nil

FUNCTION Box_Round( nArriba, nIzq, nAbajo, nDerecha, oPrn, a, b, oPen, oBrush )

   LOCAL hOldPen, xCor := {} , yCor := {}
   LOCAL hOldBrush

   // Pasamos coordenadas de cms a pixel
   xCor := oPrn:Cmtr2Pix(nArriba,nIzq)
   yCor := oPrn:Cmtr2Pix(nAbajo,nDerecha)

   // Guardamos el Lapiz y la brocha que teniamos
   hOldPen   := SelectObject( oPrn:hDcOut, oPen:hPen )
   hOldBrush := SelectObject( oPrn:hDcOut, oBrush:hBrush )

   //Dibujamos el rectangulo redondeado
   roundrect(oPrn:hdcOut,xCor[2],xCor[1],yCor[2],yCor[1],a,b)

   // y  seleccionamos el que habiamos guardado
   selectObject( oPrn:hDcOut, hOldPen )
   selectObject( oPrn:hDcOut, hOldBrush )

RETURN NIL

#IFDEF __HARBOUR__
   DLL FUNCTION RoundRect( hDC AS LONG, ;
              iLeft AS _INT , iTop AS _INT, ;
              iRight AS _INT, iBottom AS _INT, ;
              iWidth AS _INT, iHeight AS _INT ) AS BOOL PASCAL LIB "GDI32.DLL"
#ELSE
   DLL FUNCTION RoundRect( hDC AS WORD, ;
              iLeft AS _INT , iTop AS _INT, ;
              iRight AS _INT, iBottom AS _INT, ;
              iWidth AS _INT, iHeight AS _INT ) AS BOOL PASCAL LIB "GDI.EXE"
#ENDIF

// FIN / END
 

Regards, saludos.