Graphics.DrawString

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.