FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Consulta Compresion del Export a PDF de xbrowse
Posts: 74
Joined: Mon Jun 10, 2013 01:21 PM
Consulta Compresion del Export a PDF de xbrowse
Posted: Mon Mar 09, 2026 12:50 AM

Estimado Colegas, En esta oportunidad me encuentro trabajando con la funcion oBrw:Report( '.\QR\PR'), .F., nil, nil, nil, "PDF" ) con la cual estoy exportando el contenido de una base de datos con alrededor de 30000 registros, queria consultarles si alguien ha trabajado con este tipo de export en cuanto a la compresion del PDF ya que el archivo termina con un tamaño de aproximadamente 80 Megas, el tema es que utilizando algunas herramientas externas logro realizar el mismo export pero el archivo PDF final queda de un tamaño mucho menor, cerca de 6 Megas. Me gustaria no depender el aplicaciones externas para hacerlo.

Conocen alguna forma de indicar el grado de compresion del archivo PDF o algun parametro que se pueda utilizar en la function report de xbrowse para optimizar el resultado obtenido?.

He realizado tambien pruebas con un PRINT oPrn NAME "INFORMACION" FILE '.\QR\TEST'+'.PDF' y no logro optimizarlo, quedando casi con el mismo tamaño final.

Muchas gracias por la ayuda, y saludos a todos. Atte. Mariano

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Consulta Compresion del Export a PDF de xbrowse
Posted: Mon Mar 09, 2026 06:35 AM

Estimado Mariano,

El problema de tamaño que experimenta se debe a cómo FWH genera internamente el PDF, no a un parámetro de compresión que falte en oBrw:Report(). Actualmente no existe un parámetro directo de compresión en el método Report() de xBrowse.

Causa raíz

Cuando usa oBrw:Report(..., "PDF") o PRINT oPrn FILE 'archivo.pdf', FWH sigue esta cadena de prioridades para generar el PDF: 0-cite-0

  1. Image2PDF (si lUseI2PDF está activo)
  2. FWSavePreviewToPDF (si lUseFWPDF está activo)
  3. Microsoft Print to PDF (driver del sistema)
  4. MSWord (si está instalado)
  5. FWSavePreviewToPDF (fallback final)

El método por defecto FWSavePreviewToPDF (en prv2pdf.prg) convierte cada página EMF a una imagen JPEG a calidad 100 (máxima, sin compresión) y la incrusta como imagen de página completa en el PDF: 0-cite-1

Esto significa que el texto no es texto real en el PDF, sino una imagen rasterizada por página, lo cual explica los 80 MB.

Solución recomendada: Usar HaruPDF

La mejor opción nativa dentro de FWH es usar HaruPDF, que genera PDF con texto nativo (no imágenes) y aplica compresión HPDF_COMP_ALL automáticamente: 0-cite-2

Para activarlo, necesita hacer esto antes de llamar a oBrw:Report():

Code (prg): Select all Collapse
REQUEST FWHARU   // En cualquier módulo del proyecto (una sola vez)

// Antes de generar el reporte:
TPrinter():lUseHaruPDF := .t.

oBrw:Report( '.\QR\PR', .F., nil, nil, nil, "PDF" )

Esto hará que el PDF se genere con texto real y compresión nativa, produciendo archivos mucho más pequeños. 0-cite-3

Requisitos para HaruPDF:

  1. Incluir REQUEST FWHARU en algún módulo del proyecto 0-cite-4

  2. Enlazar las librerías adicionales: hbhpdf.lib y libhpdf.lib 0-cite-5

  3. Establecer TPrinter():lUseHaruPDF := .t. antes de imprimir 0-cite-6

Limitaciones de HaruPDF:

  • No soporta texto Unicode
  • Algunas gráficas avanzadas de FWH (TGraph, barras de progreso, charts) pueden no renderizarse correctamente 0-cite-7

Alternativa: Microsoft Print to PDF

Si tiene el driver "Microsoft Print to PDF" instalado en Windows (viene por defecto en Windows 10/11), FWH lo usará automáticamente como primera opción cuando no se especifica HaruPDF ni Image2PDF. Esta opción también genera PDFs más pequeños que el método FWSavePreviewToPDF: 0-cite-8

Para confirmar que se está usando este driver y no el fallback de JPEG, verifique que el driver existe en su sistema. Si no, la instalación del feature de Windows "Microsoft Print to PDF" podría resolver su problema sin cambios de código.

Lo mismo aplica para PRINT...ENDPRINT

El mismo enfoque funciona para su caso con PRINT oPrn:

Code (prg): Select all Collapse
REQUEST FWHARU
TPrinter():lUseHaruPDF := .t.

PRINT oPrn NAME "INFORMACION" FILE '.\QR\TEST.PDF'
   // ... su código de impresión ...
ENDPRINT
``` [0-cite-9](#0-cite-9)
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 74
Joined: Mon Jun 10, 2013 01:21 PM
Re: Consulta Compresion del Export a PDF de xbrowse
Posted: Mon Mar 09, 2026 01:40 PM

Hola Antonio, Muy buenos dias y muchas gracias Sensei por toda la informacion, voy a incorporar las librerias necesarias y probar la solucion que me proporcionaste.

Saludos cordiales, Mariano.

Continue the discussion