Utilizando Graphics.DrawString
Buenos dias, espero puedan ayudarme, estoy imprimiendo datos en formularios preimpresos donde tengo que ubicar los textos por coordenas xy por lo cual estoy utilizando Graphics.DrawString
El problema se me plantea con los caracteres acentuados que el los formularios los usuarios los ven correctamente, pero al imprimirlos que los cambia por caracteres basura.
Alguien sabe como puedo solucionar este problema?
Muchas gracias
¿ Que plataforma ? Windows, Mac, Linux ?
Posta el codigo, por favor.
Hola Michel, estoy probando en windows. Pero hoy baje la version xojo 2016 r4.1 y estoy peor porque me pixela y hace mas grande la tipografia cuando todo lo compilado con r3 andaba bien.
Dim g As Graphics
dim i as Integer
Dim p as PrinterSetup
p=New PrinterSetup
p.Landscape=False
g=OpenPrinter(p)
xTexto="Ests ac"
g.Bold=false
g.TextSize=10
g.TextFont="Arial"
'equivalente mm a pulgadas
'x=mm*2.94
x=x*2.94
y=y*2.94
g.DrawString(xTexto ,x, y,578,false)
Volvi a la version r3 levantando el proyecto y el tema de la tipografia reventada se soluciono. No asi los caracteres con acento
Si ayuda en algo lo que vi es que si del formulario pongo la palabra con acento la imprime correctamente. Pero en mi caso el formulario es cargado con datos que tomo de una base de datos postgresql. Lo que tomo de la base en los text y paso a imprimir los cambia por basura.
Tienes que hacer DefineEncoding con el texto que viene de la base de datos.
http://documentation.xojo.com/index.php/Defineencoding
Si la base de datos fue creada con realbasic, los caracteres acentuados sern buenos.
Michel, encontre donde se genera el problema pero estoy muy lejos de saber la solucion.
levanto los registros de la base de datos en un recordset y si de ahi lo paso a un text o label esta todo bien.
Pero los datos por primera vez lo uso , lo estoy pasando a una estructura. y con los datos de la estructura armo la impresion. Verifique y es en la estructura donde se rompen los caracteres.
Abajo te paso el codigo donde copio los datos de la base a una estructura. Si miro los campos de la estructura los datos acentuados pone caracteres basura.
Dim db as PostgreSQLDatabase
dim xCondi as String
dim xCadena as String
db=New PostgreSQLDatabase
mdlGeneral.AsignoValoresBase(db)
If db.connect then
'PARTE E -Datos deudor
xcadena=“SELECT Id_persona, Apellido_RazonSocial, tipo_dni, Nro_dni, Nro_Cuit, to_char(fecha_nac::timestamp with time zone, ‘dd/mm/yyyy’::text) AS fecha_nac, calle_domfiscal, " + _
" nro_domfiscal, piso_domfiscal, departamento_domfiscal,Localidad_dompfiscal, depto_dompfiscal, codpostal_domfiscal, provincia_domfiscal, calle_dompostal, nro_dompostal, piso_dompostal, " + _
" departamento_dompostal, Localidad_dompostal, codpostal_dompostal, provincia_dompostal, estado_civil, nro_nupcia, personeria_otorgada, inscripcion_personeria, to_char(fecha_inscripcion::timestamp with time zone, ‘dd/mm/yyyy’::text) AS fecha_inscripcion, " + _
" Conyuge_Apellido_Nombre, Conyuge_tipo_dni, Conyuge_Nro_dni , to_char(porcentajetitulas::numeric,‘99990D00’) as porcentajetitulas, telefono, mail, depto_dompostal, lugar_nacimiento, profesion FROM Personas " + _
" left join detalle_tramites on personas.id_persona=detalle_tramites.id_titular where nro_tramite =” + str(xIdTramiteImpresion)
Dim rs as RecordSet = db.SQLSelect(xcadena)
if(db.Error) then
msgbox( "Error when running SQLExecute. Code: " + str(db.ErrorCode) + " " + db.ErrorMessage)
Break
exit sub
end if
if not rs.EOF then
if not isnull(rs.Field("porcentajetitulas").StringValue) then xPersonaD.Porcentaje=rs.Field("porcentajetitulas").StringValue.Trim
if not isnull(rs.Field("Apellido_RazonSocial").StringValue) then xPersonaD.ApeNom=rs.Field("Apellido_RazonSocial").StringValue.Trim
if not isnull(rs.Field("calle_domfiscal").StringValue) then xPersonaD.Calle=rs.Field("calle_domfiscal").StringValue
if not isnull(rs.Field("nro_domfiscal").StringValue) then xPersonaD.Num=rs.Field("nro_domfiscal").StringValue
if not isnull(rs.Field("piso_domfiscal").StringValue) then xPersonaD.Piso=rs.Field("piso_domfiscal").StringValue
if not isnull(rs.Field("departamento_domfiscal").StringValue) then xPersonaD.Dep=rs.Field("departamento_domfiscal").StringValue
if not isnull(rs.Field("codpostal_domfiscal").StringValue) then xPersonaD.CodPostal=rs.Field("codpostal_domfiscal").StringValue
if not isnull(rs.Field("Localidad_dompfiscal").StringValue) then xPersonaD.Localidad=rs.Field("Localidad_dompfiscal").StringValue
if not isnull(rs.Field("depto_dompfiscal").StringValue) then xPersonaD.Departamento=rs.Field("depto_dompfiscal").StringValue
if not isnull(rs.Field("provincia_domfiscal").StringValue) then xPersonaD.Provincia=rs.Field("provincia_domfiscal").StringValue
if not isnull(rs.Field("calle_dompostal").StringValue) then xPersonaD.CalleReal=rs.Field("calle_dompostal").StringValue
if not isnull(rs.Field("nro_dompostal").StringValue) then xPersonaD.NumReal=rs.Field("nro_dompostal").StringValue
if not isnull(rs.Field("piso_dompostal").StringValue) then xPersonaD.PisoReal=rs.Field("piso_dompostal").StringValue
if not isnull(rs.Field("departamento_dompostal").StringValue) then xPersonaD.DepReal=rs.Field("departamento_dompostal").StringValue
if not isnull(rs.Field("codpostal_dompostal").StringValue) then xPersonaD.CodPostalReal=rs.Field("codpostal_dompostal").StringValue
if not isnull(rs.Field("Localidad_dompostal").StringValue) then xPersonaD.LocalidadReal=rs.Field("Localidad_dompostal").StringValue
if not isnull(rs.Field("depto_dompostal").StringValue) then xPersonaD.DepartamentoReal=rs.Field("depto_dompostal").StringValue
if not isnull(rs.Field("provincia_dompostal").StringValue) then xPersonaD.ProvinciaReal=rs.Field("provincia_dompostal").StringValue
if not isnull(rs.Field("lugar_nacimiento").StringValue) then xPersonaD.LugarNacimiento=rs.Field("lugar_nacimiento").StringValue
if not isnull(rs.Field("profesion").StringValue) then xPersonaD.Profesion=rs.Field("profesion").StringValue
if not isnull(rs.Field("tipo_dni").StringValue) then
xPersonaD.Dni = rs.Field("tipo_dni").Value
End If
if not isnull(rs.Field("Nro_Cuit").StringValue) then xPersonaD.Cuit=rs.Field("Nro_Cuit").StringValue
if not isnull(rs.Field("Nro_dni").StringValue) then xPersonaD.NroDni = rs.Field("Nro_dni").Value
if not isnull(rs.Field("fecha_nac").StringValue) then xPersonaD.FechaNac=rs.Field("fecha_nac").StringValue
if not isnull(rs.Field("estado_civil").StringValue) then xPersonaD.EstadoCivil=rs.Field("estado_civil").Value
if not isnull(rs.Field("nro_nupcia").StringValue) then xPersonaD.Nupcias=rs.Field("nro_nupcia").Value
if not isnull(rs.Field("Conyuge_Apellido_Nombre").StringValue) then xPersonaD.ApenomConyuge=rs.Field("Conyuge_Apellido_Nombre").Value
if not isnull(rs.Field("personeria_otorgada").StringValue) then xPersonaD.Personeria=rs.Field("personeria_otorgada").Value
if not isnull(rs.Field("inscripcion_personeria").StringValue) then xPersonaD.DatosPersoneria=rs.Field("inscripcion_personeria").Value
if not isnull(rs.Field("fecha_inscripcion").StringValue) then xPersonaD.FechaPersoneria=rs.Field("fecha_inscripcion").Value
if not isnull(rs.Field("telefono").StringValue) then xPersonaD.Telefono=rs.Field("telefono").Value
if not isnull(rs.Field("mail").StringValue) then xPersonaD.Mail=rs.Field("mail").Value
lblD.Text=""
MostrarDatosPersona( lblD,rs.Field("id_persona").Value)
end if
rs.Close
ahi encontre que utilizando Defineencoding tomando el dato de la estructura y mandando a imprimir anda bien. El problema es que tengo miles de lineas de codigo y no se porque me quedo ese problema es las estructuras. Hay alguna forma de definirle a la estructura de codificacion va a utilizar asi los guarda bien
Se puede poner DefineEncoding en el Paint Evento.