Duda con cargar los datos de un Grid a PDF con hpdf

Aquí puedes preguntar o compartir tus dudas y conocimientos acerca del programa
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.

Imagen

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.
Olá amigo veja se entende esse exemplo

Exemplo.apz
HIDE: ON
Hidebb Message Hidden Description


Ou teste isso
-- HPDF_PAGE_SIZE_A4          210 x 297 (mm)        595.276 x 841.89

require "hpdf"

local pdf = hpdf.New()
if pdf then
  local page = hpdf.AddPage(pdf)
  hpdf.Page_SetSize(page, HPDF_PAGE_SIZE_A4, HPDF_PAGE_PORTRAIT)
  local height = hpdf.Page_GetHeight(page)
  local width = hpdf.Page_GetWidth(page)
 
  --Dialog.Message("debug", "Page = " .. width .. "×" .. height);
  
  --Identificação
  local font = hpdf.GetFont(pdf, "Helvetica", "CP1252")
  hpdf.Page_SetFontAndSize(page, font, 12)
  
  
  hpdf.Page_BeginText(page);
  
  --ementa
  local ementa = "Esse é um texto muito específico e longo. Sua função é testar a funcionalidade de colocação de um texto justificado dentro de um determindo espaço de página. Vamos ver se funciona. Parece bom!";
  hpdf.Page_TextRect(page, 0, 792, 200, 200, ementa, "HPDF_TALIGN_JUSTIFY");
  
  hpdf.SaveToFile(pdf, _TempFolder .. "\\hello.pdf")
  hpdf.Free(pdf)
  Shell.Execute(_TempFolder .. "\\hello.pdf", "open");
else
  io.write("Error creating PDF object\n")
end
Muchas gracias voy a revisarlo y luego te cuento que tal resulto
Tienes algún ejemplo en el que hpdf cargue directamente lo que esta en un grid sin hacer referencia a ninguna base de datos.
Agotaras123 escribió:
31 Oct 2018 03:43
Tienes algún ejemplo en el que hpdf cargue directamente lo que esta en un grid sin hacer referencia a ninguna base de datos.
Sim amigo tenho

Exemplo
HIDE: ON
Hidebb Message Hidden Description




ou substitua por esse código
------------------------------------<< Tienes algún ejemplo en el que hpdf cargue directamente lo que esta en un grid sin hacer referencia a ninguna base de datos. >> ---------------

hpdf.Page_BeginText(PDF_NOMEPAGINA);
hpdf.Page_TextOut(PDF_NOMEPAGINA, 45,LINHA2, Grid.GetCellText("Grid1", nRow, 0)); --tInfo_Selected.Data[nRow]["ID"]);
hpdf.Page_TextOut(PDF_NOMEPAGINA, 110,LINHA2, Grid.GetCellText("Grid1", nRow, 1));
hpdf.Page_TextOut(PDF_NOMEPAGINA, 270,LINHA2, Grid.GetCellText("Grid1", nRow, 2));
hpdf.Page_TextOut(PDF_NOMEPAGINA, 340,LINHA2, Grid.GetCellText("Grid1", nRow, 3));
hpdf.Page_TextOut(PDF_NOMEPAGINA, 430,LINHA2, Grid.GetCellText("Grid1", nRow, 4));
HIDE: ON
Hidebb Message Hidden Description
tnks bro
:pc: El gran Dipro dándole cátedra a un administrador
Resuelto muchas gracias Dripo por tu ayuda.
gracias
:pc: . . .
OBRIGADAO
perfecto
muy buena info
gooooooooooooooooooooooood :pc: :pc:
thanks for share
Gracias
Links Caídos