Duda con cargar los datos de un Grid a PDF con hpdf
Publicado: 31 Oct 2018 00:40
Bueno mi duda es la siguiente estoy intentando cargar los datos cargados en un grid a un pdf con la librerira de hpdf pero al momento de cargarlos no logro hacer que me los ordene por lineas si no que los monta todos unos encima de otros, muestro a continuacion como los coloca.

mi codigo es el siguiente:
lo intente cargar directamente desde la base de datos pero el problema que uso MySQL y no me carga los datos tampoco solo me muestra un registro..
espero alguien me pueda ayudar al respecto ya pegue con esto y no se como solucionarlo. Muchas gracias de antemano.

mi codigo es el siguiente:
require "hpdf"
require "common"
--###############################################################################
--###############################################################################
-- TODAS LOS VALORES DE LINEAS SE PUEDEN AUTOMATIZAR A PARTIR DE LAS INTRUCCIONES
--anchodepagina = hpdf.Page_GetWidth (nombre de la pagina);-- OBTIENE EL VALOR DEL ANCHO DE PAGINA EN PIXELS
--largodepagina = hpdf.Page_GetHeight (nombre de la pagina);-- OBTIENE EL VALOR DEL LARGO DE PAGINA EN PIXELS
--#################################################################################
--#################################################################################
function S_Logotipo (SPage)--** PONEMOS UN LOGOTIPO
image = hpdf.LoadPngImageFromFile(Factura_pdf, "AutoPlay\\Images\\logo\\logo.png");--** NOMBRE DE LA IMAGEN
local iw = hpdf.Image_GetWidth(image); --** POR SI QUEREMOS AJUSTAR LA IMAGEN A SU VALOR ORIGINAL (ANCHO)
local ih = hpdf.Image_GetHeight(image);--** POR SI QUEREMOS AJUSTAR LA IMAGEN A SU VALOR ORIGINAL (ALTO)
hpdf.Page_DrawImage(SPage, image, 40, 730, 90, 80);--** (NOMBRE DE LA PAGINA, IMAGEN, X-INICIO DE COLUMNA, Y-INICIO DE LINEA
--** ANCHO QUE DAMOS A LA IMAGEN, ALTO QUE DAMOS A LA IMAGEN )
end -- FUNCION PONER LOGOTIPO
function S_Recuadros_Clientes(SPage)-- ** IMPRIMIMOS UN RECTANGULO PARA EL SOBRE CON VENTANILLA
hpdf.Page_SetLineWidth(SPage, 0.2); -- GROSOR DE LA LINEA DE LOS RECTANGULOS
hpdf.Page_Rectangle(SPage, 310, 605, 230, 70); --** (NOMBRE DE LA PAGINA, ORIGEN IZQUIERDA, ORIGEN ABAJO, ANCHO, ALTO)
hpdf.Page_Stroke(SPage); --** DIBUJJAMOS EL RECTANGULO PARA PODER USAR UN GROSOR DE LINEA DISTINTO
-- MAS ADELANTE
--***********************************************************************************************************************
end -- FUNCION RECUADRO CLIENTE
function sCABECERA(sPAGINA,sLINEA)--** AÑADIMOS LOS ENCABEZADOS DE LAS COLUMNAS
hpdf.Page_BeginText(sPAGINA);--** INICIAMOS UNA NUEVA INSTANCIA DE TEXTO (NOMBRE DE LA PAGINA)
font5=hpdf.GetFont(Factura_pdf, "Times-Bold","WinAnsiEncoding");--** DEFINIMOS LA FUENTE Y LA CODIFICACION
hpdf.Page_SetFontAndSize(sPAGINA, font5, 9);--** ASIGNAMOS FUENTE Y TAMAÑO A LA PAGINA
hpdf.Page_TextOut(sPAGINA, 45,sLINEA,"GUIA"); --** PUEDEN VENIR DE LOS NOMBRES REALES DE LAS COLUNMAS
hpdf.Page_TextOut(sPAGINA, 130,sLINEA,"DESCRIPCION");
hpdf.Page_TextOut(sPAGINA, 300,sLINEA,"PIEZAS");
hpdf.Page_TextOut(sPAGINA, 400,sLINEA,"LIBRAS");
hpdf.Page_TextOut(sPAGINA, 500,sLINEA,"TOTAL");
--hpdf.Page_TextOut(sPAGINA, 450,sLINEA,"PRECIO");
hpdf.Page_EndText(sPAGINA)--** FINALIZAMOS LA INSTANCIA DE TEXTO (NOMBRE DE LA PAGINA)
end --** function sCABECERA(sPAGINA,sLINEA)
function s_NOMBRE_LISTADO (sPAGINA) --** AÑADIMOS UN TITULO AL LISTADO
hpdf.Page_BeginText(S_NOMBREPAGINA);
font4=hpdf.GetFont(Factura_pdf, "Times-Bold","WinAnsiEncoding") ;--** DEFINIMOS LA FUENTE Y LA CODIFICACION
hpdf.Page_SetFontAndSize(S_NOMBREPAGINA, font4, 12);--** ASIGNAMOS FUENTE Y TAMAÑO A LA PAGINA
hpdf.Page_TextOut(S_NOMBREPAGINA, 400,800,"FACTURA DE CONTADO");--** ESTE TITULO PUEDE VENIR DE UNA VARIABLE ANTERIO
hpdf.Page_TextOut(S_NOMBREPAGINA, 400,790,Label.GetText("LblFAC")..Label.GetText("FacturaID"));--** ESTE TITULO PUEDE VENIR DE UNA VARIABLE ANTERIO
hpdf.Page_TextOut(S_NOMBREPAGINA, 140,780,"CLIENTE");--** ESTE TITULO PUEDE VENIR DE UNA VARIABLE ANTERIO
hpdf.Page_TextOut(S_NOMBREPAGINA, 200,780,ComboBox.GetText("ComboCliente"));--** ESTE TITULO PUEDE VENIR DE UNA VARIABLE ANTERIO
hpdf.Page_TextOut(S_NOMBREPAGINA, 140,770,"RTN");--** ESTE TITULO PUEDE VENIR DE UNA VARIABLE ANTERIO
hpdf.Page_TextOut(S_NOMBREPAGINA, 180,770,Input.GetText("InpRTN"));--** ESTE TITULO PUEDE VENIR DE UNA VARIABLE ANTERIO
hpdf.Page_EndText(S_NOMBREPAGINA);
end --** s_NOMBRE_LISTADO (sPAGINA)
function sPie (fPAGINA,fNUMERODEPAGINA,fTOTALPAGINAS)--** AÑADIMOS UN PIE LA LISTADO TIPO: PAGINA X DE NX
hpdf.Page_BeginText(fPAGINA);
font3=hpdf.GetFont(Factura_pdf, "Courier","WinAnsiEncoding");--** DEFINIMOS LA FUENTE Y LA CODIFICACION
hpdf.Page_SetFontAndSize(fPAGINA, font3, 7);--** ASIGNAMOS FUENTE Y TAMAÑO A LA PAGINA
hpdf.Page_TextOut(fPAGINA, 465,70,"Sub Total: "..Input.GetText("InpSubTotal"));
hpdf.Page_TextOut(fPAGINA, 465,60,"Impuesto: "..Input.GetText("InpImpuesto"));
hpdf.Page_TextOut(fPAGINA, 465,50,"Total: "..Input.GetText("InpTotal"));
hpdf.Page_TextOut(fPAGINA, 435,35,"Pagina "..fNUMERODEPAGINA.." de "..fTOTALPAGINAS);
hpdf.Page_EndText(fPAGINA)
end --** function sPie (fPAGINA,fNUMERODEPAGINA,fTOTALPAGINAS)
function sESPERA ()--** AÑADIMOS UNA VENTANA DE ESPERA EN CASO QUE EL LISTADO TARDE EN GENERARSE
--** EN CASO DE QUE SE GENERE RAPIDAMENTE, DEPENDIENDO DEL PC, NI LO VEREMOS
StatusDlg.Show(); --** MUESTRA LA VENTANA DE ESPERA
StatusDlg.SetTitle("GENERANDO PAGINAS "); --*PONEMOS EL TITULO EN LA VENTANA DE ESPERA
StatusDlg.SetMeterRange(1, S_NUMEROS_DE_PAGINAS);--** PONEMOS EL RANGO DEL MEDIDOR , DE 1 AL NUMERO DE PAGINAS QUE SE CREARAN
StatusDlg.SetMeterPos(S_CONTADOR); --** AJUSTAMOS LA POSICION DE LA BARRA SEGUN LA PAGINA CREADA
StatusDlg.SetStatusText("PAGINA. . . " .. S_CONTADOR.." DE "..S_NUMEROS_DE_PAGINAS ); --** MOSTRAMOS INFORMACION SEGUN SE CREAN LAS PAGINAS
end
--##########################################################
--** INICIAMOS LA GENERACION DEL DOCUMENTO
Factura_pdf = hpdf.New()--** DEFINIMOS UNA NUEVA INSTANCIA DE DOCUMENTO
if Factura_pdf then --** SI EL DOCUMENTO HA SIDO CREADO CORRECTAMENTE
--Opendb() --** ABRIMOS NUESTRA BASE DE DATOS, VER "FUNCIONES GLOBALES"
--sql = "SELECT * From anton.wharehouse"; --** DEFINIMOS UNA CONSULTA EN LA BASE DE DATOS
--tbResults = MySQLConnection:execute("SELECT * From anton.facturas2")--** ASIGNAMOS A UNA TABLA Y GENERAMOS LA CONSULTA
--local id,cliente,rtn,vendedor,fecha,hora,tipodefactura,numero,usuario,guia,descripcion,piezas,librascobrables,total,subtotal,impuesto,totalapagar,recibo,saldo = tbResults:fetch();
-- local id,cliente,rtn,vendedor,fecha,hora,tipodefactura,numero,usuario,guia,descripcion,piezas,librascobrables,total,subtotal,impuesto,totalapagar,recibo,saldo = tbResults:fetch();
-- for i = 1, tbResults:fetch() do
-- id,cliente,rtn,vendedor,fecha,hora,tipodefactura,numero,usuario,guia,descripcion,piezas,librascobrables,total,subtotal,impuesto,totalapagar,recibo,saldo = tbResults:fetch();
-- end
local nRowsCount = Grid.GetRowCount("Grid1")-1;
s_LINEAS_POR_PAGINA = 59 ; --** NUMERO DE LINEAS QUE PONDREMOS EN CADA PAGINA
S_NUMEROS_DE_PAGINAS = nRowsCount/s_LINEAS_POR_PAGINA; --** DIVIDIMOS EL NUMERO DE REGISTROS ENTRE LAS LINEAS POR PAGINA----------tbResults:numrows()/s_LINEAS_POR_PAGINA
S_NUMEROS_DE_PAGINAS =Math.Floor (S_NUMEROS_DE_PAGINAS );--** OBTENEMOS EL NUMERO POR BAJO DEL NUMERO DE PAGINAS
S_NUMEROS_DE_PAGINAS = S_NUMEROS_DE_PAGINAS + 1; --** AÑADIMOS UNA PAGINA MAS POR LOS DECIMALES
S_LINEAS_ADICIONALES = S_NUMEROS_DE_PAGINAS * 8; -- ** 8 SON LAS LINEAS QUE OCUPA NUESTRO LOGOTIPO, SE PUEDE AUTOMATIZAR
S_PAGINAS_ADICIONALES = S_LINEAS_ADICIONALES / 59; --** CALCULAMOS LAS PAGINAS ADICIONALES POR EL LOGO
S_PAGINAS_ADICIONALES = Math.Floor (S_PAGINAS_ADICIONALES )+ 1;
S_NUMEROS_DE_PAGINAS = S_NUMEROS_DE_PAGINAS + S_PAGINAS_ADICIONALES ; --** OBTENEMOS EL NUMERO DE PAGINAS TOTALES CON EL LOGO
--Dialog.Message("paginas",tostring(S_NUMEROS_DE_PAGINAS)) --## LINEA DE CONTROL
S_CONTADOR = 0; --** DEFINIMOS CONTADORES PARA EL BUCLE while ... do
S_CONTADOR2 = 1;
nRow =0 ;
sLinea = 690 ; --** ASIGNAMOS LA LINEA PARA LOS ENCABEZADOS DE LAS COLUMNAS
sLinea2 = 675 ; --** ASIGNAMOS LA LINEA PARA EL PRIMER REGISTRO EN LA PRIMERA PAGINA
while S_CONTADOR < S_NUMEROS_DE_PAGINAS do --** EJECUTAMOS UN BUCLE MIENTRAS NO ALCANZEMOS LA ULTIMA PAGINA
font=hpdf.GetFont(Factura_pdf, "Helvetica","WinAnsiEncoding"); --** DEFINIMOS LA FUENTE Y LA CODIFICACION PARA LAS PAGINAS EN GENERAL
S_CONTADOR = S_CONTADOR + 1 --** INICIALIZAMOS EL PRIMER CONTADOR
sESPERA ()--** EJECUTAMOS UNA ESPERA POR SI TARDA EN EJECUTARSE EL LISTADO, ESTA ESPERA SE REFIERE A LA GENERACION DEL DOCUMENTO
--** NO AL TIEMPO QUE TARDARA EN ABRIRSE EL VISOR DE PDF
S_NOMBREPAGINA = "page"..S_CONTADOR; --** ASIGNAMOS LOS NOMBRES A LAS PAGINAS (page1, page2,,,,,,,pageN
S_NOMBREPAGINA = hpdf.AddPage(Factura_pdf);--** AÑADIMOS UNA PAGINA AL DOCUMENTO
hpdf.Page_SetWidth (S_NOMBREPAGINA,595.276);--** DEFINIMOS ANCHO DE LA PAGINA EN PIXELS, PARECE OBLIGATORIO AL AÑADIR PAGINA
hpdf.Page_SetHeight (S_NOMBREPAGINA,841.89);--** DEFINIMOS LARGO DE LA PAGINA EN PIXELS, PARECE OBLIGATORIO AL AÑADIR PAGINA
hpdf.Page_SetFontAndSize(S_NOMBREPAGINA, font, 10);--** ASIGNAMOS FUENTE Y TAMAÑO A LA PAGINA, PARECE OBLIGATORIO AL AÑADIR PAGINA
s_NOMBRE_LISTADO (S_NOMBREPAGINA) ;--** PONEMOS EL NOMBRE DEL LISTADO EN CADA PAGINA
S_Logotipo (S_NOMBREPAGINA); --** PONEMOS EL LOGOTIPO EN CADA PAGINA
sCABECERA(S_NOMBREPAGINA,sLinea); --** PONEMOS LOS NOMBRES DE LAS COLUMNAS EN CADA PAGINA
sPie (S_NOMBREPAGINA,S_CONTADOR,S_NUMEROS_DE_PAGINAS); --** PONEMOS EL PIE DE PAGINA EN CADA PAGINA
--##############################################################################################
--tbResults = MySQLConnection:execute("SELECT * From anton.facturas2")--** ASIGNAMOS A UNA TABLA Y GENERAMOS LA CONSULTA
--local id,cliente,rtn,vendedor,fecha,hora,tipodefactura,numero,usuario,guia,descripcion,piezas,librascobrables,total,subtotal,impuesto,totalapagar,recibo,saldo = tbResults:fetch();
for S_CONTADOR2 = 1, nRowsCount do --** INICIAMOS EL BUCLE PARA PONER LOS DATOS EN CADA PAGINA
nRow = nRow + 1;
font2=hpdf.GetFont(Factura_pdf, "Courier","WinAnsiEncoding");--** DEFINIMOS LA FUENTE Y LA CODIFICACION
hpdf.Page_SetFontAndSize(S_NOMBREPAGINA, font2, 7); --** ASIGNAMOS FUENTE Y TAMAÑO A LA PAGINA
hpdf.Page_BeginText(S_NOMBREPAGINA);
--tbResults = MySQLConnection:execute("SELECT * From anton.facturas2")--** ASIGNAMOS A UNA TABLA Y GENERAMOS LA CONSULTA
--for i = 1, tbResults:numrows() do
--local id,cliente,rtn,vendedor,fecha,hora,tipodefactura,numero,usuario,guia,descripcion,piezas,librascobrables,total,subtotal,impuesto,totalapagar,recibo,saldo = tbResults:fetch();
--Dialog.Message("", guia.."-"..piezas.."/n")
--while sLinea2 == tbResults:numrows() do
local nRowsCount = Grid.GetRowCount("Grid1")-1;
if nRowsCount > 0 then
for count=1,nRowsCount do
Guia = tonumber(Grid.GetCellText("Grid1", count, 1))
Descripcion = Grid.GetCellText("Grid1",count,2)
Piezas = tonumber(Grid.GetCellText("Grid1",count,3))
LibrasCobrables = tonumber(Grid.GetCellText("Grid1",count,4))
Total = tonumber(Grid.GetCellText("Grid1",count,5))
count2 = (count+665)-10
hpdf.Page_TextOut(S_NOMBREPAGINA, 45, count2 , Guia);
hpdf.Page_TextOut(S_NOMBREPAGINA, 130,count2 , Descripcion);
hpdf.Page_TextOut(S_NOMBREPAGINA, 300,count2 , Piezas);
hpdf.Page_TextOut(S_NOMBREPAGINA, 400,count2 , LibrasCobrables);
hpdf.Page_TextOut(S_NOMBREPAGINA, 500,count2 , Total);
end
end
--hpdf.Page_TextOut(S_NOMBREPAGINA, 450,sLinea2,(tbResults.Data[nRow]['Price']));
--end
nRowsCount = nRowsCount - 12 ;
hpdf.Page_EndText(S_NOMBREPAGINA);
if nRow == nRowsCount or nRowsCount < 59 then --** SALIMOS DEL BUCLE for.... do EN CASO DE QUE SE CUMPLA
--** ALGUNA DE LAS CONDICIONES
--** QUE SE LLEGUE AL FINAL DE LA BASE DE DATOS
--** O QUE SE HAYA GENERADO UNA PAGINA COMPLETA
count = 675 --** REASIGNAMOS LA LINEA DEL PRIMER REGISTRO EN CADA PAGINA
break --** SALIMOS DEL BUCLE for.... do
end
end --** FIN DE For S_CONTADOR2 = 1, tbResults.Rows do
end --** FIN DE while S_CONTADOR < S_NUMEROS_DE_PAGINAS do
StatusDlg.Hide ( )--** OCULTAMOS LA VENTANA DE ESPERA
--######################################################################################
-- ** SALVAMOS EL DOCUMENTO A UN FICHERO Y LO ABRIMOS
local res = hpdf.SaveToFile(Factura_pdf, _TempFolder.."\\Linea.pdf");
hpdf.Free(Factura_pdf)
if (res == 0) then
File.Open(_TempFolder.."\\Linea.pdf", _TempFolder, SW_SHOWNORMAL);
else
Dialog.Message("Error", "Hay un documento abierto con el mismo nombre.".."\r\n".."Guarde y/o cierre el archivo para poder generar uno nuevo.", MB_OK, MB_ICONSTOP);
end
else --** if Factura_pdf then
Dialog.Message("Error", "Error al crear el documento PDF.", MB_OK, MB_ICONSTOP);--**--** SI EL DOCUMENTO NO HA SIDO CREADO CORRECTAMENTE
end -- CREACION DEL DOCUMENTO
--Closedb()--** CERRAMOS LA BASE DE DATOS, VER "FUNCIONES GLOBALES"
lo intente cargar directamente desde la base de datos pero el problema que uso MySQL y no me carga los datos tampoco solo me muestra un registro..
espero alguien me pueda ayudar al respecto ya pegue con esto y no se como solucionarlo. Muchas gracias de antemano.