PRINT TO PDF
Moderator: Rathinagiri
- SALINETAS24
- Posts: 667
- Joined: Tue Feb 27, 2018 3:06 am
- DBs Used: DBF
- Contact:
PRINT TO PDF
Hola a todos
Estoy haciendo una prueba para poder crear un PDF sin necesidad de previsualizarlo, que no intervenga el usuario, pero tengo problemas con los acentos, con los caracteres especiales y con las imagenes.
Acompaño el ejemplo de samples con una pequeña modificación.
Si elegimos cualquiera de las dos primeras opciones, nos creará el PDF y será previsualizado correctamente, pero si elegimos la tercera opción..., crear el PDF sin presivualización...., entonces da errores varios, no carga el BMP y los caracteres especiales "áéí ññ etc" son modificados.
El tema es que la misma opción tendría que servir, para crear una factura y previsualizarla o solo para crear su PDF y archivarlo sin necesidad de que el usuario intervenga en esta acción.
¿Es que no sirve el mismo código...?
¿Porqué tantos problemas con los acentos y demás zarandajas...?
¿Alguna solución...?
Muchas gracias
Estoy haciendo una prueba para poder crear un PDF sin necesidad de previsualizarlo, que no intervenga el usuario, pero tengo problemas con los acentos, con los caracteres especiales y con las imagenes.
Acompaño el ejemplo de samples con una pequeña modificación.
Si elegimos cualquiera de las dos primeras opciones, nos creará el PDF y será previsualizado correctamente, pero si elegimos la tercera opción..., crear el PDF sin presivualización...., entonces da errores varios, no carga el BMP y los caracteres especiales "áéí ññ etc" son modificados.
El tema es que la misma opción tendría que servir, para crear una factura y previsualizarla o solo para crear su PDF y archivarlo sin necesidad de que el usuario intervenga en esta acción.
¿Es que no sirve el mismo código...?
¿Porqué tantos problemas con los acentos y demás zarandajas...?
¿Alguna solución...?
Muchas gracias
- Attachments
-
- Print_to_PDF.rar
- (1.33 MiB) Downloaded 155 times
Como dijo el gran pensador Hommer Simpson..., - En este mundo solo hay 3 tipos de personas, los que saben contar y los que no.
Re: PRINT TO PDF
Personalmente, uso comandos nativos de HMG HPDF para crear archivos PDF, en lugar de la pseudofunción SELECT PRINTER PDF
Hay varias razones:
- las imágenes en PDF solo pueden ser de tipo PNG o JPG, si es de tipo JPG, este tipo debe declararse junto a HPDFPRINT IMAGE .... TYPE JPG
- No hay declaración de atributos de imagen STRETCH, TRANSPARENT, TRANSPARENTCOLOR en PDF. Las imágenes son siempre ESTIRADAS, por eso es tan importante dar las dimensiones correctas en mm.
- La compatibilidad con UTF-8 en PDF requiere declaraciones adicionales: HPDF_UseUTFEncodings, SET HPDFDOC ENCODING TO "UTF-8" que no se puede definir en la solución SELECT PRINTER PDF debido al hecho de que en el momento de la "declaración de documento PDF" no es realmente allí todavía declarado como objeto.
Hay varias razones:
- las imágenes en PDF solo pueden ser de tipo PNG o JPG, si es de tipo JPG, este tipo debe declararse junto a HPDFPRINT IMAGE .... TYPE JPG
- No hay declaración de atributos de imagen STRETCH, TRANSPARENT, TRANSPARENTCOLOR en PDF. Las imágenes son siempre ESTIRADAS, por eso es tan importante dar las dimensiones correctas en mm.
- La compatibilidad con UTF-8 en PDF requiere declaraciones adicionales: HPDF_UseUTFEncodings, SET HPDFDOC ENCODING TO "UTF-8" que no se puede definir en la solución SELECT PRINTER PDF debido al hecho de que en el momento de la "declaración de documento PDF" no es realmente allí todavía declarado como objeto.
- SALINETAS24
- Posts: 667
- Joined: Tue Feb 27, 2018 3:06 am
- DBs Used: DBF
- Contact:
Re: PRINT TO PDF
Muchas gracias EDK, es correcto tu ejemplo.
Una cervecita virtual para ti..
Una cervecita virtual para ti..
Como dijo el gran pensador Hommer Simpson..., - En este mundo solo hay 3 tipos de personas, los que saben contar y los que no.
- SALINETAS24
- Posts: 667
- Joined: Tue Feb 27, 2018 3:06 am
- DBs Used: DBF
- Contact:
Re: PRINT TO PDF
Bueno, perdonar que insista...,
¿no hay ninguna forma de que aparezcan los acentos "áéíóú" y las "ñ" utilizando SELECT PRINTER PDF ..?
Gracias de antemano.
¿no hay ninguna forma de que aparezcan los acentos "áéíóú" y las "ñ" utilizando SELECT PRINTER PDF ..?
Gracias de antemano.
Como dijo el gran pensador Hommer Simpson..., - En este mundo solo hay 3 tipos de personas, los que saben contar y los que no.
Re: PRINT TO PDF
Debe cambiar temporalmente a una página de códigos que no sea UTF8, por ejemplo, Win1252, y convertir las cadenas de UTF8 a la página de códigos actual mientras genera las impresiones.SALINETAS24 wrote: ↑Mon Feb 22, 2021 7:19 pm Bueno, perdonar que insista...,
¿no hay ninguna forma de que aparezcan los acentos "áéíóú" y las "ñ" utilizando SELECT PRINTER PDF ..?
Gracias de antemano.
Code: Select all
#include "hmg.ch"
#include "hmg_hpdf.ch"
*------------------------------------------------------------------------------*
Function Main()
*------------------------------------------------------------------------------*
REQUEST HB_CODEPAGE_ESWIN
// AVAILABLE LIBRARY INTERFACE LANGUAGES
// SET LANGUAGE TO ENGLISH (DEFAULT)
// SET LANGUAGE TO SPANISH
// SET LANGUAGE TO PORTUGUESE
// SET LANGUAGE TO ITALIAN
// SET LANGUAGE TO GERMAN
// SET LANGUAGE TO FRENCH
Private aColor [10]
aColor [1] := YELLOW
aColor [2] := PINK
aColor [3] := RED
aColor [4] := FUCHSIA
aColor [5] := BROWN
aColor [6] := ORANGE
aColor [7] := GREEN
aColor [8] := PURPLE
aColor [9] := BLACK
aColor [10] := BLUE
DEFINE WINDOW Win_1 ;
AT 0,0 ;
WIDTH 400 ;
HEIGHT 400 ;
TITLE 'MiniPrint Library Test' ;
MAIN
DEFINE MAIN MENU
DEFINE POPUP 'File'
MENUITEM 'Default Printer' ACTION PrintTest1()
* MENUITEM 'User Selected Printer' ACTION PrintTest2()
* MENUITEM 'User Selected Printer And Settings' ACTION PrintTest3()
MENUITEM 'User Selected Printer And Settings (Preview)' ACTION PrintTest4()
MENUITEM 'PDF Print' ACTION PrintTest5()
END POPUP
END MENU
END WINDOW
MAXIMIZE WINDOW Win_1
ACTIVATE WINDOW Win_1
Return
*------------------------------------------------------------------------------*
Procedure PrintTest1()
*------------------------------------------------------------------------------*
Local i
SELECT PRINTER DEFAULT PREVIEW;
ORIENTATION PRINTER_ORIENT_PORTRAIT ;
PAPERSIZE PRINTER_PAPER_LETTER ;
QUALITY PRINTER_RES_MEDIUM
PrintDoc()
MsgInfo('Print Finished')
Return
*------------------------------------------------------------------------------*
Procedure PrintTest2()
*------------------------------------------------------------------------------*
Local i
Local cPrinter
cPrinter := GetPrinter()
If Empty (cPrinter)
Return
EndIf
SELECT PRINTER cPrinter ;
ORIENTATION PRINTER_ORIENT_PORTRAIT ;
PAPERSIZE PRINTER_PAPER_LETTER ;
QUALITY PRINTER_RES_MEDIUM
PrintDoc()
MsgInfo('Print Finished')
Return
*------------------------------------------------------------------------------*
Procedure PrintTest3()
*------------------------------------------------------------------------------*
Local i
Local lSuccess
// Measure Units Are Millimeters
SELECT PRINTER DIALOG TO lSuccess
If lSuccess == .T.
PrintDoc()
MsgInfo('Print Finished')
EndIf
Return
*------------------------------------------------------------------------------*
Procedure PrintTest4()
*------------------------------------------------------------------------------*
Local i
Local lSuccess
SELECT PRINTER DIALOG TO lSuccess PREVIEW
If lSuccess == .T.
PrintDoc()
MsgInfo('Print Finished')
EndIf
Return
*------------------------------------------------------------------------------*
Procedure PrintTest5()
*------------------------------------------------------------------------------*
Local i
Local lSuccess
SELECT PRINTER PDF 'pdfprintdemo.pdf' TO lSuccess
If lSuccess == .T.
PrintDoc()
MsgInfo('Print Finished')
if file( 'pdfprintdemo.pdf')
execute file 'pdfprintdemo.pdf'
endif
EndIf
Return
*------------------------------------------------------------------------------*
Procedure PrintDoc
*------------------------------------------------------------------------------*
Local i
HB_SETCODEPAGE("ESWIN")
// Measure Units Are Millimeters
IF _HMG_SYSDATA [ 513 ] == .T. //SELECT PRINTER PDF
SET HPDFDOC ENCODING TO "CP1252"
ENDIF
START PRINTDOC
START PRINTPAGE
@ 5,020 PRINT IMAGE "Dibus.png" WIDTH 70 HEIGHT 25
@ 20,20 PRINT hb_UTF8TOSTR("José ÁÉÍÓÚ ÑOÑA ESPAÑA") ;
FONT "Arial" ;
SIZE 20
@ 30,20 PRINT RECTANGLE ;
TO 40,190 ;
PENWIDTH 0.1;
COLOR {255,255,0}
@ 60,20 PRINT RECTANGLE ;
TO 100,190 ;
PENWIDTH 0.1;
COLOR {255,255,0};
FILLED
@ 110,20 PRINT RECTANGLE ;
TO 150,190 ;
PENWIDTH 0.1;
COLOR {255,255,0};
ROUNDED
@ 160,20 PRINT RECTANGLE ;
TO 200,190 ;
PENWIDTH 0.1;
COLOR {255,255,0};
FILLED;
ROUNDED
END PRINTPAGE
START PRINTPAGE
@ 20,20 PRINT "Filled Rectangle Sample:" ;
FONT "Arial" ;
SIZE 20
@ 30,20 PRINT RECTANGLE ;
TO 40,190 ;
PENWIDTH 0.1
@ 60,20 PRINT RECTANGLE ;
TO 100,190 ;
PENWIDTH 0.1;
FILLED
@ 110,20 PRINT RECTANGLE ;
TO 150,190 ;
PENWIDTH 0.1;
ROUNDED
@ 160,20 PRINT RECTANGLE ;
TO 200,190 ;
PENWIDTH 0.1;
FILLED;
ROUNDED
END PRINTPAGE
END PRINTDOC
HB_SETCODEPAGE("UTF8")
Return
- SALINETAS24
- Posts: 667
- Joined: Tue Feb 27, 2018 3:06 am
- DBs Used: DBF
- Contact:
Re: PRINT TO PDF
Muy agradecido Edk, magnifica solución.
He tenido que hacer una modificación, ya que cuando se trata de cambiar el contenido de una variable, no lo hace.
He cambiado por esto
De todas formas mañana le daré un nuevo repaso.
Un saludo y una cerveza virtual..., agradecido.
He tenido que hacer una modificación, ya que cuando se trata de cambiar el contenido de una variable, no lo hace.
Code: Select all
local cVar:="José ÁÉÍÓÚ ÑOÑA ESPAÑA"
@ 10,20 PRINT hb_UTF8TOSTR("José ÁÉÍÓÚ ÑOÑA ESPAÑA") ; // resultado OK
FONT "Arial" ;
SIZE 20
@ 20,20 PRINT hb_UTF8TOSTR(cVAr) ; // resultado NO OK
FONT "Arial" ;
SIZE 20
Code: Select all
LOCAL cPage:="UTF8"
IF _HMG_SYSDATA [ 513 ] == .T. //SELECT PRINTER PDF
SET HPDFDOC ENCODING TO "CP1252"
cPage:="ESWIN"
ENDIF
@ 10,20 PRINT HB_TRANSLATE("José ÁÉÍÓÚ ÑOÑA ESPAÑA",,cPage) ; // RESULTADO OK
FONT "Arial" ;
SIZE 20
@ 20,10 PRINT HB_TRANSLATE(cVar,,cPage) // RESULTADO OK
Un saludo y una cerveza virtual..., agradecido.
Como dijo el gran pensador Hommer Simpson..., - En este mundo solo hay 3 tipos de personas, los que saben contar y los que no.
- SALINETAS24
- Posts: 667
- Joined: Tue Feb 27, 2018 3:06 am
- DBs Used: DBF
- Contact:
Re: PRINT TO PDF
edk wrote: ↑Mon Feb 22, 2021 9:42 pm
Debe cambiar temporalmente a una página de códigos que no sea UTF8, por ejemplo, Win1252, y convertir las cadenas de UTF8 a la página de códigos actual mientras genera las impresiones.
PD Prg está codificado en UTF8Code: Select all
#include "hmg.ch" #include "hmg_hpdf.ch" ... / ... HB_SETCODEPAGE("UTF8") Return
Hola EDK, perdón por molestar, solo para decirte que tu código funciona correctamente. ¡¡MAGNIFICO!!
Solo un par de curiosidades, (me estaba volviendo loco).
Defino mi entorno
Utilizo NOTEPAD ++ con codificación UTF-8
En mi programa MAIN cargo
SET LANGUAGE TO SPANISH
SET CODEPAGE TO UNICODE
Y en programa que EDK ha creado
Code: Select all
REQUEST HB_CODEPAGE_ESWIN
HB_SETCODEPAGE("ESWIN")
// Measure Units Are Millimeters
IF _HMG_SYSDATA [ 513 ] == .T. //SELECT PRINTER PDF
SET HPDFDOC ENCODING TO "CP1252"
ENDIF
... /...
y para terminar
HB_SETCODEPAGE("UTF8")
Si lo que quiero mostar son "ñññ, ááééíí".., etc como una cadena o variable tengo que hacerlo así
Code: Select all
@ 10,20 PRINT hb_UTF8TOSTR("José ÁÉÍÓÚ ÑOÑA ESPAÑA") ; // OK
FONT "Arial" ;
SIZE 20
@ 20,20 PRINT hb_UTF8TOSTR(cVAr[1]) ; // OK
FONT "Arial" ;
SIZE 20
Code: Select all
@ 20,20 PRINT hb_UTF8TOSTR(Datos->DIRECCION) ; // MAL...,
FONT "Arial" ;
SIZE 20
@ 20,20 PRINT Datos->DIRECCION ; // OK,
FONT "Arial" ;
SIZE 20
En fin.., por si alguno esta enganchado con PRINT PDF.., gracias a EDK ya tengo solución.
EDK, te mando saludos cordiales con "caja" de botellines de cerveza fresquita incluida!!
Como dijo el gran pensador Hommer Simpson..., - En este mundo solo hay 3 tipos de personas, los que saben contar y los que no.
Re: PRINT TO PDF
Aquí debe prestar atención a la página de códigos que ha guardado los datos en la base de datos. Probablemente codifique prg en UTF8, por lo que necesita convertir cadenas prg para PDF a Win1252, y ya tiene datos de Win1252 almacenados en la base de datos, por lo que la conversión de estos datos da como resultado caracteres incorrectos, creo.SALINETAS24 wrote: ↑Tue Feb 23, 2021 8:17 am Perooooo, (y aquí viene mi locura), cuando el dato es leído de un fichero NO HACE FALTA, SE VISUALIZARA MAL...Desconozco porque en unos casos hay que usarlo y en otros no.....,Code: Select all
@ 20,20 PRINT hb_UTF8TOSTR(Datos->DIRECCION) ; // MAL..., FONT "Arial" ; SIZE 20 @ 20,20 PRINT Datos->DIRECCION ; // OK, FONT "Arial" ; SIZE 20
En fin.., por si alguno esta enganchado con PRINT PDF.., gracias a EDK ya tengo solución.
EDK, te mando saludos cordiales con "caja" de botellines de cerveza fresquita incluida!!
Aún puede intentar verificar si la cadena contiene caracteres UTF8 y luego decidir si realizar la conversión o no.
Existe tal función (no verifiqué si funciona correctamente):
Code: Select all
hb_StrIsUTF8( <cString> ) ➜ .T|.F.
check if a string contains UTF8 characters(?).