Page 1 of 2

IMPRESION ARCHIVOS PDF

PostPosted: Mon Oct 02, 2023 3:41 pm
by pedroluis
Buenos dias señores !

Otro problemita que se que ustedes trendrán la solución.

Tengo FWH 22.12

El tema es que quiero generar en PDF todas las facturas de un cliente (1600 facturas) y
las empieza a generar bien, pero cuando alcanza el núumero de factura 300 ó 400 las
siguientes las genera con pdf's vacíos.
Se me ocurrió pensar que es un problema de memoria o un uso excesivo de archivos temporales.
Es como si la memoria se quedara sin lugar y no quisiera generar más archivos.
Como si se ahogara...

Ya que estamos otra pregunta:
¿ Hay forma de regular el tamaño en bites de los pdf's generados ?,
porque a veces me los genera de distinto tamaño.

Las paso el código.

sele 99 // Archivo con todas las facturas a imprimir.
go top
xsay:="Socio: "+strzero(99->cliente,4)+" - Fac.: "+xlet+"-"+str(xemi,1)+"-"+strzero(99->numero,6)
DEFINE DIALOG oIndex TITLE "Generado Facturas en PDF" FROM 1,1 TO 3,40
@0,2 SAY oText PROMPT xsay OF oIndex COLOR CLR_HBLUE Font m->oFontFis
ACTIVATE DIALOG oIndex NOWAIT CENTER
do while !eof()
xnum:=99->numero
VTA1100PE() // Genera los pdf
sele 99
skip
xsay:="Socio: "+strzero(99->cliente,4)+" - Fac.: "+xlet+"-"+str(xemi,1)+"-"+strzero(99->numero,6)
oText:refresh()
sysrefresh()
enddo
sele 1
oIndex:End()
oDlg:End()
sysrefresh()
xtim2:=time()
msgwait(ELAPTIME(xtim1,xtim2),"Tiempo Transcurrido",4)

*-------------------
FUNCTION VTA1100PE()
*-------------------
xnum:=99->numero
cPdfFile := m->xpath+"\PDF\"+strzero(99->cliente,4)+".pdf"
PRINTER oprn FILE cPdfFile

// Acá imprime la factura.

return nil

Como siempre gracias por su atención y deferencia !
Pedro Lavallén - Argentina - San Luis

Re: IMPRESION ARCHIVOS PDF

PostPosted: Mon Oct 02, 2023 4:03 pm
by karinha

Re: IMPRESION ARCHIVOS PDF

PostPosted: Mon Oct 02, 2023 6:03 pm
by pedroluis
Hola Karinha !
Gracias por tu respuesta, pero no es ese el problema. Voy a resumir

Estos pdf que genero son facturas de servicios, es decir con cuadros distintos tañaños
del letras, códigos de barras y código QR.

El programa genera correctamente los pdfs, pero cuando
quiero imprimir 1600 archivos.
los primeros 500 los imprime correctamente, pero a partir del 501 al 1600 empieza a generarlos mal.

Por ejemplo los primeros 500 (que genera bien) tienen un peso de 295 KB cada uno,
y los siguiente, es decir del 501 al 1600 los genera mal y tienen un peso de 2 KB cada uno.
... Parecería como que agotara la memoria...

La segunda pregunta era:
¿ Hay alguna manera de disminuir el peso (en KB) de cada PDF en el momento de generarlo ?
Es decir que el que me sale ahora de 295 KB ¿ los pueda bajar a 41 KB ?

Saludos !

Re: IMPRESION ARCHIVOS PDF

PostPosted: Mon Oct 02, 2023 6:17 pm
by karinha
Hola Pedro, debes admitir que la cantidad de PDF que has impreso es muy grande y desbordará la pila. ¿Qué tal limitar la generación por intervalos? 001 a 500 y de 501 a 1000 y de 1001 a 1500? crear un diálogo donde el usuario informa la cantidad de PDFS a generar. Y internamente si excede la cantidad permitida, lo avisas y lo bloqueas.

Solo una ideia.

Regards, saludos.

Re: IMPRESION ARCHIVOS PDF

PostPosted: Tue Oct 03, 2023 1:18 pm
by pedroluis
Hola Karinha !
Gracias por tus comentarios !

y si, terminé haciendolo como vos decís, impriendo de a rangos.
De esa manera pude generarlos todos.
Gracias !

Pero me queda la otra pregunta:
Como reducir el tamaño (MBites) de los pdfs generados.
Por ejemplo: probé hacer lo mismo con el fwh2212 y con el fwh1709,
con las 2 versiones funciona, pero los pdfs que genera cada versión
tienen la mitad de MB de los pdf generados.

Re: IMPRESION ARCHIVOS PDF

PostPosted: Tue Oct 03, 2023 3:50 pm
by karinha
Hola Pedro, la segunda pregunta, sólo el Maestro Nages puede decir si es posible. Envíale un correo electrónico con tus preguntas, ¿sí?


Regards, saludos.

Re: IMPRESION ARCHIVOS PDF

PostPosted: Tue Oct 03, 2023 4:26 pm
by leandro
Pedro como vas?

Te molesto con algo? :oops: será que nos puedes mostrar como imprimes un pdf ya generado, directo desde fw?, ya que intente de la forma que mostraste, pero no hace nada. No se si haga falta una parte del código o si usas una herramienta adicional para hacer la impresión del pdf.

De antemano gracias

Code: Select all  Expand view

*-------------------
FUNCTION VTA1100PE()
*-------------------
xnum:=99->numero
cPdfFile := m->xpath+"\PDF\"+strzero(99->cliente,4)+".pdf"
PRINTER oprn FILE cPdfFile //*******ESTA LINEA FUE LA QUE USAMOS******

// Acá imprime la factura.

return nil

Re: IMPRESION ARCHIVOS PDF

PostPosted: Tue Oct 03, 2023 5:11 pm
by karinha
Buenas tardes Pedro, un excelente generador de PDF es la impresora VIRTUAL pdfMachine. Lo uso para imprimir pruebas (no necesito una impresora para probar los informes), pdfMachine es suficiente para mí.

Download para testes:

https://www.pdfmachine.com/pdfmachine/download/

É de pago, más simplesmente, EXCELENTE!!

Otra dica:

https://forums.fivetechsupport.com/viewtopic.php?f=6&t=38472

Regards, saludos.

Re: IMPRESION ARCHIVOS PDF

PostPosted: Tue Oct 03, 2023 5:22 pm
by karinha
Puedes usar HARUPDF.lib mira como és simples:

http://www.pctoledo.com.br/forum/viewtopic.php?f=4&t=25918

Code: Select all  Expand view

#include "FiveWin.ch"
#include "harupdf.ch"

FUNCTION Main()

   LOCAL oPdf, Page, oImage, oFont, Font1, Font2, Font3

   oPdf := HPDF_New()

   HPDF_SetCompressionMode( oPdf, HPDF_COMP_ALL )

   //*HPDF_SetPassword( oPdf, 'jaime', 'alberto' )

   page := HPDF_AddPage( oPdf )

   HPDF_Page_SetSize( page, 3, 0 ) //** 3 = A4

   //**oImage:=HPDF_LoadJpegImageFromFile (oPdf,'png\Qr_demo.jpg')
   //**HPDF_Page_DrawImage(page, oImage, 100, 700, 100, 100)

   //HPDF_Page_SetRGBFill(page, 0.80, 0.80, 0.80) //** Para rellenar
   HPDF_Page_SetLineWidth( page, 0.5 ) // ** Grosor
   HPDF_Page_SetRGBStroke( page, 0.2, 0.6, 1.0 ) // ** Color
   HPDF_Page_Rectangle( page, 20, 760, 560, 70 )
   HPDF_Page_Stroke ( page ) //** Muestra el cuadro

   HPDF_Page_BeginText ( page )

   Font1 := HPDF_LoadTTFontFromFile( oPdf, 'C:\Windows\Fonts\Verdana.ttf', HPDF_TRUE )
   Font2 := HPDF_LoadTTFontFromFile( oPdf, 'C:\Windows\Fonts\Lucon.ttf', HPDF_TRUE )

   oFont := HPDF_GetFont( oPdf, Font1, "WinAnsiEncoding" )

   HPDF_Page_SetFontAndSize( page, oFont, 12 )
   HPDF_Page_TextOut( page, 100, 640, "Jaime Coronado 1" )

   oFont := HPDF_GetFont( oPdf, Font2, "WinAnsiEncoding" )

   HPDF_Page_SetFontAndSize( page, oFont, 9 )
   HPDF_Page_TextOut( page, 100, 700, "Jaime Coronado 2" )
   HPDF_Page_TextOut( page, 100, 670, "Programador" )
   HPDF_Page_EndText( page )

   HPDF_SaveToFile( oPdf, 'Prueba.pdf' )

   HPDF_Free( oPdf )

RETURN( nil )
 


Regards, saludos.

Re: IMPRESION ARCHIVOS PDF

PostPosted: Wed Oct 04, 2023 3:07 pm
by pedroluis
Hola Leandro !

Si exactamente use el código como vos lo ponés.

cPdfFile := m->xpath+"\PDF\"+strzero(99->cliente,4)+".pdf"
PRINT oprn FILE cPdfFile

Saludos !

Re: IMPRESION ARCHIVOS PDF

PostPosted: Mon Oct 09, 2023 2:06 am
by nageswaragunupudi
Yes, using HaruPDF reduces the size of PDF.
For using HaruPDF , you do not need to change any code or write any extra-code.
Please do NOT do that.

Only two changes you need to make:
Code: Select all  Expand view
#inclucde "fivewin.ch"

REQUEST FWHARU  // add this here

function Main()

   TPrinter():lUseHaruPDF := .t.


All PDFs will now be created using HaruPDF.
Do not make any other changes or add any new code in your software.
Keep your present function:
Code: Select all  Expand view
*-------------------
FUNCTION VTA1100PE()
*-------------------
xnum:=99->numero
cPdfFile := m->xpath+"\PDF\"+strzero(99->cliente,4)+".pdf"
PRINTER oprn FILE cPdfFile

// Acá imprime la factura.

return nil

as it is without any changes.

Re: IMPRESION ARCHIVOS PDF

PostPosted: Mon Oct 09, 2023 12:21 pm
by karinha

Re: IMPRESION ARCHIVOS PDF

PostPosted: Tue Oct 10, 2023 1:13 pm
by acuellar
Thanks Mr. Rao

nageswaragunupudi wrote:Yes, using HaruPDF reduces the size of PDF.
For using HaruPDF , you do not need to change any code or write any extra-code.
Please do NOT do that.

Only two changes you need to make:
Code: Select all  Expand view
#inclucde "fivewin.ch"

REQUEST FWHARU  // add this here

function Main()

   TPrinter():lUseHaruPDF := .t.


All PDFs will now be created using HaruPDF.
Do not make any other changes or add any new code in your software.
Keep your present function:
Code: Select all  Expand view
*-------------------
FUNCTION VTA1100PE()
*-------------------
xnum:=99->numero
cPdfFile := m->xpath+"\PDF\"+strzero(99->cliente,4)+".pdf"
PRINTER oprn FILE cPdfFile

// Acá imprime la factura.

return nil

as it is without any changes.


Con Haru es mas rápido y mas pequeño, pero los FONTs se distorcionan.
Utilizo LUCIDA CONSOLE para el detalle con cantidades, en la vista previa muestra correcto y en el PDF movido.
He intentado con COURIER NEW muestra bien en el PDF pero es muy claro.
Quizas haya otro FONT que se pueda usar

With Haru it is faster and smaller, but the FONTs are distorted.
I use Lucida Console for the detail with quantities, in the preview it shows correct and in the PDF it moved.
I have tried COURIER NEW it shows fine in the PDF but it is very clear.
Maybe there is another FONT that can be used.

Thanks for the help

Re: IMPRESION ARCHIVOS PDF

PostPosted: Tue Oct 10, 2023 1:17 pm
by karinha
Adhemar, COURIER NEW BOLD es la mejor manera de ahorrar (gastar menos) tinta/tóner de impresora.

Regards, saludos.

Re: IMPRESION ARCHIVOS PDF

PostPosted: Tue Oct 10, 2023 1:54 pm
by acuellar
Muchas Gracias Estimado Joao

Y no hay otro?