Sunteți pe pagina 1din 288

Introducción

XFRX es una herramienta para transformar informes de Visual FoxPro a formatos


electrónicos. Se puede incorporar a las aplicaciones de Visual FoxPro para proporcionar
la siguiente funcionalidad:

 Informes de vista previa en una herramienta de vista previa de informes localizable


avanzada con capacidades de hipervínculo, desglose y búsqueda
 Convertir informes de salida en varios formatos de salida (los formatos de salida
admitidos actualmente son: PDF, DOC, DOCX, RTF, XLS, XLSX, HTML, MHT, ZIP,
TXT, ODT (OpenOffice Writer), ODS, XML, XFF (DBF), BMP , PNG, JPEG, GIF y
TIFF multipágina).
 Almacene los informes generados en un formato de archivo de entrada-salida interno
con una opción para modificar el contenido generado: agregue gráficos, formas, páginas
nuevas, genere objetos gráficos personalizados (por ejemplo, gráficos, marcas de agua)
y muchos más. El formato de archivo interno se puede convertir a cualquiera de los
formatos de salida sin necesidad de volver a procesar el informe.
 Alternativamente, puede omitir el motor de creación de informes, crear cualquiera de
los formatos de salida admitidos por XFRX desde cero, directamente para su código de
Visual FoxPro.

XFRX es un producto libre de regalías. Se puede agregar a las aplicaciones de Visual


FoxPro sin ningún costo adicional. Lea el capítulo Licencia para obtener más detalles.

XFRX está disponible para Visual FoxPro 5.0, 6.0, 7.0, 8.0 y 9.0. XFRX contiene su
propio motor de informes que se utiliza en VFP 8.0 y versiones anteriores. En VFP 9.0,
XFRX se conecta a la nueva arquitectura de informes del motor de informes nativo.
Las diferencias entre XFRX para VFP 5.0, 6.0, 7.0 y 8.0 y XFRX para VFP 9.0 se
describen en detalle en este documento.
Tenga en cuenta: para que el texto sea más fácil de leer, estas diferencias se describen
como diferencias entre VFP 8.0 y VFP 9.0. Si VFP 8.0 se menciona más adelante en el
texto, también se aplica a VFP 5.0, 6.0 y 7.0.
Informe de FoxPro: definición del informe de FoxPro, almacenado en archivos .FRX, .FRT

Motor de informes: el motor de informes que procesa la definición del informe. XFRX para
VFP 8.0 y anteriores contiene su propio motor de informes. En VFP 9.0, XFRX se conecta a la
nueva arquitectura de informes y se utiliza el motor de informes nativo.

Scripts : métodos o fragmentos de código escritos en VFP. Los scripts llaman a los
métodos de la clase XFRX # DRAW para "dibujar" en el documento generado.

Puede encontrar más información sobre el uso de scripts en Dibujar objetos


personalizados con el capítulo XFRX # DRAW en la página 48.

Scripts de objetos personalizados : scripts vinculados a un objeto rectangular en un


informe. Cuando se procesa el rectángulo, se invoca el guión en lugar de representar el
rectángulo real. Los scripts de objetos personalizados pueden alternativamente convertirse
en imágenes. Cuando estos scripts se procesan, la tabla de control del informe está
disponible, por lo que estos scripts son ideales para generar gráficos u otros objetos
gráficos basados en datos.

Scripts enlazados a la página : scripts invocados en cada página, dibujando "arriba" de


"debajo" del contenido de la página. Estos scripts son adecuados para marcas de agua.

Scripts personalizados : también puede modificar los informes generados. Puede agregar
texto, gráficos, páginas nuevas, hipervínculos, marcadores, etc. Incluso puede crear
documentos nuevos desde cero, evitando por completo el motor de informes.

Archivo XFF : un archivo interno que almacena los informes generados. Estos archivos se
pueden modificar, almacenar en el disco, previsualizar en la pantalla, imprimir o convertir a
cualquiera de los formatos de destino. Puede encontrar más información sobre los archivos
XFF en el capítulo Uso de archivos XFF .

XFRX # SORTEO clase - la clase que envuelve archivos XFF.

Previsualizador de XFRX: los archivos XFF se pueden previsualizar en una vista previa de
informe avanzada que viene con XFRX. La vista previa se puede localizar y permite buscar
en el documento y admite hipervínculos y marcadores. Puede encontrar más información
sobre el uso de la previsualización en el capítulo de previsualización de XFRX .

Impresora : XFRX también puede imprimir los archivos XFF.

Encontrará más información sobre cómo imprimir en el capítulo Impresión de archivos


XFF .
Versión de evaluación sugerencia rápida
Para obtener una vista previa rápida de las capacidades de XFRX, descomprima todo el
archivo zip en un directorio vacío y ejecute DEMO.SCX en VFP 6.0 a VFP 8.0 o
DEMO9.SCX en VFP 9.0.

XFRX consta de las siguientes partes:

 XFRX.APP, XFRX.FXP o XFRX.PRG


Esta es la aplicación principal. La versión de demostración contiene XFRX.APP, la versión
comercial se distribuye como XFRX.FXP para una compilación más sencilla en las aplicaciones
de destino (consulte Distribución de XFRX con otras aplicaciones a continuación). Las opciones
del código fuente se distribuyen como XFRX.PRG.
 XFRXLIB.FLL, HNDLIB.DLL, ZLIB.DLL , MD5.FLL
MD5.fll es necesario para XFRX 16.0.

Bibliotecas de soporte. ZLIB.DLL es una utilidad de compresión de software gratuito,


consulte http://www.zlib.org para obtener más información.

 FOXTOOLS.FLL
Esta biblioteca necesita XFRX compilada bajo VFP 5, VFP 6 o XFRX empaquetada para VFP6 y 7.
 Directorio XFRXLIB
Este directorio contiene la biblioteca de clases del componente XFRX previewer y sus archivos
de recursos.
 xfrx.sign.net.exe
Este archivo muestra el archivo pdf de salida.
 xfrxt.exe
Este archivo convierte xml a html plain.
 XLSXTemplate.zip
Archivo de plantilla para el procedimiento XFRX_CopyToXLSX ().

La instalación es simple: desempaquete el archivo zip y asegúrese de que los archivos


sean accesibles desde VFP (pueden colocarse en un directorio local o la ruta se puede
configurar a través del comando SET PATH).

 Cómo XFRX maneja diferentes versiones de Visual FoxPro


 Distribuir XFRX con otras aplicaciones
 Dependencias de XFRXLIB.FLL

Configuración de la clase UtilityReportListener en VFP 9.0


Desde la versión 12.4, la clase XFRXListener (que se usa al ejecutar informes en VFP
9.0 en el modo asistido por objetos (detector de informes)) se deriva de la clase
UtilityReportListener, que no se incluye dentro de XFRX.PRG (XFRX.FXP) y debe ser
provisto para que XFRX funcione correctamente. UtilityReportListener es una clase
FFC que se ocupa, a través de su predecesor FXListener, de las nuevas funciones de
informes dinámicos presentadas en VFP 9.0 SP2. Se implementa en la biblioteca de
clases ReportListener.vcx, que está almacenada por defecto en el subdirectorio FFC del
directorio de inicio de VFP. En el entorno de desarrollo, lo hace disponible ejecutando
el siguiente comando:
SET CLASSLIB TO (HOME () + "ffc \ _reportlistener")
Para distribuir UtilityReportListener con su aplicación, debe incluir los siguientes
archivos FFC (todos disponibles en el directorio FFC):

 _reportlistener.vcx
 reportlisteners.h
 reportlisteners_locs.h
 foxpro_reporting.h
 _frxcursor.vcx
 _frxcursor.h
 _gdiplus.vcx
 gdiplus.h

Un inconveniente de incluir las clases de FFC en su proyecto es que agregan casi 1 MB


al tamaño del archivo ejecutable final, por lo que alternativamente, si no utiliza las
funciones dinámicas en el SP2 y desea reducir el tamaño del archivo ejecutable final,
puede usar un Implementación de UtilityReportListener que viene con el paquete XFRX
en UtilityReportListener.zip. Esta implementación corresponde a la clase FFC anterior
al SP2 y solo tiene unos 30 KB. Para utilizar la implementación alternativa, agregue los
siguientes archivos a su proyecto (todos disponibles en el archivo
UtilityReportListener.zip):

 reportlisteners.h
 reportlisteners_locs.h
 foxpro_reporting.h
 utilityReportListener.prg

y hacer visible la implementación ejecutando el siguiente comando antes de ejecutar


XFRX:
CONFIGURAR EL PROCEDIMIENTO PARA utilityReportListener.prg ADDITIVE

Cómo XFRX maneja diferentes versiones de Visual FoxPro


XFRX para VFP 8 contiene su propio motor de informes que imita el comportamiento
del motor de informes nativo de Visual FoxPro.
XFRX para VFP 9 se implementa como una clase XFRXListener, un descendiente de la
clase UtilityReportListener (consulte _REPORTLISTENER.VCX en FFC para obtener
más información acerca de las clases básicas de escucha de informes proporcionadas
por FFC). La clase XFRXListener cumple con los estándares de informes asistidos por
objetos presentados en VFP 9 y se ajusta perfectamente a la nueva arquitectura
abierta. Puede usarlo solo o en combinación con otros oyentes de informes
proporcionados con el producto o por terceros.
Alrededor del 95% de XFRX está escrito en Visual FoxPro y, para que la
implementación sea lo más fácil posible, todo su código fuente (sin las clases visuales
para el contenedor de previsualización del informe) está en un archivo PRG, tanto para
VFP 8.0 como VFP 9.0: XFRX.PRG. Este archivo PRG es el mismo para todas las
versiones de VFP.
Si compra XFRX sin códigos fuente, podrá descargar XFRX.FXP compilado en la
versión de VFP que esté utilizando.
Si compra el código fuente, antes de agregar XFRX.PRG en su proyecto y compilarlo,
debe habilitar (descomentar) uno de los comandos #DEFINE al comienzo de XFRX.H,
que determina la versión de VFP que está utilizando.
Ejemplo : si se usa XFRX en VFP 8.0, el comienzo de XFRX.H se vería así:
XFRX.H

1 *#DEFINE VFP5

2 *#DEFINE VFP6

3 *#DEFINE VFP7

4 #DEFINE VFP8

5 *#DEFINE VFP9

Diferencias entre XFRX para VFP 8.0 y XFRX para VFP 9.0
Como está escrito en el párrafo anterior, XFRX para VFP 9.0 usa el motor de informes
nativo, que tiene las siguientes ventajas:

1. El diseño de los documentos producidos por XFRX para VFP 9.0 generalmente debería ser más
exacto, ya que el mismo motor se usa tanto para imprimir como para generar documentos.
2. XFRX para VFP 9.0 es aproximadamente dos veces más rápido que XFRX para VFP 8.0.
3. Las variables declaradas como LOCAL no son visibles en XFRX para VFP 8.0.
4. XFRX para VFP 8.0 tiene algunas restricciones en el manejo del entorno de datos. Es capaz de
configurar el entorno de datos, abrir tablas, establecer relaciones y activar los métodos de
entorno de datos, pero la instancia del entorno de datos en sí no está disponible. Esta
restricción no se aplica a VFP 9.0.
5. XFRX para VFP 9.0 puede mostrar cualquier contenido de campos generales, incluidos los
componentes ActiveX. XFRX para VFP 8.0 puede extraer solo imágenes BMP y JPEG de los
campos generales.
6. XFRX para VFP 8.0 no es compatible con el diseño de múltiples columnas donde los registros se
colocan de izquierda a derecha (en lugar de ir de arriba a abajo). Esta limitación no se aplica a
VFP 9.0.

Distribuir XFRX con otras aplicaciones


La mejor forma de distribuir XFRX es incluir XFRX.FXP (o XFRX.PRG, si compró la
opción de código fuente) en el exe de la aplicación de destino (agréguelo a su proyecto,
a la sección donde están sus PRG). De esta forma, no tendrá que distribuir este archivo
y, lo que es más importante, XFRX podrá acceder a los informes y otros archivos de
recursos (imágenes, tablas, etc.) incorporados en el archivo ejecutable.
Si está usando la vista previa de XFRX, agregue los archivos apropiados del directorio
XFRXLIB a su proyecto también.
Las bibliotecas de soporte (XFRXLIB.FLL, HNDLIB.DLL, MD5.FLL y ZLIB.DLL) no
se pueden incluir en el exe y deben distribuirse junto con la aplicación. Deben ubicarse
en el mismo directorio donde está el EXE principal o en un directorio definido en el
comando SET PATH.
Dependencias de XFRXLIB.FLL
XFRXLIB.FLL requiere que se instalen otras tres bibliotecas DLL de Microsoft en los
equipos de destino: gdiplus.dll, msvcr71.dll y msvcp71.dll. Si intenta utilizar XFRX con
XFRXLIB.FLL sin estas DLL instaladas, el método SetParams () devolverá -6,
"xfrxlib.fll no se puede cargar (falta o no es válido)".
Todas estas bibliotecas dll pueden descargarse del sitio web de Eqeus o Microsoft:

 msvcr71.dll: biblioteca de tiempo de ejecución de Microsoft Visual C ++ 7.1. Si no está


instalado en su PC, puede descargarlo desde http://www.eqeus.com/files/msvcr71.zip
 msvcp71.dll: biblioteca de tiempo de ejecución de Microsoft Visual C ++ 7.1. Puede descargarlo
desde: http://www.eqeus.com/files/msvcp71.zip
 gdiplus.dll: esta DLL está incluida con Windows XP y, si no está disponible en su PC, puede
descargarla
desde http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdkredist.htm
 Funciones extendidas
 Formatos de imagen admitidos
 Características experimentales

XFRX actualmente es compatible con los siguientes


tipos de salida:
Tipo de Compat Fec Dise Notas
Documen Valor ible ha ño
to del tipo de desde
objetivo laversió
n
XFRX

Document PDF 6.5 caja


o PDF

Document DOC2PDF 15.0 201 caja Una salida alternativa


o PDF 4- a través de la función MS
05- Word PDF Export . MS
11 Word (versión 2007 o
superior) debe estar instalado

Document FDOC2PDF 15.0 201 caja Una salida alternativa a


o PDF 4- través de la función MS
05- Word PDF Export. MS
11 Word (versión 2007 o
superior) debe estar instalado

Document XPS 12.3 200 caja


o XPS 7-
08-
21

Document DOC 6.5 caja MS Word (versión 2000 o


o de Word superior) debe estar instalado
con diseño
absoluto

Document FDOC 9.8 200 fluir MS Word (versión 2000 o


o de Word 4- superior) debe estar instalado
con diseño 09-
de flujo 02

Document NATIVE_D 14.7 201 caja MS Word no necesita ser


o de Word OCX 3- instalado
con diseño 11-
absoluto, 30
nativo
Document DOCX 14.6 201 caja MS Word (versión 2007 o
o de Word 3- superior) debe estar instalado
con diseño 11-
absoluto, 04
nativo

Document NATIVE_FD 14.7 201 fluir MS Word no necesita ser


o de Word OCX 3- instalado
con diseño 11-
de flujo, 30
nativo

Document FDOCX 14.6 201 fluir MS Word (versión 2007 o


o de Word 3- superior) debe estar
con diseño 11- instalado .
de flujo, 04
nativo

Document RTF 9.0 200 caja "RTF" y "FRTF" no


o RTF con 4- requieren que se instale
diseño 01- ningún producto de terceros
absoluto 03 y se pueden abrir en MS
Word 97 y versiones
posteriores.

Document FRTF 10.0 200 fluir El documento "FRTF"


o RTF con 5- también se puede abrir con
diseño de 04- ciertas limitaciones en Open
flujo 20 Office
( http://www.openoffice.org )
y PC Suite
( http://www.software602.co
m/products/pcs ).
 Open Office no admite
gráficos en RTF, por lo que
las líneas, los rectángulos y
las imágenes no se
mostrarán.
 PC Suite no muestra líneas y
rectángulos correctamente,
sin embargo, las imágenes se
muestran correctamente.

Document ODT 11.2 200 caja


o de 5-
OpenOffic 12-6
e Writer
con diseño
absoluto
Document calzado 11.2 200 fluir
o de 5-
OpenOffic 12-
e Writer 6
con diseño
de flujo

Hoja de SAO 12.0 200 caja


cálculo de 6-
OpenOffic 08-
e Calc con 17
diseño
absoluto

Hoja de PIE 12.0 200 celd


cálculo de 6- a
OpenOffic 08-
e Calc con 17
diseño de
flujo

Hoja de PFODS 15.0 201 celd


cálculo de 4- a
OpenOffic 05-
e Calc: 11
diseño
plano

Document XLS 7.0 200 celd MS Excel (versión 2000 o


o de Excel 3- a superior) debe estar instalado
08-
25

Document XLSPLAIN 14.4 201 celd MS Excel (versión 2000 o


o de Excel 2- a superior) debe estar
- diseño 09- instalado.Vea más
simple 11 en características específicas
de Excel / Salida simple
(XLSPLAIN)

Document NATIVE_FX 15.1 201 celd MS Excel no necesita ser


o de LSX 4- a instalado
Excel, 08-
nativo 05

Document NATIVE_PF 15.1 201 celd MS Excel no necesita ser


o de XLSX 4- a instalado
Excel: 08-
diseño 05
plano,
nativo
Document LLANURA 9.7 200 fluir
o de texto 4-
plano 07-
21

Document CPLAIN 17.2 201 fluir


o de texto 7-
simple: 08-
diseño 17
simple

Document HTML 6.5 caja


o HTML

Document HTMLPLAI 15.0 201 fluir Ver más en características


o HTML - N 4- específicas de HTML /
diseño 05- Salida simple
simple 11

Document MHT 6.5 caja


o HTML
con
gráficos
incluidos

Document XML 9.0 200 - Los documentos "XML" y


o XML 4- "XFF" pueden cargarse y
01- previsualizarse o
03 transformarse en otros tipos
de salida

Document XFF 6.5 -


o XFF
(document
o binario
interno)

Previsuali CNT 6.5 -


zador de
XFRX

Imágenes TIFF, 9.5 200 caja O puede usar el método


TIF (15.5) , 4- SavePicture ()
BMP, 04-
GIF, 01
JPEG,
JPG (15.5) ,
PNG

EMF 15.3 201


5-
01-
21

Impresión 10.2 200 caja Método PrintDocument ()


5-
05-
20

Ejecutando XFRX

Usuario desconocido (mst)

Última modificación el 16 de junio de 2017 por martinajindrova

Cuando se ejecuta XFRX, devuelve una instancia de una de tres clases, dependiendo de un
parámetro pasado. Los parámetros disponibles son:

1. "XFRX # INIT" Al
ejecutar XFRX con este parámetro, se devolverá la instancia de la clase XFRXSession, que es
la clase principal que controla el comportamiento de XFRX en VFP 5, 6, 7 y 8.
2. "XFRX # LISTENER"
Esta opción solo está disponible en Visual FoxPro 9 y devuelve una instancia de la clase
XFRXListener.
3. "XFRX # DRAW"
Esta opción devuelve una instancia de la clase XFRX # DRAW. Esta clase se usa para trabajar
con archivos XFF. Consulte Inicializar el capítulo de instancia de la clase XFRX # DRAW en
la estructura 44 para obtener más información.

Nota importante
La versión de evaluación de XFRX no se puede incluir en proyectos de VFP, hace que VFP
falle. Para evitar esto, invoque XFRX a través de la sustitución de macros:
1 LOCAL m.loSession<font></font>

2 m.loSession = EVALUATE("xfrx('XFRX#INIT')")

De esta forma XFRX.APP no entra en el proyecto y podrá compilar su aplicación sin


problemas.

 Ejecutando XFRX en VFP 9.0


 Usando THISFORM y THIS references
 Algoritmo de envoltura de palabras compatible con GDI +
 Recorte de salida de texto
 Mostrando la barra de progreso en VFP 8.0
 Mostrando barra de progreso en VFP 9.0
 Cancelando la generación de informes en progreso
 Imprimir rangos de página
 Tamaño de página definido por el usuario
 Comprimir los archivos generados
 Viejo comportamiento multilínea
 XFRX # INIT y soporte multibanda
 XFRX # LISTENER y PREVIEW (XFRX 15.3)
 Ejecutando XFRX en MTDLL

Ejecución de XFRX en VFP 5.0, 6.0, 7.0 y 8.0


tenga en cuenta
Para que el texto sea más fácil de leer, las diferencias entre XFRX para VFP 5.0, 6.0, 7.0, 8.0 y
XFRX para VFP 9.0 están más allá en el texto descrito como diferencias entre VFP 8.0 y VFP
9.0. Si se menciona VFP 8.0, la característica descrita también se aplica a VFP 5.0, 6.0 y 7.0.
1. Llame a XFRX con "XFRX # INIT" como parámetro para obtener el objeto XFRXSession:
1 LOCAL m.loSession<font></font>

2 m.loSession=XFRX("XFRX#INIT")

2. Llame al método SetParams para establecer los parámetros de generación de


documentos. (Consulte la página 80 para obtener más información y una lista de
parámetros completa).
3. Si SetParams devuelve 0 (cero), llame al método ProcessReport para que cada informe lo
procese. (Consulte la página 91 para obtener detalles y una lista de parámetros completa).
4. Una vez procesados todos los informes, llame al método Finalizar para finalizar el proceso
de generación de documentos.
5. También puede llamar al método ResetPageNo () si necesita restablecer el número de
página entre informes.

Ejemplo 1

Este código combina dos informes, informe1 e informe2, en un único documento PDF,
output.pdf
1 USE demoreps\invoices ORDER customer<font></font>

2 LOCAL m.loSession, m.lnRetval<font></font>

3 m.loSession= xfrx("XFRX#INIT")<font></font>

4 m.lnRetVal = m.loSession.SetParams("output.pdf",,,,,,"PDF")<font></font>

5 IF m.lnRetVal = 0<font></font>

6 m.loSession.ProcessReport("report1")<font></font>
7 m.loSession.ProcessReport("report2") <font></font>

8 m.loSession.finalize()<font></font>

9 ELSE<font></font>

10 ? m.lnRetVal<font></font>

11 ENDIF

Ejecutando XFRX en VFP 9.0


En VFP 9.0, el modo estándar asistido por objetos se usa para ejecutar XFRX:
1. Llame a XFRX.APP con "XFRX # INIT" como parámetro para obtener el objeto XFRXListener:

loListener=XFRX("XFRX#LISTENER")

2. Ahora hay dos opciones entre las que puede elegir:


a. Llame al método SetParams de loListener que tiene exactamente los mismos parámetros y
valores de retorno que el de la clase XFRXSession. (Consulte la página 80 para obtener más
información y una lista de parámetros completa).
b. O bien, puede completar las propiedades individuales de loListener y ejecutar el método
SetParams sin ningún parámetro para asegurarse de que puede continuar con el siguiente
paso. (Consulte la página 90 para ver la lista completa de propiedades disponibles).
3. Llame al comando nativo INFORMAR FORMATO con la nueva cláusula OBJETO para
procesar cada informe. Si se combinan más informes, incluya la cláusula NOPAGEEJECT con
cada llamada al formulario de informe, pero la última.
4. Alternativamente, también puede dejar la cláusula NOPAGEEJECT en el último comando
FORMATO DE INFORME (que puede ser útil en algunos escenarios) y llamar a
loListener.finalize () para finalizar la generación del documento.

Nota
Incluso en VFP 9.0, puede inicializar la clase XFRXSession a través del parámetro "XFRX #
INIT" y usar el propio motor del XFRX, en lugar del nativo.

Los siguientes ejemplos hacen exactamente lo mismo (y también hacen exactamente lo


mismo que en el ejemplo 1 anterior), que muestran varias formas de llamar a XFRX en VFP
9.0:

Ejemplo 2
1 USE demoreps\invoices ORDER customer<font></font>

2 LOCAL m.loSession, m.lnRetval<font></font>

3 m.loSession = XFRX("XFRX#LISTENER")<font></font>

4 m.lnRetval = loSession.SetParams("output.pdf",,,,,,"PDF")<font></font>
5 IF m.lnRetval = 0<font></font>

6 REPORT FORM report1 OBJECT m.loSession NOPAGEEJECT<font></font>

7 REPORT FORM report2 OBJECT m.loSession<font></font>

8 ELSE<font></font>

9 ? m.lnRetval<font></font>

10 ENDIF

Ejemplo 3
1 USE demoreps\invoices ORDER customer<font></font>

2 LOCAL m.loSession, m.lnRetval<font></font>

3 m.loSession = XFRX("XFRX#LISTENER")<font></font>

4 m.lnRetval = m.loSession.SetParams("output.pdf",,,,,,"PDF")<font></font>

5 IF m.lnRetval = 0<font></font>

6 REPORT FORM report1 OBJECT m.loSession NOPAGEEJECT<font></font>

7 REPORT FORM report2 OBJECT m.loSession NOPAGEEJECT<font></font>

8 m.loSession.finalize()<font></font>

9 ELSE<font></font>

10 ? m.lnRetval<font></font>

11 ENDIF

Ejemplo 4
1 USE demoreps\invoices ORDER customer<font></font>

2 LOCAL m.loSession, m.lnRetval<font></font>

3 m.loSession = XFRX("XFRX#LISTENER")<font></font>

4 m.loSession.targetType = "PDF"<font></font>

5 m.loSession.targetFileName = "output.pdf"<font></font>

6 m.lnRetval = m.loSession.SetParams()<font></font>

7 IF m.lnRetval = 0<font></font>

8 REPORT FORM report1 OBJECT m.loSession NOPAGEEJECT<font></font>


9 REPORT FORM report2 OBJECT m.loSession<font></font>

10 ELSE<font></font>

11 ? m.lnRetval<font></font>

12 ENDIF

Usando THISFORM y THIS references


Nota
Este párrafo se aplica solo a VFP 8.0. THISFORM y THIS references son manejados
correctamente por el motor de informes nativo en VFP 9.0.

XFRX es compatible con THISFORM y THIS en las expresiones del campo del informe. Sin
embargo, al ser una aplicación VFP normal, XFRX no puede acceder a THISFORM y THIS
objetos directamente. En cambio, el objeto THISFORM debe enviarse explícitamente a XFRX
a través del método setThisform (), ESTO debe enviarse mediante el método setThis (). Si
tiene THISFORM en su informe, llame a xfrxSession.setThisform (THISFORM) antes de llamar
a ProcessReport (). Si está utilizando ESTO, llame a xfrxSession.setThis (THIS).

Algoritmo de envoltura de palabras compatible con GDI +


Desde la introducción de VFP 9.0 estamos experimentando problemas de compatibilidad
de diseño entre el antiguo motor de informes (antes de VFP 9.0) y el nuevo motor de
informes (VFP 9.0). Consulte el tema de ayuda de la Guía de mejoras de informes de VFP
9.0 para obtener más información.

Con XFRX estamos experimentando un problema similar: mientras que el motor de


informes pre-VFP 9.0 dentro de XFRX está utilizando GDI para el cálculo del diseño y del
envío de palabras, el informe de VFP 9.0 que se usa en XFRX para VFP 9.0 usa GDI
+. Además, XFRX usa GDI + para imprimir, generar imágenes y previsualizar. La principal
diferencia entre usar GDI y GDI + es el ancho del texto. Cada elemento de texto es
ligeramente más ancho con GDI +, lo que puede hacer que se corte el contenido del
elemento, envolviendo más temprano los campos estirados. Aquí hay un resumen:
XFRX ver. 12.3 y anterior

VFP VFP 8.0 y versiones


9.0 anteriores

Salida a PDF y otros formatos de GDI GDI


salida

Motor de informes GDI + GDI

Vista previa del informe GDI + GDI +

Impresión fuera de XFRX GDI + GDI +


Aunque convertir todo en GDI + facilitaría la complejidad, traería otro problema: es posible
que haya que modificar los informes "antiguos", consulte el tema de ayuda Cambios en la
funcionalidad del tema de versión actual de VFP 9.0 para obtener más información. Por
lo tanto, en su lugar, la última versión de XFRX ahora contiene algoritmos de engastado de
palabras GDI y GDI + y puede elegir cuál se va a usar. De manera predeterminada, GDI + se
utiliza en VFP 9.0 en el modo de escucha y GDI se usa en VFP 8.0
anteriormente. Probablemente no haya ninguna razón para cambiar a GDI en VFP 9.0, pero
a veces puede ser útil cambiar a GDI + ya que la impresión y la vista previa aún están en
GDI +:
XFRX ver. 12.4 con el envío de palabras establecido en GDI +

VFP VFP 8.0 y versiones


9.0 anteriores

Salida a PDF y otros formatos de GDI + GDI +


salida

Motor de informes GDI + GDI +

Vista previa del informe GDI + GDI +

Impresión fuera de XFRX GDI + GDI +

XFRX ver. 12.4 con el envío de palabras establecido en GDI

VFP VFP 8.0 y versiones


9.0 anteriores

Salida a PDF y otros formatos de GDI GDI


salida

Motor de informes GDI + GDI

Vista previa del informe GDI + GDI +

Impresión fuera de XFRX GDI + GDI +

Para configurar manualmente el algoritmo de engastado de palabras, antes de ejecutar sus


informes, cree una variable pública o privada _xfrx_WordWrapAlgorithm y configúrela en 1
para el modo GDI y 2 para el modo GDI +.

Recorte de salida de texto


En VFP 9.0, el modo de recorte se controla mediante el ajuste " Modo de ajuste para
expresiones de caracteres " en la pestaña "Formato" en el formulario "Propiedades de
campo".
En la versión anterior a VFP 9.0, el recorte está controlado por una cadena especial en el
comentario de campo: #UR TRIM =, seguido del código del modo de recorte:
Código Descripción
0 Recorte predeterminado en versiones anteriores a VFP 9.0: recorte a la
palabra más cercana

1 Recortar al personaje más cercano

2 Recortar a la palabra más cercana

3 Recorte al personaje más cercano, añada puntos suspensivos

4 Recorte a la palabra más cercana, añada puntos suspensivos

5 Mostrar el camino interno como puntos suspensivos

Ejemplo: #UR TRIM = 3 se ajusta al carácter más cercano y agrega puntos suspensivos

Mostrando la barra de progreso en VFP 8.0


XFRX proporciona un enlace simple para que cualquier herramienta de barra de progreso
se pueda usar para mostrar el progreso durante el proceso de generación de
documentos. Todo lo que tiene que hacer es crear un objeto que contenga el método
updateProgress () y pasarlo a XFRX. Durante el proceso de generación, XFRX llama al
método updateProgress () después de cada página o después de que se procesa cada
registro.

Este es un ejemplo simple de mostrar el progreso de la generación en una ventana de


espera:
1 LOCAL m.loSession, m.loProgress, m.lnRetVal<font></font>

2 m.loSession=xfrx("XFRX#Init")<font></font>

3 m.loProgress = CREATEOBJECT("progress")<font></font>

4 m.lnRetVal = m.loSession.SetParams("document",,,,,,"PDF")<font></font>

5 IF m.lnRetVal = 0<font></font>

6 m.loSession.setProgressObj(loProgress,2)<font></font>

7 m.loSession.ProcessReport("myReport")<font></font>

8 m.loSession.finalize()<font></font>

9 ENDIF<font></font>

10 <font></font>

11 DEFINE CLASS progress AS CUSTOM<font></font>

12 PROCEDURE updateProgress<font></font>

13 LPARAM m.ta, m.tb, m.tc<font></font>


14 WAIT WINDOW NOWAIT "Page #: "+allt(str(m.tb))+" Report #: "+allt(str(m.ta))+" ("+

15 ENDPROC<font></font>

16 ENDDEF

El objeto de progreso se adjunta a XFRX con el método setProgressObj (). Este método
toma dos parámetros: el primero es el objeto de progreso, el segundo define la
información que obtendrá el progreso de actualización (). Puede contener dos valores: 1:
solo se proporcionará el número de página y el número de informe en el método
updateProgress (), o se proporcionará un número de 2 páginas, un número de informe y un
progreso porcentual dentro del informe actual. El uso del porcentaje de información de
progreso es más preciso y más adecuado para la visualización de la barra de progreso, pero
para ello, XFRX debe calcular el número de registros en la tabla procesada, lo que, en
ocasiones, puede exigir mucho tiempo. En estos casos, 1 puede usarse para no calcular la
cantidad de registros.
El método updateProgress toma tres parámetros: número de informe actual, número de
página actual y progreso porcentual real dentro del informe actual.

Mostrando barra de progreso en VFP 9.0


En VFP 9.0, el objeto XFRXListener se puede encadenar junto con otro oyente que se
ocuparía de la visualización de la barra de progreso. Una de las formas posibles de hacerlo
es utilizar la clase UpdateListener, que se envía con VFP 9.0, en FFC.

Ejemplo:

Este código de ejemplo crea una instancia de la clase UpdateListener y la encadena con
XFRXListener:
1 LOCAL m.loSession, m.loUpdate<font></font>

2 m.loSession = XFRX("XFRX#LISTENER")<font></font>

3 SET CLASSLIB TO (HOME()+"FFC\_reportlistener.vcx")<font></font>

4 m.loUpdate = CREATEOBJECT("updatelistener")<font></font>

5 m.loUpdate.thermFormCaption = "Report in progress ..."<font></font>

6 m.loSession.successor = m.loUpdate<font></font>

7 m.lnRetval = m.loSession.setparams("output.pdf",,,,,,"PDF")<font></font>

8 IF lnRetval == 0<font></font>

9 REPORT FORM (m.lcReportName) OBJECT loSession NOPAGEEJECT<font></font>

10 m.loSession.finalize()<font></font>

11 ELSE<font></font>
12 ? m.lnRetval<font></font>

13 ENDIF

Cancelando la generación de informes en progreso


Nota
Este párrafo se aplica tanto a VFP 9.0 como a VFP 8.0

El proceso de generación de informes en curso se puede cancelar estableciendo la variable


global gnStopXFRX en 1. Por ejemplo, puede, por ejemplo, usarlo de esta manera:

ON KEY LABEL Ctrl+C gnStopXFRX = 1

Imprimir rangos de página


Nota: Este párrafo se aplica solo a VFP 8. En VFP 9.0, utilice la cláusula RANGE del comando
FORM INFORMAR para lograr lo mismo.

Para definir el rango de páginas, llame al método setPageRange () antes de llamar a


ProcessReport (). Hay dos formas posibles de llamar al método setPageRange ():
 setPageRange (tnFrom, tnTo)
tnFrom y tnPara definir el rango desde-hasta. Si tnTo está vacío, se usa el número total de
páginas
Ejemplo:

m.loSession.setPageRange(5,10)

 setPageRange (tcRange)
tcRange es una cadena, que puede contener números de página y rangos de página
delimitados por comas, el rango de página se define como "de-a".
Ejemplo:

m.loSession.setPageRange("1,4,10-20,25")

Tamaño de página definido por el usuario


Nota
Este párrafo se aplica tanto a VFP 80. como a VFP 9.0

Puede definir el tamaño de página del documento generado. El tamaño de página definido
por el usuario anulará el tamaño de página almacenado en el informe. Para definir el
tamaño de página definido por el usuario, llame al método setPaperSize () con el ancho del
papel y la altura del papel como parámetros:
setPaperSize(nUDPaperWidth, nUDPaperHeight)

La unidad es Inch * 10000.

Consulte también: Ajuste del tamaño de página HTML en la página 34.

Comprimir los archivos generados


Nota
Este párrafo se aplica tanto a VFP 8.0 como a VFP 9.0

El archivo generado se puede comprimir automáticamente. Esta característica está


controlada por los últimos tres parámetros del método SetParams () de las clases
XFRXSession y XFRXListener (vea la referencia na stránce 80) o, con un comportamiento
equivalente, por los tres parámetros del método ZipDocument () de la clase XFRXListener
(referencia na stránce 90).

Ejemplo:

Con los siguientes parámetros de SetParams, XFRX primero crea "facturas.pdf", luego crea
"archivo.zip" (si no existe) y agrega "facturas.pdf" en el archivo. Luego, se eliminará el
original "facturas.pdf":

m.loSession.SetParams("invoices.pdf",,.T.,,,,"PDF","archive.zip", .t., .t.)

Viejo comportamiento multilínea


XFRX 15.0.3 corrige un error con un cálculo incorrecto de la altura de varias líneas: la altura
del objeto no es igual a la altura del objeto en la vista previa nativa de VFP. si necesita el
cálculo de altura de línea múltiple anterior, establezca la propiedad lOldMultiLineBehavior
en verdadero.

m.loSession.lOldMultiLineBehavior = .T.

XFRX # INIT y soporte multibanda


Si tiene un informe con múltiples bandas de detalles y necesita ejecutarlo en la sintaxis de
llamadas previa a VFP9 (por ej., Necesita exportar un informe en su aplicación dll),
establezca la propiedad lMultiDetailBehavior. Esta característica es experimental.
Esta propiedad está obsoleta desde XFRX 17.0. XFRX 17.0 admite múltiples bandas de
detalles.
m.loSession.MultiDetailBehavior = .T.

XFRX # LISTENER y PREVIEW (XFRX 15.3)


Admite la cláusula PREVIEW para XFRX # LISTENER en el comando INFORMAR.
Sencillamente:

1 LOCAL m.loSession, m.lnRetVal<font></font>

2 SET CLASSLIB TO (HOME()+"ffc\_reportlistener") ADDITIVE <font></font>

3 SET CLASSLIB TO xfrxlib\xfrxlib ADDITIVE <font></font>

4 <font></font>

5 m.loSession=EVALUATE([XFRX("XFRX#LISTENER")])<font></font>

6 m.lnRetVal = m.loSession.SetParams(,, ,,,,"PREVIEWFRM")<font></font>

7 IF m.lnRetVal = 0<font></font>

8 REPORT FORM (lcPath+"_reports\test") OBJECT m.loSession PREVIEW<font></font>

9 ELSE<font></font>

10 ?m.loSession.ErrorMessage(m.lnRetVal) <font></font>

11 ENDIF

Crea vista previa de forma:


1 LOCAL m.loSession, m.lnRetVal<font></font>

2 SET CLASSLIB TO (HOME()+"ffc\_reportlistener") ADDITIVE <font></font>

3 SET CLASSLIB TO xfrxlib\xfrxlib ADDITIVE <font></font>

4 <font></font>

5 m.loSession=EVALUATE([XFRX("XFRX#LISTENER")])<font></font>

6 <font></font>

7 m.lnRetVal = m.loSession.SetParams(,, ,,,,"PREVIEWFRM")<font></font>

8 IF m.lnRetVal = 0<font></font>

9 m.loSession.oPreviewFRM = CREATEOBJECT("frmMPPreviewer")<font></font>
10 m.loSession.oPreviewFRM.WindowType=0 && or another settings<font></font>

11 <font></font>

12 REPORT FORM (lcPath+"_reports\test") object m.loSession PREVIEW<font></font>

13 ELSE<font></font>

14 ?m.loSession.ErrorMessage(m.lnRetVal) <font></font>

15 ENDIF

Ejecutando XFRX en MTDLL


Por favor, lea la información sobre la clave PROGCACHE en la Ayuda de Visual FoxPro
"Términos especiales para los archivos de configuración".

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX

Páginas

Guía del desarrollador

Funciones interactivas

Usuario desconocido (mst)

Modificado por última vez sep 26, 2017 por martinajindrova

Los documentos generados pueden incluir hipervínculos para una navegación más rápida,
los documentos PDF también pueden incluir marcadores. Los hipervínculos y marcadores se
controlan mediante el campo Comentario de etiquetas y campos.
En la versión beta de VFP 9 hay un error que hace que sea imposible almacenar algo en el
comentario de los campos. Debido a que XFRX usa el campo de comentario para definir
hipervínculos y marcadores, el campo "Datos de usuario" ahora se usa para este
propósito. En la versión final, XFRX para VFP 9 funcionará tanto con los comentarios como
con el campo de datos del usuario.

 Hipervínculos
 Creando campos fuente
 Creando campos objetivo
 Marcadores

Hipervínculos
Este párrafo se aplica tanto a VFP 9 como a VFP 8.

Los hipervínculos se controlan mediante el campo Comentario de las etiquetas o campos


de informe.

Para crear un enlace, necesita un campo de origen (el texto subrayado que va a navegar) y
un campo de destino (el lugar donde se obtiene al hacer clic en un hipervínculo).

Creando campos fuente

Ingrese el siguiente texto en el comentario del campo fuente:

#UR A HREF = <nombre de destino>

El nombre de destino es una expresión, que se evalúa en el momento de la generación del


informe. Puede navegar a otros campos en el mismo documento o a cualquier URL. Los
nombres de destino de otros campos en el mismo documento deben estar precedidos por
#.

Ejemplos:

#UR A HREF="#top"

Navega hasta el comienzo del documento. "arriba" es una palabra reservada. No nombrar
los campos de destino son "superiores".

#UR A HREF="#custlist"

Navega al campo cuyo nombre de destino es "custlist".

#UR A HREF="#"+customer.id

Se desplaza al campo cuyo nombre de destino es eval ( customer.id )

#UR A HREF="http://www.eqeus.com"

Navega a la página principal de Eqeus.com

Creating target fields

To add a destination name to a (target) field, add the following text into the comment:
#UR A NAME=<destination name>

Example:

#UR A NAME=customer.id

This field will be a target field for source fields with HREF="#"+customer.id

Bookmarks
This paragraph applies both to VFP 9 and VFP 8.
Bookmarks are currently supported in PDF, HTML documents and XFRX previewer.

Bookmarks (document outline) serves as a "visual table of contents" to display the


document structure. Users use this to interactively navigate in the document. To add a
report field into the document outline simply put the following into the field's comment:
#UR OUTLINE=<outline_name><font></font>

#UR OUTLINESTYLE=<outline style number> && 0 - normal, 1 - italic, 2 - bold, 3 - italic+b

The outline_name is an expression, which is evaluated at the time of report generation and
the result is used as the bookmark item. If users click the bookmark, they will navigate to
the corresponding report field.

Example:

In a report with a list of invoices grouped by customers, bookmarks containing the list of
customer can be created by adding
#UR OUTLINE=invoices.customerName<font></font>

#UR OUTLINESTYLE=IIF(ATC("a",invoices.customerName)>0,1,0)+IIF(ATC("t",invoices.customerN

into the comment of a customer name field (or any other field you want to navigate to, e.g.
the first field on a page with the customer).

To enable bookmarks in the HTML output, call


1 m.loSession.SetOtherParams("PRINT_BOOKMARKS",.T.)<font></font>

2 m.loSession.SetOtherParams("PRINT_BOOKMARKS",.T.,1) && Only bookmarks from report<font><

3 m.loSession.SetOtherParams("PRINT_BOOKMARKS",.T.,2) && Only bookmarks to pages<font></fo

4 m.loSession.SetOtherParams("PRINT_BOOKMARKS",.T.,3) && Page and report bookmarks

before calling loSession.ProcessReport()

With bookmarks enabled, XFRX will generate three HTML pages (three files): the main page
defining the page frames, the bookmark page and the page with the report output.
XFRX 16.1
Methods SetOutline() and SetOutlineTypes() are deprecated since XFRX 16.1.
Member oDocument of XFRX Session object is deprecated too. You can use member
oDocumentWriter.
XFRX 17.3
Member oDocument of XFRX Session object is removed. Methods SetOutline() and
SetOutlineTypes() are removed too.

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX

Páginas

Guía del desarrollador

Propiedades del documento

martinajindrova

Modificado por última vez mar 22, 2017

Este párrafo se aplica tanto a VFP 9 como a VFP 8. Los métodos set ... se implementan en las
clases XFRXListener y XFRXSession.

Se pueden llamar los siguientes métodos para establecer varias propiedades del
documento. Al generar un documento de Word, todas las propiedades del documento
deben establecerse antes de que se procese el primer informe. Al exportar a PDF, las
propiedades deben establecerse antes de llamar al método Finalize ().

Ejemplo
1 LOCAL m.loSession<font></font>

2 m.loSession = EVALUATE([XFRX("XFRX#INIT")])<font></font>

3 m.lnRetVal = m.loSession.SetParams("pdf.docx",,,,,,"NATIVE_FDOCX")<font></font>
4 IF m.lnRetVal = 0<font></font>

5 m.loSession.setAuthor("author")<font></font>

6 m.loSession.setTitle("title")<font></font>

7 m.loSession.setSubject("subject")<font></font>

8 m.loSession.setKeywords("keywords")<font></font>

9 m.loSession.setCreator("creator")<font></font>

10 m.loSession.setProducer("producer")<font></font>

11 m.loSession.setCreationDate(CTOT("^1900-01-01 01:01:01"))<font></font>

12 m.loSession.setComments("comments") <font></font>

13 m.loSession.setCategory("category") <font></font>

14 m.loSession.setManager("manager") <font></font>

15 m.loSession.setCompany("company")<font></font>

16 ENDIF

Salida Autor Título Tema Palabras Creador Productor Fecha de


clave creación

setAuthor setTitle () setSubject setKeywords () setCreator () setProducer () setCreationDate ()

() ()

PDF sí sí sí sí sí sí sí (16.0)

DOC2PDF sí sí sí sí - - -

FDOC2PDF sí sí sí sí - - -

XPS sí (16.0) sí (16.0) sí (16.0) sí (16.0) - - sí (16.0)

DOC sí sí sí sí - - sí (16.0)

FDOC sí (16.0) sí (16.0) sí (16.0) sí (16.0) - - sí (16.0)


Salida Autor Título Tema Palabras Creador Productor Fecha de
clave creación

NATIVE_DOCX sí sí sí sí - - sí (16.0)

NATIVE_FDOCX sí sí sí sí - - sí (16.0)

RTF sí (16.0) sí(16.0) sí (16.0) sí (16.0) - - sí (16.0)

FRTF sí (16.0) sí (16.0) sí (16.0) sí (16.0) - - sí (16.0)

ODT sí sí sí sí - - sí (16.0)

calzado sí sí sí sí - - sí (16.0)

SAO sí sí sí sí - - sí (16.0)

PIE sí sí sí sí - - sí (16.0)

PFODS sí sí sí sí - - sí (16.0)

XLS sí (16.0) sí (16.0) sí (16.0) sí (16.0) - - sí (16.0)

XLSPLAIN sí (16.0) sí (16.0) sí (16.0) sí (16.0) - - sí (16.0)

NATIVE_FXLSX sí sí sí sí - - sí (16.0)

NATIVE_PFXLSX sí sí sí sí - - sí (16.0)

LLANURA - - - - - - -

HTML sí sí sí sí - - sí (16.0)

HTMLPLAIN no no no no - - no

MHT sí sí sí sí - - sí (16.0)
Salida Autor Título Tema Palabras Creador Productor Fecha de
clave creación

CNT / - - - - - - -
previewer

BMP - - - - - - -

GIF - - - - - - -

EMF - - - - - - -

PELEA sí (16.0) sí (16.0) sí (16.0) sí (16.0) - - sí (16.0)

JPEG sí (16.0) sí (16.0) sí (16.0) sí (16.0) - - sí (16.0)

PNG - - - - - - -

XFF - - - - - - -

XML - - - - - - -

Impresión - - - - - - -

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX

Páginas

Guía del desarrollador


Funciones específicas de PDF

Usuario desconocido (mst)

Modificado por última vez sep 26, 2017 por martinajindrova

XFRX 16.1
Miembro oDocument del objeto de sesión XFRX está en desuso. Puede usar miembro
oDocumentWriter.
XFRX 17.3
Miembro oDocument del objeto de sesión XFRX eliminado.
Anexar salida generada a documentos PDF existentes
Este párrafo se aplica tanto a VFP 9 como a VFP 8.

A partir de la versión 10.1, XFRX puede agregar el informe generado a un documento PDF
existente. Es posible adjuntar el informe al final del documento o en una posición arbitraria
dentro del documento: con insertar las páginas nuevas o reemplazar las páginas en el
documento PDF existente.

En XFRX para VFP 8, esta característica está controlada por un nuevo parámetro del método
SetParams (...): tuAppend. Consulte la referencia del método SetParams para obtener más
información sobre cómo configurar este parámetro.

En XFRX para VFP 9 puede usar indistintamente el nuevo parámetro del método SetParams
(...) o la propiedad AppendToFile de la clase XFRXListener.
Notas

1. No se garantiza que XFRX pueda agregarse a ningún documento PDF. Funciona bien con
documentos PDF generados por XFRX y también hemos probado con éxito PDF de otras
fuentes, pero la especificación PDF permite algunas estructuras internas que XFRX no
podría decodificar. (Para ser precisos: XFRX no admite documentos PDF linealizados ni
documentos que usen estructuras de árbol de páginas).
2. Debido a la forma en que se construye el archivo PDF, el tamaño del documento PDF nunca
se reduce, incluso si el número de páginas en el documento PDF resultante es más
pequeño que en el original.

Ejemplo: El informe TEST.FRX se agregará al documento TEST.PDF existente. Si el archivo


TEST.PDF no existe, se creará.
1 LOCAL m.loXFRX, m.lnRetVal<font></font>

2 m.loXFRX = XFRX("XFRX#LISTENER")<font></font>

3 m.lnRetVal = m.loXFRX.SetParams("test.pdf",,,,,,"PDF",,,,.T.)<font></font>

4 IF m.lnRetVal = 0<font></font>

5 REPORT FORM test OBJECT m.loXFRX<font></font>


6 ENDIF

 Anexar salida generada a documentos PDF existentes


 Encriptación PDF
 Incrustación de fuente PDF
 Soporte de código de barras (#UR SYMBOLFONT)
 Parámetro de soporte UNICODE
 Firmas digitales en PDF
 Cómo invocar la firma digital
 Manifestación
 Campo de firma vacío
 Soporte PDF / A
 Invocando PDF / A
 Soporte CMYK
 Soporte de imagen negativo
 Soporte MASK - imagen transparente
 Formato de imagen predeterminado
 Modo de depuración
 Parámetro DONOTPUTDOCUMENTID
 Parámetros DEVELOP y DEVELOPFOLDER
 Parámetro DONOTZIPTEXTSTREAM
 Diseño de página, modo de página y preferencias del visor
 Versión PDF
 Tamaño de TAB
 Archivos adjuntos
 Agregar archivo adjunto - pdf
 Agregar un ejemplo de archivo adjunto - xml (ZUGFeRD - http://www.ferd-net.de/)
 Agregar un ejemplo de archivo adjunto - isdoc (ISDOC -
http://www.isdoc.org/index.php?l=2)

Encriptación PDF
Este párrafo se aplica tanto a VFP 9 como a VFP 8. El método setPasswords se implementa
tanto en las clases XFRXListener como XFRXSession.

Los documentos PDF se pueden encriptar. Para configurar el cifrado, llame al método
setPasswords:

m.loSession.setPasswords(m.tcOwnerPassword, m.tcUserPassword)

La contraseña del usuario puede estar vacía. Si la contraseña del propietario está vacía, se
generará una cadena aleatoria como contraseña.
Modo de agregar
Method setPasswords() must be calls before method SetParams() for appending or
replacing page in exsting file.

The owner can do anything with the document. The user permissions can be set using the
setPermission method:
m.loSession.setPermissions(m.tlPrintDocument, m.tlModifyDocument, ;<font></font>
m.tlCopyTextAndGraphics, m.tlAddOrModifyAnnotations,;<font></f

m.tlFillFormFields, m.tlExtractTextAndGraphics, ;<font></font>

m.tlAssembleDocument, m.tlPrintDocumentInLow)

The default values of the permissions is .F. (false).


Parameters tlFillFormFields, tlExtractTextAndGraphics, tlAssembleDocument,
tlPrintDocumentInLow are since XFRX 16.1.

PDF Font Embedding


This paragraph applies both to VFP 9 and VFP 8. The method is implemented both in
XFRXListener and XFRXSession classes.

XFRX supports both whole font and font subset embedding.

To embed all characters of all used fonts, call:

m.loSession.setEmbeddingType(2)

before running the report.

To embed only the characters used, call:

m.loSession.setEmbeddingType(3)

Embedding only subset of fonts (characters used in the document) significantly reduces the
size of the generated file.

To select which font to embed (e.g. when you need just to embed the barcode font, or font
that is not installed on the pc the document will be sent to), add “#UR INCLUDEFONT”
(without the quotation marks) to the comments of a field that uses the font (in the report).
Add “#UR INCLUDEFONT SUBSET” comment to include the font subset.

Special code pages


XFRX set font embedding subset for special code pages (1250, 1251, 1257, 1254, 1253,
1255) and selected font (Arial, Arial CE, Arial Narrow, Arial Black, Courier New, Courier New
CE, Times New Roman, Times New Roman CE) if detect national characters. XFRX set font
embedding subset allways for Symbols or if you enable PDF/A support.

If you want change the default behavior (special code page) you can use parameter
CHECKFONTFORSPECIALCODEPAGE (for disable or enable) or
ADDFONTFORSPECIALCODEPAGE (for add font to list) - since XFRX 17.1
loSession.SetOtherParams("CHECKFONTFORSPECIALCODEPAGE",.F.) && Disable the behavior<font>

loSession.SetOtherParams("ADDFONTFORSPECIALCODEPAGE","Tahoma") && Add font to list


Barcode support (#UR SYMBOLFONT)
(Obsolete since XFRX 15.7) Put "#UR SYMBOLFONT" into the comment of the report field
that contains the barcode. This will instruct the engine not to do any codepage conversions
and flag the font as a symbol font in the PDF document.
Parameter UNICODE support
You can set UNICODE output for document.

To select which font to embed as UNICODE (e.g. when you need just to embed the barcode
font, or font that is not installed on the pc the document will be sent to), add
“#UR INCLUDEFONT UNICODE” (without the quotation marks) to the comments of a field
that uses the font - in the report (since XFRX 16.0).

m.loSession.SetOtherParams("UNICODE",.T.)

Digital signatures in PDF


The digital signature can be used to validate the document content and the identity of the
signer. (You can find more at http://en.wikipedia.org/wiki/Digital_signature). XFRX
implements the "MDP (modification detection and prevention) signature" based on the PDF
specification version 1.7, published in November 2006.

The signing algorithm in XFRX computes the encrypted document digest and places it,
together with the user certificate, into the PDF document. When the PDF document is
opened, the Adobe Acrobat (Reader) validates the digest to make sure the document has
not been changed since it was signed. It also checks to see if the certificate is a trusted one
and complains if it is not. The signature dictionary inside PDF can also contain additional
information and user rights - see below.

At this moment XFRX supports invisible signatures only (Acrobat will show the signature
information, but there is no visual element on the document itself linking to the digital
signature). We will support visible signatures in future versions.

In the current version, XFRX is using the CMS/PKCS #7 detached messages signature
algorithm in the .net framework to calculate the digest - which means the .NET framework
2.0 or newer is required. The actual process is run via an external exe - "xfrx.sign.net.exe",
that is executed during the report conversion process. In future, we can alternatively use the
OpenSSL library instead.

How to invoke the digital signing


The syntax is the same for VFP 9.0 and pre-VFP 9.0 calling methods

To generate a signed PDF document, call the DigitalSignature method before calling
SetParams. The DigitalSignature method has 7 parameter:

cSignatureFile

The .pfx file. pfx, the "Personal Information Exchange File". This file contains the public
certificate and (password protected) private key. You get this file from a certificate authority
or you can generate your own for testing, which for example, OpenSSL
(http://www.slproweb.com/products/Win32OpenSSL.html). XFRX comes with a sample pfx
that you can use for testing.

cPassword

The password protecting the private key stored in the .pfx file

nAccessPermissions

per PDF specification: 1 - No changes to the document are permitted; any change to the
document invalidates the signature. 2 - Permitted changes are filling in forms, instantiating
page templates, and signing; other changes invalidate the signature. (this is the default
value) 3 - Permitted changes are the same as for 2, as well as annotation creation, deletion
and modification; other changes invalidate the signature.

cSignatureName

per PDF specification: The name of the person or authority signing the document. This
value should be used only when it is not possible to extract the name from the signature;
for example, from the certificate of the signer.

cSignatureContactInfo

per PDF specification: Information provided by the signer to enable a recipient to contact
the signer to verify the signature; for example, a phone number.

cSignatureLocation

per PDF specification: The CPU host name or physical location of the signing.

cSignatureReason

per PDF specification: The reason for the signing, such as ( I agree ... ).

Demo

The demo application that is bundled with the package (demo.scx/demo9.scx) contains a
testing self-signed certificate file (TestEqeus.pfx) and a sample that creates a signed PDF
using the pfx. Please note Acrobat will confirm the file has not changed since it was signed,
but it will complaing the certificate is not trusted - you would either need to add the
certificate as a trusted one or you would need to use a real certificate from a certification
authority (such as VeriSign).

Empty signature field

Put #UR EMPTYSIGNATURE=expr into the comment of the report shape fro creating empty
field for signature. Example: #UR EMPTYSIGNATURE="My Signature"
This feature is since XFRX 17.1
PDF/A support
PDF/A is an ISO standard for the digital preservation of electronic documents. PDF/A
document is a PDF document with specific restrictions that ensure that the document will
always display and print exactly the same way, no matter which platform or document
viewer is used:
 Platform independent
 No hidden or transparent content
 All information needed to display the document is embedded (including fonts)
 Document metadata stored as XML
 No encryption, no password protection
 No javascript or other executable parts
 No LZW compression
 Displayed and printed content must match (all annotations must be printed)

There are currently two PDF/A specifications:

 PDF/A-1 from 2005


 PDF/A-2 from 2011
 PDF/A-3 from 2014

XFRX currently supports specification:


Nivel PDFA apoyo no firmado firmado

1a yes valid valid

1b yes valid valid

2a yes (XFRX 16.0) valid nonvalid

2b yes (XFRX 16.0) valid nonvalid

2u yes (XFRX 16.0) valid nonvalid

3a yes (XFRX 16.0) valid nonvalid

3b yes (XFRX 16.0) valid nonvalid

3u yes (XFRX 16.0) valid nonvalid

Please note the PDF/A-enabled document files can be significantly larger than regular PDF
documents because the used fonts must always be included.

Invoking PDF/A

To generate a PDF/A document, call SetPDFA(.T.,[lcLevel]) method on the session object


before processing. This method is available in VFP8 and VFP9 session objects, as well as the
XFRX#DRAW object.

Example:
LOCAL m.loXFRX, m.lnRetVal<font></font>

m.loXFRX = EVALUATE([XFRX("XFRX#LISTENER")])<font></font>

m.loXFRX.setpdfa(.T.) && 1b<font></font>

*m.loXFRX.setpdfa(.T.,"1a") && 1a <font></font>

*m.loXFRX.setpdfa(.T.,"1b") && 1b <font></font>

*m.loXFRX.setpdfa(.T.,"2a") && 2a <font></font>

*m.loXFRX.setpdfa(.T.,"2b") && 2b<font></font>

*m.loXFRX.setpdfa(.T.,"2u") && 2u<font></font>

*m.loXFRX.setpdfa(.T.,"3a") && 3a<font></font>

*m.loXFRX.setpdfa(.T.,"3b") && 3b<font></font>

*m.loXFRX.setpdfa(.T.,"3u") && 3u <font></font>

m.lnRetVal = m.loXFRX.SetParams("pdfa9.pdf",,,1250,,,"PDF")<font></font>

IF m.lnRetVal = 0<font></font>

REPORT FORM demoreps\invoices OBJECT m.loXFRX<font></font>

ENDIF

CMYK support
Put #UR COLOR "CMYK" into the comment of the report images in CMYK.
Negative image support
Put #UR COLOR "NEG" into the comment of the report images in negative colors.
MASK support - transparent image
Put #UR MASK "[255 255 255 255 255 255]" for images with transparent colors. See to
"Color Key Masking" in pdf reference.

You can set general color for images with transaparent background (since XFRX 16.1)
Default color is white - RGB(255,255,255)

m.loSession.SetOtherParams("TRANSPARENTCOLOR",RGB(192,192,192))

Default picture format


(since XFRX 16.2.0)

PDF output knows only jpeg and bitmap pictures. Other format pictures converts to bitmap
(default choice). You can change to jpeg.
m.loSession.SetOtherParams("DEFAULTPICTUREFORMAT",'jpeg')

Debug mode
Parameter DONOTPUTDOCUMENTID

On french OS you can have problem with searching in Adobe Reader. In this case you can
set parameter DONOPUTDOCUMENTID, if you do not use passwords or digital signature.

m.loSession.SetOtherParams("DONOTPUTDOCUMENTID,.T.)

Parameters DEVELOP and DEVELOPFOLDER

If you set these parameters, xfrx copy temporary files into specified folder.
m.loSession.setOtherParams("DEVELOP",.T.)<font></font>

m.loSession.setOtherParams("DEVELOPFOLDER",lcPath+"_out\"+lcOut)

Parameter DONOTZIPTEXTSTREAM

If you set the parameter, output stream inside PDF will not be compressed.

m.loSession.SetOtherParams("DONOTZIPTEXTSTREAM",.T.)

Page layout, Page mode and Viewer Preferences


(since XFRX 16.0)
Paramete Value Description
r

PageLayo specifying the page layout to be used when the document is opened
ut

"SinglePage" Display one page at a time

"OneColumn" Display the pages in one column

"TwoColumnLeft" Display the pages in two columns, with odd-


numbered pages on the left

"TwoColumnRight" Display the pages in two columns, with odd-


numbered pages on the right
"TwoPageLeft" Display the pages two at a time, with odd-
numbered pages on the left

"TwoPageRight" Display the pages two at a time, with odd-


numbered pages on the right

PageMod specifying how the document should be displayed when opened


e

"UseNone" Neither document outline nor thumbnail


images visible

"UseOutlines" Document outline visible

"UseThumbs" Thumbnail images visible

"FullScreen" Full-screen mode, with no menu bar, window


controls, or any other window visible

"UseOC" Optional content group panel visible

"UseAttachments" Attachments panel visible

Parameter Value PDF Descriptio


Versio n
n

ViewerPreferences HideToolbar .T. A flag


specifying
whether to
hide the
viewer
application
’s tool bars
when the
document
is active.
Default
value: .F..

ViewerPreferences HideMenubar .T. A flag


specifying
whether to
hide the
viewer
application
’s menu
bar when
the
document
is active.
Default
value: .F..

ViewerPreferences HideWindowUI .T. A flag


specifying
whether to
hide user
interface
elements
in the
document’
s window
(such as
scroll bars
and
navigation
controls),
leaving
only the
document’
s contents
displayed.
Default
value: .F..

ViewerPreferences FitWindow .T. A flag


specifying
whether to
resize the
document’
s window
to fit the
size of the
first
displayed
page.
Default
value: .F..

ViewerPreferences CenterWindow .T. A flag


specifying
whether to
position
the
document’
s window
in the
center of
the screen.
Default
value: .F..

ViewerPreferences DisplayDocTitle .T. 1.4 A flag


specifying
whether
the
window’s
title bar
should
display the
document
title taken
from the
Title entry
of the
document
informatio
n
dictionary
(see
Section
10.2.1,
“Documen
t
Informatio
n
Dictionary”
). If false,
the title
bar should
instead
display the
name of
the PDF
file
containing
the
document.
Default
value: .F..

ViewerPreferences NonFullScreenPageMode The


document’
s page
mode,
specifying
how to
display the
document
on exiting
full-screen
mode.

"UseNone" Neither
document
outline nor
thumbnail
images
visible.

"UseOutlines" Document
outline
visible.
"UseThumbs" Thumbnail
images
visible.

"UseOC" Optional
content
group
panel
visible.

ViewerPreferences Direction 1.3 The


predomina
nt reading
order for
text.

"L2R" Left to
right.

"R2L" Right to
left .

ViewerPreferences PrintScaling 1.6 The page


scaling
option to
be
selected
when a
print
dialog is
displayed
for this
document

"None" Indicates
that the
print
dialog
should
reflect no
page
scaling.

"AppDefault" Indicates
that
application
s should
use the
current
print
scaling.

ViewerPreferences Duplex 1.7 The paper


handling
option to
use when
printing
the file
from the
print
dialog.

"Simplex" Print
single-
sided.

"DuplexFlipShort Duplex and


Edge" flip on the
short edge
of the
sheet .

"DuplexFlipLong Duplex and


Edge" flip on the
long edge
of the
sheet.

ViewerPreferences PickTrayByPDFSize .T. 1.7 A flag


specifying
whether
the PDF
page size is
used to
select the
input
paper tray

ViewerPreferences PrintPageRange "0 1" 1.7 The page


numbers
used to
initialize
the print
dialog box
when the
file is
printed.

ViewerPreferences NumCopies 2 1.7 The


number of
copies to
be printed
when the
print
dialog is
opened for
this file

1 LOCAL m.loSession, m.lnRetVal<font></font>

2 m.loSession=EVALUATE([xfrx("XFRX#INIT")])<font></font>

3 m.lnRetVal = m.loSession.SetParams("some.pdf",,,,,,"PDF")<font></font>

4 IF m.lnRetVal = 0<font></font>
5 m.loSession.setOtherParams("PAGELAYOUT","SinglePage") && SinglePage, OneColumn, TwoC

6 m.loSession.setOtherParams("PAGEMODE","UseOutlines") && UseNone, UseOutlines, UseThu

7 m.loSession.setOtherParams("VIEWERPREFERENCES","HIDETOOLBAR",.F.) <font></font>

8 m.loSession.setOtherParams("VIEWERPREFERENCES","HIDEMENUBAR",.F.) <font></font>

9 m.loSession.setOtherParams("VIEWERPREFERENCES","HIDEWINDOWUI",.F.) <font></font>

10 m.loSession.setOtherParams("VIEWERPREFERENCES","FITWINDOW",.F.) <font></font>

11 m.loSession.setOtherParams("VIEWERPREFERENCES","CENTERWINDOW",.T.) <font></font>

12 m.loSession.setOtherParams("VIEWERPREFERENCES","DISPLAYDOCTITLE",.T.) <font></font>

13 m.loSession.setOtherParams("VIEWERPREFERENCES","NONFULLSCREENPAGEMODE","UseOC") && U

14 m.loSession.setOtherParams("VIEWERPREFERENCES","DIRECTION","L2R") && L2R,R2L<font></

15 m.loSession.setOtherParams("VIEWERPREFERENCES","PRINTSCALING","AppDefault") && AppDe

16 m.loSession.setOtherParams("VIEWERPREFERENCES","DUPLEX","Simplex") && Simplex, Duple

17 m.loSession.setOtherParams("VIEWERPREFERENCES","PICKTRAYBYPDFSIZE",.T.) <font></font

18 m.loSession.setOtherParams("VIEWERPREFERENCES","PRINTPAGERANGE","0 0 1 1") && 0 1 (1

19 m.loSession.setOtherParams("VIEWERPREFERENCES","NUMCOPIES",2)<font></font>

20 ENDIF

PDF version
(since XFRX 16.1)

You can set PDF version. Default version is 1.6 for XFRX 16.0, 1.7 for XFRX 16.1. Change PDF
version must be first after calls setParams() method.

m.loSession.setOtherParams("VERSION","1.5")

TAB size
(since XFRX 17.0.0)

Specifies the width, in characters, of a tab. Default value is 4.

m.loSession.setOtherParams("TABSIZE",3)
Attachments
(since XFRX 17.3)

PDF 1.3 supports attachments. PDF/A-1 doesn't support attachments. PDF/A-2 does
support attachments - only PDF file (PDF/A). PDF/A-3 does support attachments - any file.
For add atttchment calls method addAttachment.

Add attachment example - pdf


LOCAL m.loSession, m.lnRetVal <font></font>

m.loSession=EVALUATE([xfrx("XFRX#INIT")]) <font></font>

m.lnRetVal = m.loSession.SetParams("some.pdf",,,,,,"PDF")<font></font>

IF m.lnRetVal = 0<font></font>

loSession.addAttachment("some.pdf",.T.,"","appliaction/pdf","Alternative")<font></font

ENDIF

Add attachment example - xml (ZUGFeRD - http://www.ferd-net.de/)


LOCAL m.loSession, m.lnRetVal <font></font>

m.loSession=EVALUATE([xfrx("XFRX#INIT")]) <font></font>

m.lnRetVal = m.loSession.SetParams("some.pdf",,,,,,"PDF")m.loSession.setpdfa(.T., "3B")IF

loFile=loSession.addAttachment("ZUGFeRD-invoice.xml",.T.,"Rechnungsdaten im ZUGFeRD-XM

loFile.CreateZUGFeRDMetadata("BASIC","INVOICE","1.0") && if you use PDFA<font></font>

ENDIF

Add attachment example - isdoc (ISDOC -


http://www.isdoc.org/index.php?l=2)
LOCAL m.loSession, m.lnRetVal <font></font>

m.loSession=EVALUATE([xfrx("XFRX#INIT")]) <font></font>

m.lnRetVal = loSession.SetParams("some.pdf",,,,,,"PDF")m.loSession.setpdfa(.T., "3B")IF m

loFile=loSession.addAttachment("Faktura.isdoc",.T.,"ISDOC - formát elektronické faktur

loFile.CreateISDOCMetadata("INVOICE","5.2") && if you use PDFA<font></font>

ENDIF
 Sin etiquetas

Notificaciones de banderas
Documentación XFRX

Páginas

Guía del desarrollador

Funciones específicas de Word

Usuario desconocido (mst)

Modificado por última vez sep 26, 2017 por martinajindrova

XFRX 16.1
Miembro oDocument del objeto de sesión XFRX está en desuso. Puede usar miembro
oDocumentWriter.
XFRX 17.3
Miembro oDocument del objeto de sesión XFRX eliminado.

Protección de contraseña
Este párrafo se aplica tanto a VFP 9 como a VFP 8. El método setPasswords se implementa
tanto en las clases XFRXListener como XFRXSession.

 Protección de contraseña
 División de documentos de Word
 Formato de documento de Word
 Salidas DOCX y FDOCX
 Generación de salida nativa
 Visión de conjunto
 Uso
 Carpeta del desarrollador para NATIVE_DOCX / NATIVE_FDOCX / DOC / FDOC
 Incrustación de fuente

Para agregar contraseñas a documentos de Word, llame al método SetPasswords () antes


de llamar a ProcessReport ():
loSession.setPasswords(tcReadPassword, tcWritePassword, tlRequirePassword)

Puede omitir tcReadPassword o tcWritePassword. tlRequirePassword es opcional (el valor


predeterminado es .F.). Si se establece en .T., Word pedirá la contraseña incluso cuando el
documento se abra por primera vez después de la generación (si el parámetro
tlNotOpenViewer del método SetParams está establecido en .F.).

División de documentos de Word


Este párrafo se aplica solo a VFP 8.

Cuando los documentos generados son muy largos, la aplicación de Word tiene un
problema con la conversión; lleva mucho tiempo convertirla. Para evitar este problema,
XFRX puede dividir el documento generado en documentos más pequeños. Para configurar
esto, llame al método SplitDocument () antes de llamar a ProcessReport ():

m.loSession.SplitDocument(tnPages)

tnPagesp es el número de páginas que tendrían cada uno de los documentos resultantes.

Formato de documento de Word


Exportar al formato DOC utilizando Word 2010 o 2013 guardará el documento como
documento DOCX. Desafortunadamente, esta fue la única forma de resolver el
congelamiento intermitente de Word 2010, causado por cambios en el soporte de salida
HTML en estas versiones. Puede cambiar este comportamiento llamando al método
SetOtherParams () con "ALLWAYS_DOC".

Ejemplo:

m.loSession.setOtherParams("ALLWAYS_DOC",.T.)

Salidas DOCX y FDOCX


Los nuevos tipos de salida ejecutan la conversión estándar (DOCX) o el diseño de flujo
(FDOCX) y generan documentos de Word con la extensión DOCX (el formato
OpenXML). Este tipo de salida requiere que Word 2007 o posterior se instale en la
computadora.
Using setPassword() method cause save output to Word97-2003 format. It's MS Word's
behavior.

Native output generation


Since version 14.7, XFRX can natively generate DOCX (OpenXML) documents. The Word
application is not required and does not need to be installed to generate the
documents both in the absolute and flow layout. The generated documents are equivalent
to the standard word documents generated by XFRX and can be opened in Word versions
2003 (with a plugin), 2007 and newer. The output type codes are "NATIVE_DOCX"
(standard) and "NATIVE_FDOCX" (flow layout).

Overview
Código de tipo Diseño Diseño Formato Versión de La versión de
de salida estándar de flujo de salida Word Word es
necesaria necesaria
para generar para ver

DOC yes no DOC 2000+ 2000+

FDOC no yes DOC 2000+ 2000+

NATIVE_DOCX yes no DOCX none 2003+

NATIVE_FDOCX no yes DOCX none 2003+

Usage

All you need to do is to specify NATIVE_DOCX or NATIVE_FDOCX. This is a pure VFP


implementation so no other setup is needed, except MD5.FLL library MD5.FLL, which is a
free library implementing the MD5 algorithm. MD5.FLL was written by Duke Lotherington,
Visual Records Consulting, 3944 Murphy Canyon Rd, San Diego CA
92123, duke@visualrecords.com (http://www.leafe.com/dls/vfp)
MD5.fll is unnecessary since XFRX 16.1.0.

Pre-VFP 9.0 mode

1 LOCAL m.loSession, m.lnRetVal<font></font>

2 m.loSession= xfrx("XFRX#INIT")<font></font>

3 m.lnRetVal = m.loSession.SetParams("output.docx",,,,,,"NATIVE_FDOCX")<font></font>

4 IF m.lnRetVal = 0<font></font>

5 m.loSession.ProcessReport("report1")<font></font>

6 m.loSession.finalize()<font></font>
7 ENDIF

VFP 9.0 mode

1 LOCAL m.loXFRX, m.lnRetVal<font></font>

2 m.loXFRX = XFRX("XFRX#LISTENER")<font></font>

3 m.lnRetval = m.loXFRX.SetParams("output.docx",,,,,,"NATIVE_FDOCX")<font></font>

4 IF m.lnRetval = 0<font></font>

5 REPORT FORM report1 OBJECT m.loXFRX<font></font>

6 ENDIF

Developer Folder for


NATIVE_DOCX/NATIVE_FDOCX/DOC/FDOC
Call SetOtherParams method with "DEVELOP" or "DEVELOPFOLDER" to define output folder
for source files and folders of OpenXML.

Example:
m.loSession.setOtherParams("DEVELOP",.T.)<font></font>

m.loSession.setOtherParams("DEVELOPFOLDER","[FOLDER\]DEVELOPFOLDER")

Font Embedding
You can call method setEmbeddingType() to embed font into the word document.

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX

Páginas

Guía del desarrollador


Funciones específicas de RTF

martinajindrova

30 de junio de 2017

Compatibilidad con LibreOffice


Puede activar la compatibilidad de Libre Office para convertir wmf / emf a png. (XFRF
17.1.3)

m.loSession.SetOtherParams("LO_COMPATIBILITY",.T.)

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX

Páginas

Guía del desarrollador


metadata.attachments

Opción de documento de diseño de flujo

Usuario desconocido (mst)

Modificado por última vez ene 08, 2017 por martinajindrova

Este capítulo enlaza con varios documentos de muestra en nuestro sitio web. Si está
leyendo una versión electrónica de este documento, simplemente haga clic en los
hipervínculos para descargarlos. Si está leyendo una versión impresa, aquí están las
direcciones:
http://www.eqeus.com/xfrxmanual/example1.doc

http://www.eqeus.com/xfrxmanual/example2.doc

http://www.eqeus.com/xfrxmanual/example3.doc

http://www.eqeus.com/xfrxmanual/example4.doc

 Ejecutando la conversión
 Cómo funciona
 Ejemplo 1
 Ejemplo 2
 Encabezados y pies de página
 Deficiencias

Los documentos de Word, RTF, OpenOffice Writer y OpenOffice Calc tienen dos opciones
de salida: "Diseño de posición absoluta" y "Diseño de flujo". Los documentos generados a
menudo se ven iguales, pero los algoritmos detrás de estas opciones son completamente
diferentes. El diseño de posición absoluta siempre se parece al informe original, pero es
difícil de editar y de mayor tamaño. El diseño de flujo no siempre se ve exactamente igual,
pero es un documento de Word 'real' - fácilmente editable, con estilos, encabezados y pies
de página, párrafos y tabulaciones, que también es más corto en tamaño y más rápido de
abrir.

Cada una de las opciones de salida tiene su propio código del parámetro que se envía en el
7 º parámetro (targetType) del método setParams:
Tipo de Documento tipo de objetivo
parámetro

Documento de Word con diseño absoluto DOC

Documento de Word con diseño de flujo FDOC

Documento RTF con diseño absoluto RTF

Documento RTF con diseño de flujo FRTF

Documento de OpenOffice Writer con diseño absoluto ODT

Documento de OpenOffice Writer con diseño de flujo calzado

Hoja de cálculo de OpenOffice Calc con diseño absoluto SAO

Hoja de cálculo de OpenOffice Calc con diseño de flujo PIE

Este capítulo describe la opción de salida de diseño de flujo: cómo funciona y cómo difiere
del diseño de posición absoluta.
Ejecutando la conversión
La opción Palabra de diseño de flujo se implementa como un nuevo tipo de destino, así
que simplemente envíe "FDOC" como el parámetro tcTarget del método SetParams ().

Cómo funciona
La lógica es similar a la forma en que funciona la opción de texto sin formato. Durante el
proceso de generación, XFRX toma cada sección, una por una, e intenta dividirla en líneas
individuales. Luego, cada línea se agrega a la salida, respetando la posición vertical de la
línea en el papel y las posiciones horizontales de los objetos individuales. Los objetos
verticalmente desalineados se mueven hacia abajo a la línea de base más cercana.

Ejemplo 1

La definición de este informe:

se dividirá en tres líneas y el documento resultante se verá así:

(download example1.doc)

As you can see all objects are aligned to the same baseline and the horizontal position is
set by a tab stop (left, right or center, depending on the field’s alignment). If you add any
graphics or pictures, these are added to the document and linked to the paragraph it starts
at, so if you add contents above the graphics, it will move down along with the
corresponding paragraph.

If XFRX cannot create distinct lines or if the text objects overlap one another, the
overlapping text object is placed at the exact position as a textbox.
Example 2

>>
convert
s to >>

(download example2.doc)

Page headers and footers


Page headers and footers defined in the report are converted to page headers and footers
in the Word document, so for example, if you add a line in the middle of a page, the page
footer will not move to the next page header, but stay in place.

Deficiencies
Even though most reports are converted without problems, there are certain scenarios
when the output wouldn’t look as expected. As stated above, all fields in one line are
aligned to the same baseline. In some reports, this can cause a problem, for example:

>> converts to >>

(download example3.doc)

No solo está el texto "dos" abajo, también está impreso sobre el "tres" uno ("tres" está
colocado demasiado alto para estar en una línea separada, por lo que se convierte como un
cuadro de texto). En este caso, es posible que desee decirle al motor que los objetos "dos"
y "tres" siempre deben tratarse como cuadros de texto de posición absoluta.

Para ello, agregue "#UR POSITIONABSOLUTE" como comentario de estos campos:


Y el documento de Word resultante se generaría como:

 Sin etiquetas

Notificaciones de banderas

Documentación XFRX
/
Páginas
/
Guía del desarrollador

Generando documentos XPS

Usuario desconocido (mst)


Modificado por última vez dic 27, 2014 por martinajindrova

Para generar un documento XPS, use "XPS" como el parámetro targetType del método
SetParams.

El XPS [XML Paper Specification] es una nueva especificación de documento desarrollada


por Microsoft. Puede encontrar más información sobre XPS en:

 http://www.microsoft.com/whdc/xps/default.mspx
 http://en.wikipedia.org/wiki/XML_Paper_Specification
Como el formato XPS solo admite fuentes TTF, todas las fuentes que no sean TTF serán
reemplazadas por la fuente Arial.

No hay requisitos especiales con respecto a la configuración de la plataforma,


especialmente .NET Framework no es necesario. XFRX genera el documento por sí mismo
desde cero, por lo que todo lo que necesita es VFP y XFRX.

Para poder obtener una vista previa del documento XPS, necesita un visor de documentos
XPS. Si está ejecutando Windows Vista, ya tiene uno, ya que está incluido con .NET
Framework 3.0. Para Windows XP y Windows Server 2003 puede descargar el visor
desde http://www.microsoft.com/whdc/xps/viewxps.mspx .

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX

Páginas

Guía del desarrollador

Generando documentos de OpenOffice (ODF)

Usuario desconocido (mst)

Modificado por última vez mar 22, 2017 por martinajindrova

El formato de documento de OpenOffice Writer es compatible desde XFRX versión


11.2. Desde 12.0, las salidas Writer y Calc son compatibles, y ambas pueden generarse
utilizando formatos de diseño absolutos o de flujo (consulte el capítulo Opción de
documento de diseño de flujo en la página 28 para obtener más información sobre las
opciones de diseño de flujo).
OpenOffice utiliza el formato de documento abierto (ODF) OASIS para aplicaciones de
Office, que también es compatible con una variedad de otras aplicaciones de oficina,
incluidas StarOffice, KOffice e IBM Workplace.

XFRX genera los formatos de archivo de forma nativa, por lo que OpenOffice no tiene que
instalarse en la computadora donde se genera el documento.

Puede encontrar más información sobre el Formato de documento abierto de OASIS en

http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=office.

Se puede encontrar más información sobre OpenOffice en http://www.openoffice.org .

Para generar el documento OpenOffice, utilizar los siguientes códigos como el


7 º parámetro (targetType) del método setParams:
Tipo de Documento tipo de objetivo
valor

Documento de OpenOffice Writer con diseño absoluto ODT

Documento de OpenOffice Writer con diseño de flujo calzado

Hoja de cálculo de OpenOffice Calc con diseño absoluto SAO

Hoja de cálculo de OpenOffice Calc con diseño de flujo PIE

Hoja de cálculo de OpenOffice Calc con diseño de flujo - Normal PFODS

 Cómo invocar la salida ODT / ODS


 Carpeta del desarrollador
 Campos de información
 Idioma / Especificación del país
 ODS / FODS / PFODS otros parámetros
 ODT / FODT otros parámetros

Cómo invocar la salida ODT / ODS


Es más o menos lo mismo que con los otros objetivos:
1 LOCAL m.loSession, m.lnRetval<font></font>

2 m.loSession= xfrx("XFRX#INIT")<font></font>

3 m.loSession.initLog()<font></font>

4 m.lnRetVal = m.loSession.SetParams("output.odt",,,,,,"ODT")<font></font>

5 IF m.lnRetVal = 0<font></font>

6 m.loSession.ProcessReport("report1")<font></font>

7 m.loSession.finalize()<font></font>
8 ENDIF

Carpeta del desarrollador


Llame al método SetOtherParams con "DEVELOP" o "DEVELOPFOLDER" para definir la
carpeta de salida para los archivos fuente y las carpetas de ODF.

Ejemplo:
m.loSession.setOtherParams("DEVELOP",.T.)<font></font>

m.loSession.setOtherParams("DEVELOPFOLDER","[FOLDER\]DEVELOPFOLDER")

Campos de información
You can put one to four custom fields into ODF file. The keywords are INFO1,
INFO1_NAME, INFO2, INFO2_NAME, INFO3, INFO3_NAME, INFO4, INFO4_NAME.
Call SetOtherParams method with "INFO1" and "INFO1_NAME" to define INFO1 value and
name.

Example:
m.loSession.setOtherParams("INFO1", "AnyValue")<font></font>

m.loSession.setOtherParams("INFO1_NAME","Field 1")

Language/Country specification
XFRX get Language/Country specification from OS locale informations, but you can call
SetOtherParams method with "FO_LANGUAGE" and "FO_COUNTRY" to define own values.

Example:
m.loSession.setOtherParams("FO:LANGUAGE", "CS")<font></font>

m.loSession.setOtherParams("FO:COUNTRY", "CZ")

ODS/FODS/PFODS other parameters


The parameters DISPLAY_GRID_LINES, SHEET_PER_PAGE, NEXT_SHEET_NAME,
NEXT_SHEET_NAME_EXPR, LEAVE_FULL_FIELD_CONTENT,
ADDPAGENUMBERTOSHEETDISPLAYNAME, SHEETPAGEBREAK are same such as for
XLS/XLSPLAIN.
ODT/FODT other parameters
The parameters NEXT_PAGE_NAME, NEXT_PAGE_NAME_EXPR are euqal
to NEXT_SHEET_NAME, NEXT_SHEET_NAME_EXPR.

 Sin etiquetas
Notificaciones de banderas
Documentación XFRX

Páginas

Guía del desarrollador

Funciones específicas de HTML

Usuario desconocido (mst)

Modificado por última vez sep 26, 2017 por martinajindrova

XFRX 16.1
Miembro oDocument del objeto de sesión XFRX está en desuso. Puede usar miembro
oDocumentWriter.
XFRX 17.3
Miembro oDocument del objeto de sesión XFRX eliminado.

Ajuste de tamaño de página HTML


Este párrafo se aplica tanto a VFP 9 como a VFP 8. El método ShrinkHeight se implementa
tanto en XFRXListener como en la clase XFRXSession.

Al generar documentos HTML, XFRX hace que la página sea un poco más corta por defecto
(en 1,65 pulgadas). Esto es para suprimir la parte inferior de una página para ajustar a una
nueva página cuando se imprime desde Internet Explorer. Se agregan dos líneas a la página
impresa, en la parte superior e inferior de la página, como encabezado y pie de página. Al
llamar al método ShrinkHeight (), puede suprimir este comportamiento llamando al:

ShrinkHeight(0)

o establezca su propio valor por el cual se reducirá la página. La unidad es Inch * 10000, por
lo que para hacer que la página sea más corta por 2 pulgadas, llame

ShrinkHeight(20000)

El valor enviado por el método ShrinkHeight () se aplica a todos los tipos de salida, no solo
a HTML.

Ver también: tamaño de página definido por el usuario


Salida simple
Este tipo de salida actualmente no admite imágenes
Esta función requiere .NET framework 3.5. El HTML es producido por una aplicación de
consola .NET que lee los archivos XML generados por XFRX y los oculta. Esta aplicación de
consola (xfrxt.exe) debe distribuirse junto con la aplicación.

Este tipo de salida funciona de manera similar al tipo de salida simple de Excel: los objetos
en la página se alinean en una cuadrícula, cada objeto va a una celda separada, y luego la
salida se presenta como una tabla. Las líneas y rectángulos se muestran como bordes de
celda de tabla. Las fuentes, colores y tamaños se definen a través de CSS.

Esta solución produce una salida HTML limpia, rápida y compatible con varios navegadores,
adecuada para páginas web o correos electrónicos. (Haga clic aquí para ver un documento
de muestra: Sample1 )

El resultado se invoca mediante el parámetro de tipo de salida "HTMLPLAIN":


1 LOCAL m.loSession, m.lnRetVal<font></font>

2 m.loSession = xfrx("XFRX#INIT")<font></font>

3 m.lnRetVal = m.loSession.SetParams("output.html",,,,,,"HTMLPLAIN")<font></font>

4 IF m.lnRetVal = 0<font></font>

5 m.loSession.ProcessReport("report1")<font></font>

6 m.loSession.finalize()<font></font>

7 ENDIF

By default, the output is a complete self-contained HTML file. You can also use the
HTML_NOSTYLES option to process just the inner HTML, without CSS styles, head or body
tags:
1 LOCAL m.loSession, m.lnRetVal<font></font>

2 m.loSession = xfrx("XFRX#INIT")<font></font>

3 m.lnRetVal = m.loSession.SetParams("output.html",,,,,,"HTMLPLAIN")<font></font>

4 IF m.lnRetVal = 0<font></font>

5 m.loSession.SetOtherParams("HTML_NOSTYLES", .T.)<font></font>

6 m.loSession.ProcessReport("report1")<font></font>

7 m.loSession.finalize()<font></font>

8 ENDIF
Autoconvert EMF/TIFF to PNG
Because some html previewer doesn't support EMF or TIFF image, you can enable feature
for converting EMF/TIFF to PNG. (XFRX 15.5)

m.loSession.SetOtherParams("CONVERTEMF_TIFFTOPNG",.T.)

Inline images
Images data are in html output file since XFRX 16.0. If you want attain prior behavior, you
can call method SetOtherParams().

m.loSession.SetOtherParams("INLINEIMAGES",.F.)

Gmail compatibility
Because HTML viewer in Gmail is very simply than can not show complex which generate
XFRX.
You can turn on Gmail compatibility. (XFRF 17.0.0)

m.loSession.SetOtherParams("GMAILCompatibility",.T.)

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX

Páginas

Guía del desarrollador


metadata.attachments

Funciones específicas de Excel


Usuario desconocido (mst)

Modificado por última vez feb 17, 2018 por martinajindrova

Notas generales
La salida al formato de Excel es similar a los formatos de diseño de flujo. Los otros formatos
usan cuadros de texto posicionados para cada etiqueta de informe o cuadro de texto, que
contiene el resultado de texto generado. La salida XLS, por otro lado, coloca el texto
generado directamente en las celdas de la hoja de Excel y establece la altura de las filas y el
ancho de las columnas para lograr el diseño deseado. Las líneas y rectángulos también se
agregan como bordes de celdas, en lugar de gráficos sobre la hoja.

Hay muchas ventajas en este enfoque: los documentos generados son más pequeños y
mucho más fáciles de modificar: todos los campos numéricos se pueden usar en los
cálculos, no hay problema para agregar filas o columnas, cambiar los atributos de las
celdas, etc.

Sin embargo, también hay desventajas: los campos no se pueden superponer, así que algo
como esto:

en el informe no se convertirá correctamente y, como cada celda de Excel tiene un margen


interno que no se puede suprimir, es posible que algunos campos tengan que ampliarse un
poco para dar cabida a todo el contenido.

Con XFRX, los informes probablemente necesiten algunos ajustes, especialmente los
complicados, pero el resultado será un documento normal de Excel, como si alguien lo
hubiera creado manualmente.

 Notas generales
 Cómo funciona
 Manejo de saltos de página
 Generando hoja por página
 Generación de hojas por grupo de inicio-cada-grupo-en-una-nueva-página
 Agregar salto de página en la hoja
 Definición de nombres de hojas
 Ocultar la cuadrícula de Excel
 Dejar el contenido de los campos en celdas de Excel
 Cómo invocar la salida XLS
 Ajuste de células XLS
 Cómo lograr los mejores resultados
 Formato de imagen de campo numérico en Excel
 Salida simple (XLSPLAIN)
 Salida de MS Excel 2007 (NATIVE_FXLSX / NATIVE_PFXLSX)
 Carpeta del desarrollador para NATIVE_FXLSX / NATIVE_FXLSX
Cómo funciona
XFRX hace uso de la posibilidad de combinar más celdas de Excel juntas. Dondequiera que
una etiqueta o cuadro de texto debe comenzar o terminar, XFRX crea una fila y una
columna. Para lograr los mejores resultados, es bueno alinear las etiquetas y los cuadros de
texto tanto vertical como horizontalmente, lo que da como resultado un documento más
claro con menos filas y columnas. (Por favor, vea más sobre esto a continuación, en ¿Cómo
lograr los mejores resultados? Párrafo).
Manejo de saltos de página
De forma predeterminada, XFRX no divide las páginas en la salida XLS de la misma manera
que en otros formatos de salida: se ejecuta en modo plano, lo que significa que la salida es
una hoja, el tiempo que necesita, con un encabezado de página en la parte superior y un
pie de página en la parte inferior.
XFRX 17.0
Este comportamiento cambia desde XFRX 17.0.
El encabezado / pie de página de generación de XLS de salida se encuentra en la "página"
de informe en la hoja.
La salida XLSPLAIN genera un encabezado de página en la parte superior y un pie de
página en la parte inferior.

Si necesita un comportamiento antiguo para XLS, puede establecer las propiedades


"internas" directamente después de llamar al método SetParams ():

 XFRX # INIT

loXFRX.odocumentWriter.cDisplayHeader = "1" && 1 - 1st page, "N" -


no/never, "Y" - yes/always
loXFRX.odocumentWriter.cDisplayFooter = "1" && 1 - last page page,
"N" - no/never, "Y" - yes/always

 XFRX # LISTENER

loXFRX.oxfSession.odocumentWriter.cDisplayHeader = "1" && 1 - 1st


page, "N" - no/never, "Y" - yes/always
loXFRX.oxfSession.odocumentWriter.cDisplayFooter = "1" && 1 - last
page page, "N" - no/never, "Y" - yes/always

Si se procesan más informes, cada informe crea una hoja en el documento de salida.

Hay dos opciones que puede usar para modificar la forma en que se manejan los saltos de
página:

Generando hoja por página

Para habilitar esta opción, llame al método SetOtherParams para establecer el parámetro
"SHEET_PER_PAGE" en .T .:

m.loSession.SetOtherParams("SHEET_PER_PAGE",.T.)
Esto desactivará el modo "simple" y los saltos de página se corresponderán con otras
opciones de salida. Cada página se generará como una hoja nueva en el documento de
Excel.

Consulte más información sobre el método SetOtherParams en Métodos comunes en


XFRXListener y referencia de clases XFRXSession

Generación de hojas por grupo de inicio-cada-grupo-en-una-nueva-página

Para habilitar esta opción, llame al método SetOtherParams para establecer el parámetro
"SHEET_PER_NP_GROUP" en .T .:

m.loSession.SetOtherParams("SHEET_PER_NP_GROUP",.T.)

Esta opción combina el modo simple y el modo hoja por página. El informe se ejecuta en
modo simple, pero se genera una nueva hoja para cada grupo de informes con el indicador
"Iniciar cada grupo en una nueva página" configurado en .T.
El parámetro SHEET_PER_NP_GROUP funciona para XFRX # INIT con salida directa
solamente.

Agregar salto de página en la hoja

Estas opciones agregan saltos de página en hojas por páginas en el informe para XFRX #
INIT + TransformReport () y XFRX # LISTENER (desde XFRX 15.7).

m.loSession.SetOtherParams("SHEETPAGEBREAK",.T.)

Definición de nombres de hojas


Hay dos formas de definir los nombres de las hojas. Puede definir un texto estático
mediante el parámetro NEXT_SHEET_NAME, o puede usar el parámetro
NEXT_SHEET_NAME_EXPR para definir una expresión, que se evaluará en la parte inferior de
cada hoja y el resultado se usará como el nuevo nombre de la hoja. La última opción es útil
si se generan más hojas durante la ejecución de un informe. El parámetro
ADDPAGENUMBERTOSHEETDISPLAYNAME (desde XFRX 15.6) puede suprimir el número de
página en el nombre de la hoja.

Consulte más información sobre el método SetOtherParams en Métodos comunes en


XFRXListener y referencia de clases XFRXSession
Ocultar la cuadrícula de Excel
La grilla de fondo es visible por defecto. Para ocultarlo, establezca el parámetro
DISPLAY_GRID_LINES en falso:

m.loSession.SetOtherParams("DISPLAY_GRID_LINES",.F.)
Dejar el contenido de los campos en celdas de Excel
Por defecto, el contenido de los campos no estirables se corta de acuerdo con el tamaño
del campo, pero opcionalmente puede dejar el contenido completo del campo en la celda
de Excel. Para habilitar esta opción, configure el parámetro LEAVE_FULL_FIELD_CONTENT
como .T .:

m.loSession.SetOtherParams("LEAVE_FULL_FIELD_CONTENT",.T.)

Cómo invocar la salida XLS


Es más o menos lo mismo que con los otros objetivos:
1 LOCAL m.loSession, m.lnRetval<font></font>

2 m.loSession= xfrx("XFRX#INIT")<font></font>

3 m.loSession.initLog()<font></font>

4 m.lnRetVal = m.loSession.SetParams("output.xls",,,,,,"XLS")<font></font>

5 IF m.lnRetVal = 0<font></font>

6 m.loSession.SetOtherParams("NEXT_SHEET_NAME","first") && the name of the sheet, opti

7 m.loSession.ProcessReport("report1")<font></font>

8 m.loSession.SetOtherParams("NEXT_SHEET_NAME","second")<font></font>

9 m.loSession.ProcessReport("report2")<font></font>

10 m.loSession.finalize()<font></font>

11 ENDIF

Este ejemplo crea un documento de dos hojas. Como puede ver, el método
SetOtherParams () se puede usar para definir los nombres de las hojas. Si no se llama, los
nombres predeterminados son "hoja1", "hoja2", etc.

_ADJUSTMENT",1000) && default value = 180

Ajuste de células XLS


Cuando se genera el documento XLS, se ajustan las coordenadas verticales y horizontales
de los objetos; si la diferencia entre dos coordenadas es menor que un cierto valor, las
coordenadas están "alineadas". Este enfoque reduce significativamente la cantidad de filas
y columnas en el documento generado.

Es posible definir esta diferencia mínima. Cuanto mayor sea el número, menor será el
número de filas / columnas generadas, pero si el número es demasiado grande, los campos
podrían superponerse y podrían omitirse.

Llame al método SetOtherParams con "HORIZONAL_ADJUSTMENT" o


"VERTICAL_ADJUSTMENT" para definir la mínima diferencia horizontal y / o vertical.
Ejemplo:
m.loSession.SetOtherParams("HORIZONTAL_ADJUSTMENT",1000) && default value = 76<font></fon

m.loSession.SetOtherParams("VERTICAL_ADJUSTMENT",1000) && default value = 180

Cómo lograr los mejores resultados

1. Alinea los campos.


Eche un vistazo al siguiente documento: ( http://www.eqeus.com/xls1.xls ) Las
columnas B y C son casi invisibles (si las amplía, puede ver que los nombres de los clientes
comienzan en la columna B, "Cliente La lista "comienza en la columna C y" Cliente
"comienza en la columna D, que es algo que no observamos en el informe normal pero que
tiene un mejor resultado en la salida XLS si los campos están alineados), la fila 4 es muy
estrecha y entre cada cliente, se agrega una fila muy delgada, también.

"Arreglar" esto es muy simple: alineamos las etiquetas "Cliente", "Lista de clientes" y el
cuadro de texto del cliente, movimos la línea debajo del encabezado un poco más arriba
para que caiga en las celdas debajo del "Cliente" y "Total" subtítulos
El documento resultante se ve mucho mejor: ( http://www.eqeus.com/xls2.xls )

2. Problema con el ancho de la etiqueta


El tamaño de una etiqueta no se puede modificar en el diseñador del informe; siempre
toma el tamaño del texto ingresado. Sin embargo, como mencionamos anteriormente, las
celdas de Excel tienen pocos márgenes adentro, así que si creamos una celda tan ancha
como la etiqueta y ponemos el texto en ella, el texto completo no cabría, ¡el último o los
dos últimos desaparecen!
XFRX se encarga de esto y amplía un poco la celda, pero esto puede traer otro problema: si
hay otra etiqueta o un campo de texto cerca del borde derecho de la etiqueta, aumentar el
ancho puede resultar en la superposición de la otra etiqueta o el texto campo, resultado de
lo cual sería que una de las dos etiquetas desaparece (puede haber una sola cosa dentro de
la celda). Por lo tanto, tenga cuidado con esto y asegúrese de que haya espacio suficiente
entre las etiquetas.

3. Anchos de etiquetas variables


Como el ancho de la etiqueta depende de su contenido, no podemos alinear los bordes
derecho e izquierdo de más etiquetas y, en ocasiones, es mejor reemplazar las etiquetas
con cuadros de texto. Por ejemplo, si hay muchas etiquetas en una columna, todas se
alinean así: Al crear el documento de Excel, XFRX creará una columna para el borde
derecho de cada etiqueta: Sin embargo, si las etiquetas se convierten a cuadros de texto,
podemos alinear ellos: Y el resultado podría verse mejor: en realidad es bastante fácil
convertir todas las etiquetas en cuadros de texto, simplemente abra el informe en FoxPro y
reemplace el tipo de objeto:
USE report.frx<font></font>

REPLACE objtype WITH 8 ALL FOR objtype = 5<font></font>

USE

4. XFRX 17.3.1
5. XFRX 17.3.1 tiene mejor soporte para objetos superpuestos. El resultado es muy bonito,
pero la generación es lenta que en XFRX 17.3.0.
Es posible que apague el soporte para objetos superpuestos en XFRX 18.0.

loSession.SetOtherParams("OVERLLAPED_OBJECTS",.F.)

6.
Formato de imagen de campo numérico en Excel
La definición de formato de celdas numéricas en Excel es diferente de la sintaxis de formato
utilizada en Foxpro. XFRX ahora puede convertir las definiciones de formato simple y
permite definiciones de formato de tipo Excel implícitas y / o explícitas definidas por el
usuario.
En Visual Foxpro, el campo numérico se convierte a su representación de texto en función
de una definición de formato explícito (campo de formato en la definición de expresión del
informe) o los lugares decimales del campo y la configuración SET DECIMAL.
No olvide establecer el valor de la propiedad CallEvaluateContents en 2 si desea exportar
números como números al usar XFRX # LISTENER:
m.loSession.CallEvaluateContents = 2

Cuando un campo numérico se transforma en una celda de Excel, se utiliza el siguiente


algoritmo:

1. Si hay un formato XLS explícito definido, úselo.

Para definir un formato XLS explícito para un campo numérico, agregue:

#UR XLSF = (expresión)

al comentario del campo.

Ejemplo 1:
#UR XLSF = "General"

El formateo "General" - sin formato especial, el número de decimales está determinado por
el valor del campo

Ejemplo 2:

#UR XLSF = "Estándar"

El formateo "Estándar" - dos lugares decimales, separadores de miles y decimales se usarán


de acuerdo con los valores predeterminados de Excel

Ejemplo 3:

#UR XLSF = "# 0.00"

Dos decimales, sin ceros a la izquierda

Ejemplo 4:

#UR XLSF = "# 0.00; [rojo] # 0.00"

Dos decimales, muestran números negativos en rojo

2. Si el campo contiene una definición de formato, intente buscar el formato en una


tabla de conversión.

Una tabla de conversión se puede llenar mediante programación cuando se ejecuta XFRX,
de modo que los formatos que se usan a menudo y que XFRX no puede convertir
automáticamente no requerirían una definición explícita en cada campo del informe.

Para agregar una entrada a la tabla de conversión, use el método addXLSFormatConversion


de la clase XFRXSession.
Ejemplo 5:

m.loSession.addXLSFormatConversion("@L 999999.99","000000.00")

3. Si el campo contiene una definición de formato y no aparece en la tabla de


conversión, intente convertirlo.

XFRX puede convertir definiciones de formato simples que contienen los siguientes
caracteres: '9', '#', ',', '.' y ''. Por ejemplo, 999,999.99 se convierte en ###, ###. 00.

Si el formato no se puede convertir, utilice el formato numérico XLS implícito, si está


disponible.

Para definir el formato numérico XLS implícito, llame al método setDefaultXLSFormat del
objeto XFRXSession con el formato implícito como parámetro.

Examen plo 6:

m.loSession.setDefaultXLSFormat("General")

4. Si el formato numérico XLS implícito no está definido, XFRX crea una definición de
formato para mostrar el mismo número de decimales que en la salida del informe de
VFP.

Si desea especificar que un determinado campo numérico debe convertirse como una celda
de texto en la hoja de Excel, defina "TEXTO" como su formato numérico XLS explícito:

#UR XLSF = 'TEXTO'

Para obtener un ejemplo en vivo del formato de las celdas de Excel, consulte el informe
"Ejemplo de celdas numéricas formateadas con XLS" en la aplicación de demostración.
Salida simple (XLSPLAIN)

El formato de salida simple de Excel es una salida alternativa a Excel que tiene como
objetivo proporcionar documentos de Excel más limpios y más pequeños. Las siguientes
son las diferencias clave de la salida estándar de Excel:
 Cada informe se genera como una sola hoja con un encabezado de página única en la
parte superior del documento y un pie de página único en la parte inferior. Las secciones
de encabezado / pie de página no se insertan dentro del informe donde las páginas se
romperían normalmente.
 El proceso elimina columnas y filas vacías siempre que sea posible.
 El diseño del informe se ajusta automáticamente para eliminar filas y columnas estrechas.
 HORIZONTAL_ADJUSTMENT y VERTICAL_ADJUSTMENT ya no son necesarios. El sistema
analiza el diseño del informe sobre la marcha e identifica los lugares donde los objetos se
pueden alinear sin afectar el resultado final.

Para invocar el formato simple de Excel, envíe la cadena "XLSPLAIN" como parámetro de
tipo de salida. Ejemplo (VFP 9.0):
1 LOCAL m.loObj, m.lnRetVal<font></font>
2 m.loObj = EVALUATE([XFRX("XFRX#LISTENER")])<font></font>

3 m.lnRetVal = m.loObj.SetParams("test.xls",,,,,,"XLSPLAIN")<font></font>

4 IF m.lnRetVal = 0<font></font>

5 REPORT FORM demoreps\invoices OBJECT m.loObj <font></font>

6 ENDIF

Salida de MS Excel 2007 (NATIVE_FXLSX / NATIVE_PFXLSX)

Para invocar el formato de Excel 2007, envíe cadena "NATIVE_FXLSX" o "NATIVE_PFXLSX"


como parámetro de tipo de salida. Ejemplo (VFP 9.0):
1 LOCAL m.loObj, m.lnRetVal<font></font>

2 m.loObj = EVALUATE([XFRX("XFRX#LISTENER")])<font></font>

3 m.lnRetVal = m.loObj.SetParams("test.xlsx",,,,,,"NATIVE_FXLSX")<font></font>

4 IF m.lnRetVal = 0<font></font>

5 REPORT FORM demoreps\invoices OBJECT m.loObj<font></font>

6 ENDIF

Carpeta del desarrollador para NATIVE_FXLSX / NATIVE_FXLSX


Llame al método SetOtherParams con "DEVELOP" o "DEVELOPFOLDER" para definir la
carpeta de salida para los archivos fuente y las carpetas de OpenXML.

Ejemplo:
m.loSession.setOtherParams("DEVELOP",.T.)<font></font>

m.loSession.setOtherParams("DEVELOPFOLDER","[FOLDER\]DEVELOPFOLDER")

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX

Páginas

Guía del desarrollador


metadata.attachments

Conversión de informes a texto sin formato

Usuario desconocido (mst)

Última modificación hace 07 días , 2017 por martinajindrova

Limitaciones
Las limitaciones se definen por la naturaleza del resultado de texto sin formato:

 El tamaño de fuente y el estilo no se convierten (se admite la alineación de texto)


 Los gráficos en el informe se ignoran
 Los rectángulos y líneas verticales se ignoran, las líneas horizontales se pueden convertir
opcionalmente como una serie de guiones, para obtener más información, consulte la
sección de Líneas horizontales a continuación
 Los objetos superpuestos se eliminan de la salida
 XFRX debe poder dividir los objetos en líneas distintas; de lo contrario, algunos objetos se
eliminarían de la salida

 Limitaciones
 Cómo funciona
 Lineas horizontales
 Configuración de personajes por pulgada
 Caracteres de control
 Texto plano compacto

Cómo funciona
Durante el proceso de generación, XFRX toma cada sección, una por una, e intenta dividirse
en líneas individuales. Luego, cada línea se agrega a la salida, respetando la posición
vertical de la línea en el papel y las posiciones horizontales de los objetos individuales. Los
objetos verticalmente desalineados se mueven hacia abajo a la línea de base más cercana,
por ejemplo:

La definición de este informe:

Se dividirá en tres líneas:


Y el resultado se vería así:
One two three<font></font>

four five<font></font>

six

Si XFRX no podrá crear líneas distintas o si los objetos se superpondrán entre sí, XFRX
intentará eliminar algunos de los objetos.
Por ejemplo:

se convertirá como:
One two<font></font>

Four<font></font>

six

Lineas horizontales
Las líneas horizontales se pueden convertir opcionalmente en una serie de guiones. Por
defecto, esta opción está activada. Para suprimir líneas horizontales, llame al método
setOtherParams del objeto XFRXSession con dos parámetros: "PLAIN_SHOW_LINES" y .F.,
Antes de llamar al método processReport ().

Ejemplo:
1 LOCAL m.loSession, m.lnRetval<font></font>

2 m.loSession= xfrx("XFRX#INIT")<font></font>

3 m.lnRetVal = m.loSession.SetParams("output.txt",,,,,,"PLAIN")<font></font>

4 IF m.lnRetVal = 0<font></font>

5 m.loSession.SetOtherParams("PLAIN_SHOW_LINES", .F.) && do not print horizontal lines<

6 m.loSession.ProcessReport("report.frx")<font></font>

7 m.loSession.finalize()<font></font>

8 ENDIF
Configuración de personajes por pulgada
Para convertir las posiciones absolutas del objeto a posiciones de caracteres, XFRX calcula
el número de caracteres por línea y el número de líneas por página utilizando valores de
carácter por pulgada horizontal y vertical. De forma predeterminada, estos valores son 10
caracteres por pulgada horizontal y 5.2 caracteres por pulgada vertical, lo que resulta en
aproximadamente 80 caracteres x 55 líneas en un papel de tamaño carta.

Es posible que desee cambiar la densidad del carácter (por ejemplo, al usar una fuente
condensada en una impresora de matriz de puntos). Para hacer esto, envíe
PLAIN_CPI_HORIZONTAL o PLAIN_CPI_VERTICAL como el primer parámetro del método
SetOtherParams () y el valor real como el segundo parámetro.
Ejemplo:
1 LOCAL m.loSession, m.lnRetval<font></font>

2 m.loSession= xfrx("XFRX#INIT")<font></font>

3 m.lnRetVal = m.loSession.SetParams("output.txt",,,,,,"PLAIN")<font></font>

4 IF m.lnRetVal = 0<font></font>

5 * changing the character density to 12x6 per sq. inch<font></font>

6 m.loSession.SetOtherParams("PLAIN_CPI_HORIZONTAL",12)<font></font>

7 m.loSession.SetOtherParams("PLAIN_CPI_VERTICAL",8)<font></font>

8 m.loSession.ProcessReport("report.frx")<font></font>

9 m.loSession.finalize()<font></font>

10 ENDIF

Caracteres de control
XFRX 17.2 genera control char FF (alimentación de formulario) después de cada página,
excepto la última página. Puedes desactivar esta función:
1 LOCAL m.loSession, m.lnRetval<font></font>

2 m.loSession= xfrx("XFRX#INIT")<font></font>

3 m.lnRetVal = m.loSession.SetParams("output.txt",,,,,,"PLAIN")<font></font>

4 IF m.lnRetVal = 0<font></font>

5 * don't add control chars<font></font>

6 m.loSession.SetOtherParams("DONTADDCONTROLCHARS",.F.)<font></font>

7 m.loSession.ProcessReport("report.frx")<font></font>
8 m.loSession.finalize()<font></font>

9 ENDIF

Texto plano compacto


El texto plano compacto es texto de salida con modo simple - igual a XLSPLAIN.
1 LOCAL m.loSession, m.lnRetval<font></font>

2 m.loSession= xfrx("XFRX#INIT")<font></font>

3 m.lnRetVal = m.loSession.SetParams("output.txt",,,,,,"CPLAIN")<font></font>

4 IF m.lnRetVal = 0<font></font>

5 m.loSession.ProcessReport("report.frx")<font></font>

6 m.loSession.finalize()<font></font>

7 ENDIF

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX

Páginas

Guía del desarrollador

Usando archivos XFF

Usuario desconocido (mst)

Modificado por última vez mar 22, 2017 por martinajindrova

XFRX puede guardar el informe generado en un archivo binario (archivo XFF). Este archivo
puede usarse en cualquier momento más tarde para:
 Transforme la salida del informe almacenado a cualquiera de los formatos de destino
admitidos por XFRX (PDF, Word, HTML, Excel, TXT, etc.)
 Imprimir la salida del informe almacenado
 Obtenga una vista previa de la salida del informe almacenado en el previsualizador XFRX

También puede modificar el contenido de los archivos XFF existentes o crear nuevos
archivos XFF desde cero, evitando por completo el motor de informes.

 Conversión de informes a archivos XFF


 Inicializando la instancia de la clase XFRX # DRAW
 Creando archivos temporales XFF
 Conversión de archivos XFF a otros formatos de salida
 Imprimir archivos XFF
 Mostrar el diálogo de propiedades de la impresora
 Usar configuraciones de impresora personalizadas al imprimir
 Cambiar la configuración de la impresora personalizada
 Vista previa de archivos XFF

Conversión de informes a archivos XFF


Para crear un archivo XFF, envíe "XFF" como el parámetro de destino y el nombre del
archivo como el parámetro de nombre de salida de SetParams ().

Ejemplo: crear un archivo XFF


Enfoque VFP 8.0

1 LOCAL m.loSession<font></font>

2 m.loSession= xfrx("XFRX#INIT")<font></font>

3 IF m.loSession.SetParams("output.xff",,,,,,"XFF") = 0<font></font>

4 m.loSession.ProcessReport("report")<font></font>

5 m.loSession.finalize()<font></font>

6 ENDIF

VFP 9.0 enfoque

1 LOCAL m.loObj<font></font>

2 m.loObj = xfrx("XFRX#LISTENER")<font></font>

3 iF m.loObj.SetParams("output.xff",,,,,,"XFF") = 0<font></font>

4 REPORT FORM myreport OBJECT m.loObj<font></font>

5 ENDIF

De forma predeterminada, la extensión .XFF (archivo XFrx) se agrega al archivo de salida. El


archivo XFF se almacena internamente como un archivo DBF normal, y debido a que los
campos Memo se utilizan para algunas de sus columnas, se crea otro archivo con el mismo
nombre y la extensión .FPT.

Inicializando la instancia de la clase XFRX # DRAW


(Consulte la referencia de clase XFRX # DRAW ).

Los métodos XFRX no funcionan directamente con el archivo XFF, pero siempre a través de
la clase XFRX # DRAW, que representa un contenedor alrededor del archivo XFF. Para crear
una instancia de esta clase, llame a XFRX con el parámetro "XFRX # DRAW". Luego llame
a openDocument (tcXFFFileName) para adjuntar el objeto XFRX # DRAW a un archivo XFF
existente:
1 LOCAL m.loXFF<font></font>

2 m.loXFF = xfrx("XFRX#DRAW")<font></font>

3 IF m.loXFF.openDocument("output.xff")<font></font>

4 <font></font>

5 ELSE<font></font>

6 ? "XFF file cannot be open"<font></font>

7 ENDIF

También puede crear un archivo XFF vacío llamando al método CreateDocument


(tcXFFFileName) .

Creando archivos temporales XFF


A veces puede querer crear el archivo XFF solo en la memoria, usarlo en su aplicación (por
ejemplo, para obtener una vista previa del informe e imprimir) y soltarlo después.

Para hacer esto, deje el nombre del archivo XFF vacío. En este caso, se creará un archivo XFF
temporal y podrá acceder a su instancia de clase XFRX # DRAW. La forma de acceder a la
instancia difiere en VFP 8.0 y VFP 9.0.

Enfoque VFP 8.0

En VFP 8.0, la instancia es devuelta por el método Finalize () de la clase XFRXSession:


1 LOCAL m.loSession, m.loXFF<font></font>

2 m.loSession= xfrx("XFRX#INIT")<font></font>

3 IF m.loSession.SetParams(,,,,,,"XFF") = 0<font></font>

4 m.loSession.ProcessReport("report")<font></font>

5 m.loXFF = m.loSession.finalize()<font></font>
6 ENDIF<font></font>

7 *<font></font>

8 * now the loXFF instance can be used as if the XFF file was opened<font></font>

9 * with the openDocument method call<font></font>

10 *

VFP 9.0 enfoque

En VFP 9.0, la instancia se almacena en la propiedad oxfDocument de la clase XFRXListener:


1 LOCAL m.loObj, m.loXFF<font></font>

2 m.loObj = xfrx("XFRX#LISTENER")<font></font>

3 <font></font>

4 m.loObj.targetType = "XFF"<font></font>

5 m.loObj.targetFileName = "" && output to a temporary file<font></font>

6 <font></font>

7 REPORT FORM report OBJECT m.loObj<font></font>

8 <font></font>

9 m.loXFF = m.loObj.oxfDocument

Conversión de archivos XFF a otros formatos de salida


Para procesar el informe almacenado, debe inicializar un objeto XFRX # DRAW, vincularlo al
archivo almacenado y enviarlo como un parámetro del método TransformReport de la clase
XFRXListener (en VFP 9.0) o de la clase XFRXSession (en VFP 8.0).

Ejemplo : Transformar un archivo XFF almacenado en un documento PDF.

Enfoque VFP 8:
1 LOCAL m.loSession, m.loXFF, m.lnRetVal<font></font>

2 m.loSession= xfrx("XFRX#INIT")<font></font>

3 m.loXFF = xfrx("XFRX#DRAW")<font></font>

4 IF m.loXFF.openDocument("output.xff")<font></font>

5 m.lnRetVal = m.loSession.SetParams("output.pdf",,,,,,"PDF")<font></font>

6 IF m.lnRetVal = 0<font></font>
7 m.loSession.TransformReport(m.loXFF)<font></font>

8 ENDIF<font></font>

9 ENDIF

Enfoque VFP 9:
1 LOCAL m.loSession, m.loXFF, m.lnRetVal<font></font>

2 m.loObj = xfrx("XFRX#LISTENER")<font></font>

3 m.loXFF = xfrx("XFRX#DRAW")<font></font>

4 IF m.loXFF.openDocument("output.xff")<font></font>

5 m.lnRetVal = m.loObj.SetParams("output.pdf",,,,,,"PDF")<font></font>

6 IF m.lnRetVal = 0<font></font>

7 m.loObj.transformReport(m.loXFF)<font></font>

8 ENDIF<font></font>

9 ENDIF

Imprimir archivos XFF


Para enviar el contenido de un archivo XFF a una impresora, llame al método
printDocument de la instancia de clase XFRX # DRAW. El nombre de la impresora, el
nombre del trabajo y el rango de página pueden enviarse como parámetros.

Consulte la lista de parámetros completa y más detalles en la referencia de clase XFRX #


DRAW .

Ejemplo: Imprimir un archivo XFF

m.loXFF.printDocument(getprinter(),"xfrx – invoice", "1,2,4-10")

Mostrar el diálogo de propiedades de la impresora

Se puede invocar un cuadro de diálogo de propiedades de impresora para una impresora


dada a través de la función _xfPrinterProperties , devolviendo la estructura de propiedades
de la impresora como una cadena.

Esta cadena se puede guardar como preferencia de usuario y enviarse a XFRX como el 5to
parámetro del método PrintDocument al imprimir. Esta funcionalidad es similar a SYS
(1037) introducida en VFP 9.0, con dos diferencias / mejoras:

 Se omiten los cuadros de diálogo Configuración de página y Selección de impresora, lo que


ahorra dos clics a los usuarios y evita confusiones en caso de que la impresora ya haya sido
seleccionada. (Muy a menudo, hay un cuadro de selección de impresora en el formulario
"principal" y un botón para invocar las propiedades de la impresora).
 Esta implementación también funciona en versiones anteriores de Visual FoxPro (desde VFP
5.0)

El método _xfPrinterProperties toma 3 parámetros:

tcPrinterName : el nombre de la impresora

tcTag2 : la estructura DEVMODE que se utilizará de forma predeterminada (si no se


especifica, se usará la configuración predeterminada de la impresora)

tlShowProperties : si se establece en .T., aparecerá el cuadro de diálogo de propiedades de


la impresora. Si se hace clic en el botón Aceptar, se devolverá la estructura DEVMODE con
la configuración de impresora seleccionada. Si se hace clic en el botón Cancelar, se
devolverá una cadena vacía.
Si este parámetro se establece en .F., El cuadro de diálogo no se mostrará y se devolverá la
configuración predeterminada de la impresora.

por ref tnRetVal - El valor indica una problém (desde XFRX 15.7)

 -3 El nombre de la impresora no es válido


 -2 No se puede obtener el tamaño DEVMODE para una impresora específica
 -1 No se puede obtener DEVMODE para la impresora especificada

Ejemplo:
1 SET PROCEDURE TO xfrx ADDITIVE && this is required as the function is implemented insid

2 LOCAL m.lnRetVal, m.lcPrinter, m.lcTag2<font></font>

3 m.lcPrinter = GETPRINTER() && select a printer<font></font>

4 m.lcTag2 = _xfPrinterProperties(m.lcPrinter, "", .F.) && do not show the dialog, return

5 m.lcTag2 = _xfPrinterProperties(m.lcPrinter, m.lcTag2, .T.) && show the dialog box now<

6 m.lcTag2 = _xfPrinterProperties(m.lcPrinter, m.lcTag2, .T.,,@m.lnRetVal) && show the di

7 <font></font>

8 DO CASE<font></font>

9 CASE EMPTY(m.lcTag2) AND m.lnRetVal=0<font></font>

10 && CANCEL button was clicked<font></font>

11 <font></font>

12 CASE EMPTY(m.lcTag2) AND m.lnRetVal<0<font></font>

13 && Some error<font></font>

14 OTHERWISE<font></font>
15 && OK button was clicked<font></font>

16 ENDCASE

Usar configuraciones de impresora personalizadas al imprimir

La estructura de configuración de la impresora se puede enviar


al método PrintDocument como el quinto parámetro. Si este parámetro está vacío, se usa
la configuración predeterminada de la impresora.

La estructura de configuración de la impresora se puede recuperar mediante


el procedimiento _xfPrinterProperties (consulte el capítulo anterior) o, si la configuración
de la impresora se guarda con el informe, se almacena en el campo Etiqueta2 en el primer
registro del archivo FRX.

Ejemplo :

m.loXFF.printDocument(lcPrinter, "job name", 1, 3, lcTag2)

Cambiar la configuración de la impresora personalizada

Desde XFRX 17.0 puede usar la clase _XFRX_DEVMODE_WRITER para cambiar algunas
propiedades de la impresora.

Ejemplo :
1 LOCAL m.loDEVMODE, m.lcTAG2, m.lcPrinter<font></font>

2 m.lcPrinter=SET("PRINTER",2)<font></font>

3 m.lcTAG2 = _xfPrinterProperties(m.lcPrinter, "", .F.) && do not show the dialog, return

4 m.loDEVMODE=CREATEOBJECT("_XFRX_DEVMODE_WRITER",m.lcTAG2) && read DEVMODE structure<font

5 m.loDEVMODE.SetField("DM_ORIENTATION",2) && set some field - orientation landscape<font>

6 =m.loDEVMODE.Write() && recreate DEVMODE structure<font></font>

7 m.lcTAG2 =m.loDEVMODE.cDEVMODE<font></font>

8 m.loXFF.printDocument(m.lcPrinter, "job name", 1, 3, m.lcTAG2)

Vista previa de archivos XFF


Consulte el capítulo Vista previa de los archivos XFF en el capítulo siguiente (capítulo
de previsualización XFRX ) para obtener más información sobre la vista previa de los
archivos XFF en la vista previa del informe avanzado que viene con XFRX.

 Sin etiquetas
Notificaciones de banderas
Documentación XFRX

Páginas

Guía del desarrollador


metadata.attachments

Dibujar objetos personalizados con XFRX #


DRAW

Usuario desconocido (mst)

Modificado por última vez mar 22, 2017 por martinajindrova

La clase XFRX # DRAW descrita en el capítulo anterior también puede modificar el


contenido de los archivos XFF: para agregar gráficos personalizados, texto, páginas nuevas,
hipervínculos y marcadores, tanto durante el proceso de generación de informes como
después de generar el informe.

 Dibujar objetos personalizados a archivos XFF existentes


 Dibujar objetos personalizados durante el proceso de generación de informes
 Scripts enlazados a la página
 Guiones de rectángulo
 Scripts nombrados
 Scripts escritos en el campo de comentario de rectángulo
 Conversión de objetos encuadernados en rectángulo a imágenes
 Envío de parámetros a scripts nombrados
 XFRX # DRAW funciones
 Navegación de documentos XFF
 Agregar páginas
 Unidades de coordenadas
 Información sobre herramientas, hipervínculos y marcadores
Dibujar objetos personalizados a archivos XFF existentes
Para agregar objetos de gráficos personalizados a los archivos XFF, cree una instancia del
objeto XFRX # DRAW como se describe en el capítulo anterior y use las propiedades y
métodos descritos en el capítulo 17.3 Funciones de XFRX # DRAW a continuación. Todos
los cambios se escriben inmediatamente en el archivo XFF y una vez que se libera la
referencia de clase XFRX # DRAW, los cambios se escriben en el disco (u otros medios en
los que se almacena el archivo XFF).

Dibujar objetos personalizados durante el proceso de


generación de informes
Alternativamente, puede crear scripts, que pueden invocarse sobre la marcha, durante el
proceso de generación de informes. Estos scripts se pueden implementar como métodos
de una clase o, en el caso de scripts enlazados a un rectángulo, se pueden ingresar en un
campo de comentario de un objeto rectángulo en el informe.
En XFRX para VFP 9.0, el archivo XFF siempre se usa internamente cuando se procesa un
informe. Sin embargo, en XFRX para VFP 8.0, puede generar los documentos de destino
"directamente", en cuyo caso, sin embargo, no se evaluarán los scripts XFF.
Scripts enlazados a la página

Los scripts de página se implementan como métodos de una clase arbitraria: puede usar
una clase personalizada que se crea una instancia antes de ejecutar XFRX, implementar los
scripts como métodos del formulario actual o cualquier otra cosa que sea conveniente en
su entorno de aplicación. Cada método de script acepta un parámetro: la referencia de
objeto XFRX # DRAW. Esta referencia se vincula al documento que se está generando.

Ejemplo:
1 DEFINE CLASS myXFRXScripts AS CUSTOM<font></font>

2 <font></font>

3 PROCEDURE drawBlueRectangle<font></font>

4 LPARAMETERS m.oXFD<font></font>

5 m.oXFD.setColor(0,0,255,-1,-1,-1)<font></font>

6 m.oXFD.drawRectangle(100,200,50,50)<font></font>

7 ENDPROC<font></font>

8 <font></font>

9 ENDDEFINE

Antes de llamar a XFRX, los scripts se registran con RegisterScript () en la instancia de clase
de sesión XFRX para que XFRX sea nuevo sobre estos scripts y los invoque según sea
necesario. Puede ejecutar los scripts en cada página, páginas impares o parciales o páginas
arbitrarias. Consulte los Métodos comunes en XFRXListener y el capítulo de clases de
XFRXSession para obtener una descripción detallada de este método y sus parámetros.

Ejemplo:
*<font></font>

*Draw blue rectangle on each page<font></font>

*<font></font>

m.loScripts = createobject("myXFRXScripts")<font></font>

m.loXFRXSession.registerScript(loScripts,"drawBlueRectangle",0,"ALL",0)

Guiones de rectángulo

Los scripts vinculados a un rectángulo están vinculados a un rectángulo específico en el


informe y se ejecutan en lugar de dibujar este rectángulo en la salida.

Hay dos formas de implementar los scripts: los scripts con nombre, que se implementan
como un método de una clase, o los scripts escritos directamente en el campo de
comentario del rectángulo en la definición del informe.

Scripts nombrados

Si el script se implementa como un método de una clase, debe registrarse de forma similar
a los scripts de página, pero solo se requieren los dos primeros parámetros: la referencia
del objeto y el nombre del script:
m.loScripts = createobject("myXFRXScripts")<font></font>

m.loXFRXSession.registerScript(loScripts,"drawBlueRectangle")

Para vincular el script con un rectángulo, agregue "#UR SCRIPT NAME <script name>" (sin
las comillas) como un comentario del rectángulo.
Scripts escritos en el campo de comentario de rectángulo

Alternativamente, la secuencia de comandos se puede ingresar en el campo de comentario


del rectángulo. Esta técnica está disponible para VFP 8.0 y superior, pero su uso está
limitado para VFP 8.0 porque el campo de comentarios es pequeño y solo se puede
ingresar una cantidad limitada de texto.

El script se ingresa entre las líneas #UR SCRIPT BEGIN y #UR SCRIPT END.

Estos scripts no tienen nombre ni están registrados. Se supone que el contenido entre estas
líneas acepta el parámetro de referencia del objeto XFRX # DRAW y se evalúa a través de la
función EXECSCRIPT ().

Ejemplo:
Cuando se encuentra dentro del script vinculado al rectángulo, el origen de las
coordenadas se desplaza: 0,0 representa la esquina superior izquierda del rectángulo.
La posición y el tamaño del rectángulo delimitador se pueden recuperar con
el método GetBoundingRectangle () .

Conversión de objetos encuadernados en rectángulo a imágenes

El contenido de los scripts enlazados a un rectángulo se puede representar


alternativamente como una imagen, que luego se coloca en la salida. Para ello, agregue la
cláusula PICTURE a la línea #UR SCRIPT BEGIN o #UR SCRIPT NAME <script name> en el
campo de comentario.

La IMAGEN puede ser seguida opcionalmente por un valor DPI, que representa el DPI
(puntos por pulgada) de la imagen creada. El DPI predeterminado es 96, que es adecuado
para la vista previa en pantalla, pero es posible que desee aumentar el valor de DPI para
aumentar la calidad de la imagen.

También puede especificar el tipo de imagen agregando la cláusula TYPE seguida de uno
de los siguientes valores: BMP, JPEG (JPG), PNG, TIFF (TIF) y EMF. El tipo de imagen
predeterminado es JPG.
Las siguientes palabras clave son:

 BPP - bits por píxel; el valor predeterminado es 24; los valores son 1,4,8,16,24,32; XFRX 15.5
 JPEGQ - calidad jepg; el valor predeterminado es 96; XFRX 15.5
 TRANSPARENTE: modo de fondo transparente para TIFF, PNG y EMF; el predeterminado es
opaco; XFRX 15.5

Envío de parámetros a scripts nombrados

Los scripts nombrados pueden opcionalmente aceptar más parámetros. Los parámetros se
especifican mediante la cláusula PARAMETERS seguida de los parámetros, que se evalúan
en el momento del procesamiento del informe.

Ejemplo:
1 DEFINE CLASS myXFRXScripts as Custom<font></font>

2 PROCEDURE fancyRectangle<font></font>

3 LPARAM m.oXFD, m.boxwidth, m.boxheight<font></font>

4 *<font></font>

5 * This script draws little boxes around the bounding rectangle.<font></font>

6 * The height and width of the rectangles can be sent as parameters.<font></font>

7 * The default width and height is 5 points. (1 point = 1/72 inch).<font></font>

8 *<font></font>

9 IF EMPTY(m.boxwidth)<font></font>

10 m.boxwidth = 5<font></font>

11 ENDIF<font></font>

12 IF EMPTY(m.boxheight)<font></font>

13 m.boxheight = m.boxwidth<font></font>

14 ENDIF<font></font>

15 <font></font>

16 m.oXFD.setUnit("pt")<font></font>

17 m.loBox = m.oXFD.getBoundingRectangle()<font></font>

18 m.oXFD.setColor(0,0,0)<font></font>

19 <font></font>
20 LOCAL m.i<font></font>

21 FOR m.i = 0 TO INT(m.loBox.nwidth/m.BOXWIDTH)-1<font></font>

22 m.oXFD.setColor(0,0,0,INT(RAND()*256),INT(RAND()*256),INT(RAND()*256))<font><

23 m.oXFD.drawRectangle(m.i*m.BOXWIDTH, 0, m.BOXWIDTH, m.boxheight,1,1)<font></f

24 m.oXFD.setColor(0,0,0,INT(RAND()*256),INT(RAND()*256),INT(RAND()*256))<font><

25 m.oXFD.drawRectangle(m.i*m.BOXWIDTH, ;<font></font>

26 INT(m.loBox.nheight/m.boxheight-1)*m.boxheight, m.BOXWIDT

27 ENDFOR<font></font>

28 <font></font>

29 FOR m.i = 1 TO INT(m.loBox.nHeight/m.boxheight)-2<font></font>

30 m.oXFD.setColor(0,0,0,INT(RAND()*256),INT(RAND()*256),INT(RAND()*256))<font><

31 m.oXFD.drawRectangle(0, m.i*m.boxheight, m.BOXWIDTH, m.boxheight,1,1)<font></

32 m.oXFD.setColor(0,0,0,INT(RAND()*256),INT(RAND()*256),INT(RAND()*256))<font><

33 m.oXFD.drawRectangle(int(m.loBox.nwidth/m.BOXWIDTH-1)*m.BOXWIDTH, ;<font></fo

34 m.i*m.boxheight, m.BOXWIDTH, m.boxheight,1,1)<font></fon

35 ENDFOR<font></font>

36 ENDPROC<font></font>

37 ENDDEFINE

XFRX # DRAW funciones


Este capítulo proporciona una breve lista de propiedades y métodos implementados en la
clase XFRX # DRAW. Para una descripción detallada de las propiedades, los métodos y sus
parámetros, consulte la referencia de clase XFRX # DRAW en la página 92).

Navegación de documentos XFF

Cada vez que dibuja algo en un documento XFF, el dibujo siempre se agrega en la parte
superior de la "página actual". La página actual se almacena en una propiedad
de solo lectura CurrentPage . El número total de páginas se almacena en
la propiedad PageCount . Para navegar por las páginas, use los métodos GoTop (),
GoBottom () y GoToPage (nPageNo) .
Agregar páginas

El método AddPage () crea una nueva página al final del documento. Puede especificar el
tamaño de la nueva página o usar el mismo tamaño que la página actual.

Unidades de coordenadas

La unidad predeterminada es Point (1/72 pulgadas). Puede usar el método setUnit


(cUnit) para cambiar a una unidad diferente. Las unidades disponibles son: centímetros
(cm), pulgadas (in), puntos (pt) y píxeles (px).
17.3.4 Funciones de dibujo

Use el método SetColor () para establecer los colores para las siguientes llamadas al
método de dibujo, los colores predeterminados son negro para el lápiz y blanco para el
fondo.

Texto de dibujo

Use el método setFont () para establecer el nombre, el tamaño y los atributos de la


fuente. DrawText () dibuja un texto en una posición dada, en una posición definida por
el método SetPos () o al final de una salida de la llamada al método anterior DrawText () -
"posición actual". Después de cada llamada al método DrawText () , la "posición actual"
avanza según la altura y el ancho del texto. GetXPos () y GetYPos () devuelven la posición
actual. DrawTextBox () dibuja un texto en un rectángulo delimitador dado: la palabra
envuelve las líneas largas y opcionalmente expande la altura del cuadro delimitador para
acomodar todo el texto.

Para mantener la compatibilidad con la biblioteca PDF, OutText () es sinónimo


de DrawText () .

Dibujando formas básicas

drawLine () dibuja una línea punto a punto , drawRectangle () dibuja un rectángulo, un


rectángulo redondeado o una elipse.

Dibujando imágenes

El método DrawPicture () dibuja una imagen dentro de un rectángulo delimitador dado.

Información sobre herramientas, hipervínculos y marcadores

Cada texto dibujado por DrawText () o DrawTextBox () puede tener un tooltip, puede
servir como un objetivo para un marcador y puede ser un hipervínculo o un destino o un
hipervínculo. Consulte los parámetros tcLinkName, tcLinkRef, tcBookmark y tcTooltip de
los métodos DrawText () y DrawTextBox () en la referencia de clase XFRX # DRAW en la
página 92.

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX
/
Páginas
/
Guía del desarrollador
metadata.attachments

Previsualizador de XFRX

Usuario desconocido (mst)


Modificado por última vez nov 12, 2017 por martinajindrova

 XFRX se envía con su propio visualizador de informes. El previsualizador permite:


 Dirigir la generación del informe al previsualizador o previsualizar un archivo XFF existente
 Buscando el documento
 Exportación del documento a cualquiera de los formatos de salida de soporte
 Imprimir el documento
 Navegación a través de hipervínculos y marcadores
 Invocar código de FoxBase en clic de hipervínculo (eventos personalizados)

La vista previa se implementa como un objeto contenedor, por lo que se puede agregar
fácilmente dentro de cualquier formulario de VFP.
Los archivos XFF no tienen que almacenarse como archivos físicos. También puede crear
archivos temporales XFF que se liberarán automáticamente cuando cierre la vista
previa. (Consulte Creación de archivos temporales XFF en la página 45 para obtener más
información).

 Configurando el previsualizador de XFRX


 Imprimir desde el previsualizador
 Exportar informes de la vista previa
 Soporte de correo electrónico en el previsualizador XFRX
 Localización del previsualizador
 Registro de errores

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX

...

/
Previsualizador de XFRX

Configurando el previsualizador de XFRX

martinajindrova

Modificado por última vez dic 01, 2017

Esta sección se ha agregado para reflejar los cambios en XFRX ver. 11.3. Si está utilizando
versiones anteriores de XFRX, consulte el apartado Uso de la clase XFCont a continuación en
este capítulo.

Hay varias formas de configurar la previsualización de XFRX. Puede usar el componente de


vista previa independiente ya preparado o comenzar con las clases básicas del componente
de vista previa para agregar las capacidades de vista previa a sus propios formularios.

Los siguientes subcapítulos describen el uso de tres clases implementadas en XFRXLIB.VCX,


que puede utilizar como punto de partida para implementar el previsor de XFRX en su
aplicación:
frmMPPreviewer cntXFRXMultiPage XFCont

Implementado como una Sí No No


forma (la configuración más
fácil)

Implementado como No Sí Sí
contenedor (se puede
incrustar en formularios
existentes)

admite la interfaz de múltiples Sí Sí No


pestañas

admite la barra de Sí Sí No
herramientas integrada

 XFCont es la clase de vista previa XFRX básica. Se implementa como un objeto contenedor
y admite búsquedas, hipervínculos, marcadores, impresión y exportación.
 La clase cntXFRXMultiPage amplía la funcionalidad de la clase XFCont con la interfaz de
varias pestañas: puede mostrar varias pestañas de vista previa en una clase de marco de
página. También es compatible con una barra de herramientas incrustada (falsa), que es un
control similar a una barra de herramientas en la parte superior del contenedor, que es muy
útil si el formulario del previsualizador no está dentro de la pantalla principal de VFP.
 frmMPPreviewer es una clase de formulario que implementa cntXFRXMultiPage y sirve
como un "proxy" para las características de la clase cntXFRXMultiPage. Si todo lo que
necesita es una vista previa del informe de pantalla completa, esta es la más fácil de
configurar.

Configuración por defecto


Se ha agregado una nueva propiedad de tipo de objeto a las clases XFCont,
cntXFRXMultipage y frmMPPreviewer:
Nombre Descripción
Versión XFRX

cImageFolder Carpeta con imágenes para la vista previa de 16.1.4


XFRX.
La subcarpeta 32x32 contiene iconos de 32x32
px.
Nombre Descripción
Versión XFRX

La subcarpeta 48x48 contiene iconos de 48x48


px.
La subcarpeta 96x96 contiene iconos de 96x96
px.

oDisplayDefaults Mostrar opciones predeterminadas.

o PrinterOptions Imprimir opciones predeterminadas 17.0.0

oExportOptions Opciones predeterminadas de exportación . 17.0.0

oEmailOptions Opciones predeterminadas de correo electrónico 17.0.0

lVFP8 Cambie la compatibilidad de backware con versiones 17.3.1


anteriores de VFP en VFP 9.0. El valor predeterminado
es .F.

Object oDisplayDefaults tiene las siguientes propiedades:


Nombre Tipo Descripción Versión XFRX

StartingPage entero La primera página para mostrar en el


reproductor. El valor predeterminado
es 1.

DefaultOutputFileName cuerda El nombre de archivo de salida


predeterminado al exportar desde el
vista previa.

PagesPerSheet cuerda Páginas codificadas por valor de diseño


de hoja. Valor predeterminado: 1x1.
Valores permitidos: 1x1, 2x1, 2x2, 3x1,
3x2, 4x2.

ZoomFactor entero el factor de zoom. valor


predeterminado = 100. -1 = ajustar al
ancho, -2 = página de ajuste.
Nombre Tipo Descripción Versión XFRX

El factor de zoom se usará solo de


PagesPerSheet es 1x1, de lo contrario,
tiene el valor predeterminado de -2.

FindColor entero color de fondo del texto buscado 17.0.0

Ejemplo:
1 m.loPreview = CREATEOBJECT("frmMPPreviewer")<font></font>

2 m.loPreview.oDisplayDefaults.StartingPage = 2<font></font>

3 m.loPreview.oDisplayDefaults.DefaultOutputFileName = "invoice15_09"<font></font>

4 m.loPreview.oDisplayDefaults.ZoomFactor = -1<font></font>

5 m.loPreview.oDisplayDefaults.PagesPerSheet = "1x1"<font></font>

6 m.loPreview.lVFP8=.T. && don't use XFRX#LISTENER<font></font>

7 m.loPreview.PreviewXFF(loXFF)<font></font>

8 m.loPreview.show(1)

Métodos y propiedades comunes


Aunque puede usar diferentes clases para proporcionar las capacidades de vista previa en
su aplicación, todas las clases comparten la mayoría de las propiedades y métodos que
puede usar para controlarlos y personalizarlos.

Control de las funciones de vista previa de varias pestañas


Las propiedades y métodos descritos en este párrafo se implementan en las clases
cntXFRXMultiPage y frmMPPreviewer. Las características de múltiples pestañas no están
implementadas en la clase XFCont.
Propiedad / Método Uso

lShowTabForOneReport Valores posibles:


(propiedad)  .F. (predeterminado): la pestaña con títulos de página está oculta
si solo se muestra una vista previa de un informe. Se volverá
automáticamente visible cuando se obtenga una vista previa del
segundo informe.
 .T. - la pestaña con títulos de página siempre está visible.
Vista previaXFF Sintaxis:
(método) PreviewXFF (toXFF, tcCaption, tnPageNo)
Llame a este método para obtener una vista previa del
archivo XFF en la vista previa. Puede llamar a este método
varias veces, lo que agregará nuevos informes como páginas
nuevas o reemplazará las páginas existentes, según los
parámetros.
Parámetros:
toXFF
La referencia de un archivo XFF que se va a
previsualizar
tcCaption (opcional)
El título de la página con este informe si la vista previa de
varios informes.
tnPáginaNo (opcional)
La página en la que se va a ver el archivo XFF. Si este
parámetro está vacío o es mayor que el número de páginas
existentes, se agrega una página nueva. Si ya existe una
página con este número, será reemplazada.

Eliminar página Sintaxis:


(método) RemovePage (tnPageNo)
Elimina una página del previsualizador.
Parámetros:
tnPáginaNo (opcional)
El número de la página para eliminar. Si el parámetro está
vacío o el número es mayor que el número de páginas
existentes, se elimina el último.

Registrar un manejador de extensión

El controlador de extensión permite ampliar la funcionalidad de las clases básicas sin


necesidad de crear subclases. Todo lo que necesita es crear una clase personalizada, que
implemente ciertos métodos. La clase personalizada se registra con la clase de vista previa
de XFRX (usando el método SetExtensionHandler) y la persona que realiza la vista previa
llama a los métodos de extensión en los eventos apropiados.

Los métodos de eventos soportados actualmente son:


Método Uso Comentario
Método Uso Comentario

KeyPress Este método se llama desde KeyPress () método od clase


xfcont.
Parámetros:
toXFF: el controlador del archivo XFF que se está
visualizando
nKeyCode - Contiene un número que identifica la tecla
presionada
nShiftAltCtrl - Establece un bit particular si se mantiene
presionada una tecla modificadora mientras se presiona la
tecla especificada por nKeyCode

Ejemplo 1: Definir la lista de opciones de salida de exportación, interceptando la


exportación XLS

1 USE invoices ORDER customer<font></font>

2 LOCAL m.loSession, m.lnRetval, m.loXFF, m.loPreview, m.loScripts<font></font>

3 m.loSession=EVALUATE([xfrx("XFRX#LISTENER")])<font></font>

4 m.lnRetVal = m.loSession.SetParams("",,,,,,"XFF") && no name = just in memory<font></fo

5 IF m.lnRetVal = 0<font></font>

6 REPORT FORM invoices OBJECT m.loSession<font></font>

7 m.loXFF = m.loSession.oxfDocument<font></font>

8 *<font></font>

9 * initialize the previewer<font></font>

10 *<font></font>

11 SET CLASSLIB TO xfrxlib ADDITIVE<font></font>

12 m.loPreview = CREATEOBJECT("frmMPPreviewer")<font></font>

13 m.loPreview.setExtensionHandler(CREATEOBJECT("MyExtensionHandler"))<font></font>

14 m.loPreview.windowType = 0<font></font>

15 m.loPreview.iBook = 0<font></font>

16 m.loPreview.PreviewXFF(loXFF)<font></font>
17 m.loPreview.show(1)<font></font>

18 ENDIF<font></font>

19 <font></font>

20 <font></font>

21 DEFINE CLASS MyExtensionHandler AS Custom<font></font>

22 <font></font>

23 PROCEDURE Export<font></font>

24 LPARAMETERS m.toXFF<font></font>

25 IF USED("_xfExportTypes")<font></font>

26 USE IN _xfExportTypes<font></font>

27 ENDIF<font></font>

28 *<font></font>

29 * define my export options list<font></font>

30 *<font></font>

31 CREATE CURSOR _xfExportTypes (name C(50), extension C(4), targetCode C(10))<font>

32 INSERT INTO _xfExportTypes VALUES ("HTML", "html", "HTML")<font></font>

33 INSERT INTO _xfExportTypes VALUES ("PDF", "pdf", "PDF")<font></font>

34 INSERT INTO _xfExportTypes VALUES ("Excel", "xls", "XLS")<font></font>

35 ENDPROC<font></font>

36 <font></font>

37 PROCEDURE ExportOptions<font></font>

38 LPARAMETERS m.toXFF, m.toOptions<font></font>

39 IF m.toOptions.cTarget = "XLS"<font></font>

40 *<font></font>

41 * my own code to handle output to Excel<font></font>

42 *<font></font>

43 =MESSAGEBOX("exporting to "+m.toOptions.cOutputFile)<font></font>

44 RETURN .F. && suppress the default behavior<font></font>


45 ELSE<font></font>

46 RETURN .T. && continue with the default behavior<font></font>

47 ENDIF<font></font>

48 <font></font>

49 ENDPROC<font></font>

50 <font></font>

51 ENDDEFINE

Ejemplo 2

1 SET PATH TO xfrxlib<font></font>

2 SET CLASSLIB TO xfrxlib<font></font>

3 <font></font>

4 LOCAL m.loPreview, m.loSession, m.loExtensionHandler<font></font>

5 <font></font>

6 m.loExtensionHandler = CREATEOBJECT("myExtensionHandler")<font></font>

7 <font></font>

8 m.loPreview = CREATEOBJECT("frmMPPreviewer")<font></font>

9 m.loSession=EVALUATE([xfrx("XFRX#LISTENER")])<font></font>

10 <font></font>

11 *<font></font>

12 * create a memory XFF file<font></font>

13 *<font></font>

14 m.lnRetVal = m.loSession.SetParams(,,,,,,"XFF")<font></font>

15 IF m.lnRetVal = 0<font></font>

16 SELECT * ;<font></font>

17 FROM customers INNER JOIN orders ON customers.customerid = orders.customerid ;<fon

18 INNER JOIN orderdetails ON orders.orderid = orderdetails.orderid ;<

19 ORDER BY customers.companyname, customers.customerID, orders.orderID ;<font></font

20 INTO CURSOR custlist<font></font>


21 <font></font>

22 REPORT FORM custlist OBJECT loSession<font></font>

23 ENDIF<font></font>

24 <font></font>

25 *<font></font>

26 * assign the extension handler<font></font>

27 *<font></font>

28 m.loPreview.setExtensionHandler(loExtensionHandler)<font></font>

29 *<font></font>

30 * preview the report<font></font>

31 *<font></font>

32 m.loPreview.previewXFF(m.loSession.oxfdocument)<font></font>

33 m.loPreview.show(1)<font></font>

34 <font></font>

35 DEFINE CLASS myExtensionHandler AS CUSTOM<font></font>

36 PROCEDURE Print<font></font>

37 LPARAMETERS m.toXFF<font></font>

38 RETURN .t. && continue with the default behavior<font></font>

39 ENDPROC<font></font>

40 <font></font>

41 PROCEDURE Export<font></font>

42 LPARAMETERS m.toXFF<font></font>

43 *<font></font>

44 * now you can process the XFF file<font></font>

45 *<font></font>

46 RETURN .F. && override the default behavior<font></font>

47 ENDPROC<font></font>

48 ENDDEFINE
Ejemplo de BeforeExport y AfterExport

1 USE demoreps\invoices ORDER customer<font></font>

2 LOCAL m.loSession, m.lnRetval, m.loXFF, m.loPreview, m.loScripts<font></font>

3 m.loSession=EVALUATE([xfrx("XFRX#LISTENER")])<font></font>

4 m.lnRetVal = m.loSession.SetParams(,,,,,,"XFF") && no name = just in memory<font></font

5 IF m.lnRetVal = 0<font></font>

6 REPORT FORM demoreps\invoices object m.loSession<font></font>

7 *<font></font>

8 * the XFRX#DRAW object reference is stored in oxfDocument property<font></font>

9 *<font></font>

10 m.loXFF = m.loSession.oxfDocument<font></font>

11 *<font></font>

12 * initialize the previewer <font></font>

13 *<font></font>

14 SET PATH TO xfrxlib<font></font>

15 SET CLASSLIB TO xfrxlib ADDITIVE <font></font>

16 m.loPreview = CREATEOBJECT("frmMPPreviewer")<font></font>

17 *<font></font>

18 * setup the extension handler<font></font>

19 *<font></font>

20 m.loPreview.oExtensionHandler = CREATEOBJECT("SampleExtensionHandler")<font></font>

21 m.loPreview.windowtype = 1 <font></font>

22 m.loPreview.iTool = 2 && embedded toolbar<font></font>

23 m.loPreview.PreviewXFF(m.loXFF)<font></font>

24 m.loPreview.show(1)<font></font>

25 ENDIF<font></font>

26 <font></font>

27 DEFINE CLASS SampleExtensionHandler as Custom<font></font>


28 <font></font>

29 PROCEDURE BeforeExport<font></font>

30 LPARAMETERS m.toSession, m.toExportParameters<font></font>

31 <font></font>

32 m.toSession.setAuthor("Martin") && set the document author property<font></font>

33 IF m.toExportParameters.cTarget = "XLS" && (XLS or XLSPLAIN)<font></font>

34 m.toSession.SetOtherParams("DISPLAY_GRID_LINES",.F.) && do not display gridlin

35 ENDIF<font></font>

36 ENDPROC<font></font>

37 <font></font>

38 PROCEDURE AfterExport<font></font>

39 LPARAMETERS m.toSession, m.toOptions<font></font>

40 IF m.toOptions.cTarget = "XLS"<font></font>

41 *COPY FILE (m.toOptions.coutputfile) TO ([anybackupfolder]\[anyfile.xls])<font

42 ENDIF<font></font>

43 ENDPROC<font></font>

44 <font></font>

45 ENDDEFINE

Ejemplo de KeyPress

1 USE demoreps\invoices ORDER customer<font></font>

2 LOCAL m.loSession, m.lnRetval, m.loXFF, m.loPreview, m.loScripts<font></font>

3 m.loSession=EVALUATE([xfrx("XFRX#LISTENER")])<font></font>

4 m.lnRetVal = m.loSession.SetParams(,,,,,,"XFF") && no name = just in memory<font></font

5 IF m.lnRetVal = 0<font></font>

6 REPORT FORM demoreps\invoices OBJECT m.loSession<font></font>

7 *<font></font>

8 * the XFRX#DRAW object reference is stored in oxfDocument property<font></font>

9 *<font></font>
10 m.loXFF = m.loSession.oxfDocument<font></font>

11 *<font></font>

12 * initialize the previewer <font></font>

13 *<font></font>

14 SET PATH TO xfrxlib<font></font>

15 SET CLASSLIB TO xfrxlib ADDITIVE <font></font>

16 m.loPreview = CREATEOBJECT("frmMPPreviewer")<font></font>

17 *<font></font>

18 * setup the extension handler<font></font>

19 *<font></font>

20 m.loPreview.oExtensionHandler = CREATEOBJECT("SampleExtensionHandler")<font></font>

21 m.loPreview.windowtype = 1 <font></font>

22 m.loPreview.iTool = 2 && embedded toolbar<font></font>

23 m.loPreview.PreviewXFF(loXFF)<font></font>

24 m.loPreview.show(1)<font></font>

25 ENDIF<font></font>

26 <font></font>

27 DEFINE CLASS SampleExtensionHandler AS CUSTOM<font></font>

28 <font></font>

29 PROCEDURE KeyPress(m.loXFCont, m.nKeyCode, m.nShiftAltCtrl)<font></font>

30 * hotkey for print P (112-p, 80-P)<font></font>

31 IF INLIST(m.nKeyCode, 112, 80)<font></font>

32 m.loXFCont.Print()<font></font>

33 ENDIF<font></font>

34 ENDPROC<font></font>

35 ENDDEFINE <font></font>
Mostrar / ocultar marcadores

El comportamiento del panel de marcadores está controlado por la propiedad iBook:


Propiedad Uso

yo Controla si el marcador debe mostrarse en la vista previa. Los valores


reservo permitidos son:

 -1 = Inhabilitar marcadores
 0 = Habilitar marcadores pero ocultarlos (los usuarios deben hacer clic en el
botón de marcador para verlos)
 1 = Habilitar marcadores, mostrándolos siempre (predeterminado)
 2 = Habilitar los marcadores, pero mostrarlos u ocultarlos automáticamente en
función de si hay marcadores definidos en el informe para previsualizar
(predeterminado)

Mostrando u ocultando barras de herramientas de vista previa

Hay dos barras de herramientas en el control del previsualizador: una se coloca en la parte
inferior del control, la otra está disponible como un panel flotante de la barra de
herramientas, que por defecto se acopla en la parte superior de la ventana principal o,
alternativamente, como un "incrustado" barra de herramientas". Las tres clases
implementan las propiedades iTool y ShowStatus que controlan la visibilidad de las barras
de herramientas:
Propiedad Uso

classMainToolbar El nombre de clase de la barra de herramientas. El valor predeterminado es "xfrxToo


crear un elemento secundario de la clase xfrxToolbar predeterminada (definida en xfr
usar esta propiedad para indicarle al usuario que use la clase en lugar de la predeterm
Esta propiedad funciona para la barra de herramientas "real" - si la propiedad iTool e
iTool se establece en 2, la clase de contenedor cmdEmbeddedToolbar se utiliza como
herramientas "incrustada".
La clase xfrxToolbar32 es para iconos de 32x32 px.
La clase xfrxToolbar48 es para iconos de 48x48 px.
La clase xfrxToolbar96 es para iconos de 96x96 px.

ClassMainStatusBar El nombre de clase de la barra de estado o barra de herramientas embebida. El valor


predeterminado es "cntembeddedtoolbar". Puede crear un elemento secundario de la
predeterminada cntembeddedtoolbarr (definida en xfrxlib.vcx) y usar esta propiedad
al usuario que utilice su clase en lugar de la predeterminada.
Class cntembeddedtoolbar32 es para iconos de 32x32 px.
La clase cntembeddedtoolbar48 es para iconos de 48x48 px.
La clase cntembeddedtoolbar96 es para iconos de 96x96 px.
iTool Controla la visibilidad de la barra de herramientas en la parte superior. Los valores pe
son:

 -1 = Deshabilitar la barra de herramientas


 0 = La barra de herramientas estará habilitada pero oculta. Se puede invocar a través del me
directo con el botón derecho
 1 = La barra de herramientas estará habilitada y visible. (defecto)
 2 = La barra de herramientas se mostrará como incrustada en el formulario (disponible solo
cntXFRXMultiPage y frmMPPreviewer.

mostrar el estado Controla la visibilidad de la barra de herramientas en la barra de estado del contenedo
previa. Los valores permitidos son:

 .T. = mostrar la barra de herramientas (predeterminado)


 .F. = esconder la barra de herramientas

Mostrando barra de progreso

Propiedad Uso

oprogress La instancia de objeto de la barra de


progreso de XFRX

1 USE demoreps\invoices ORDER customer<font></font>

2 LOCAL m.loSession, m.lnRetval, m.loXFF, m.loPreview,

3 m.loScripts<font></font>

4 m.loSession=EVALUATE([xfrx("XFRX#LISTENER")])<font></font>

5 m.lnRetVal = m.loSession.SetParams(,,,,,,"XFF") && no name = just in


memory<font></font>
6
IF m.lnRetVal = 0<font></font>
7
REPORT FORM demoreps\invoices OBJECT m.loSession<font></font>
8
*<font></font>
9
* the XFRX#DRAW object reference is stored in oxfDocument
10 property<font></font>

11 *<font></font>

12 m.loXFF = m.loSession.oxfDocument<font></font>
13 *<font></font>

14 * initialize the previewer <font></font>

15 *<font></font>

16 SET PATH TO xfrxlib<font></font>

17 SET CLASSLIB TO xfrxlib ADDITIVE <font></font>

18 m.loPreview = CREATEOBJECT("frmMPPreviewer")<font></font>

19 *<font></font>

20 * setup the extension handler<font></font>

21 *<font></font>

22 m.loPreview.oExtensionHandler =
CREATEOBJECT("SampleExtensionHandler")<font></font>
23
m.loPreview.oprogress=createobject("progress")<font></font>
24
m.loPreview.PreviewXFF(loXFF)<font></font>
25
m.loPreview.show(1)<font></font>
26
ENDIF<font></font>
27
<font></font>
28
DEFINE CLASS progress AS CUSTOM<font></font>
29
PROCEURE updateProgress<font></font>
30
LPARAM m.ta,m.tb, m.tc<font></font>
31
WAIT WINDOW NOWAIT "Page #: "+ALLT(STR(m.tb))+" Report #:
32 "+ALLT(STR(m.ta))+" ("+ALLT(STR(m.tc))+"%)"<font></font>

ENDPROC<font></font>

ENDDEF<font></font>

<font></font>

Usando la clase frmMPPreviewer


Esta clase sirve como una ventana de vista previa independiente (pantalla completa). Todo
lo que necesita hacer para que funcione es pasarle una referencia al archivo XFF para
obtener una vista previa, utilizando el método previewXFF, como se describe en el párrafo
anterior sobre Controlling multi-tab preview . (Si no está seguro de cómo crear una
referencia de archivo XFF, lea los capítulos 17.0: Inicialización de la instancia de clase XFRX
# DRAW y 16.3: Creación de archivos XFF temporales ). Aquí hay un ejemplo muy simple
de "Hola mundo":
1 LOCAL m.loPreview<font></font>

2 SET CLASSLIB TO XFRXLIB.VCX ADDITIVE <font></font>

3 m.loPreview = CREATEOBJECT("frmMPPreviewer") && create the previewer object<font></font>

4 m.loPreview.previewXFF(m.loXFF) && loXFF is XFF file reference<font></font>

5 m.loPreview.show(1) && show the form as modal

Asegúrese de establecer todas las propiedades (como iTool, ShowStatus, etc.) antes de
llamar a PreviewXFF (...) de lo contrario no se usarán.
Usando la clase cntXFRXMultiPage

1. Agregue una instancia de la clase cntXFRXMultiPage (de XFRXLIB.VCX) en su


formulario. Ajuste el tamaño del contenedor de objetos de clase cntXFRXMultiPage que
necesite. La vista previa, incluida la barra de estado, los iconos y las barras de
desplazamiento se mostrarán en el contenedor. Si cambia el tamaño del contenedor en
tiempo de ejecución, su contenido se ajusta automáticamente.
2. Cuando el formulario está a punto de ser lanzado, la instancia de la clase cntXFRXMultiPage
necesita realizar algunas tareas de limpieza. Para habilitarlo, llame al método clearLink () de
la instancia de la clase desde el método de destrucción del formulario:
1 PROCEDURE Destroy<font></font>

2 Thisform.cntXFRX.clearLink()<font></font>

3 ENDPROC

3. Al ejecutar el formulario, asegúrese de que la biblioteca de la clase XFRXLIB.VCX esté


referenciada en el comando SET CLASSLIB:

SET CLASSLIB TO XFRXLIB.VCX ADDITIVE

4. Llame al método PreviewXFF para obtener una vista previa de un archivo XFF, tal como se
describe en el párrafo anterior sobre Controlling multi-tab preview .
5. De forma predeterminada, cntXFRXMultiPage está utilizando una instancia de la clase
XFCont para cada página. Si desea hacer que use una clase diferente (por ejemplo, una
subclase de XFCont) ponga el nombre de la clase en la propiedad ClassPreviewPage de la
instancia cntXFRXMultiPage.

Usando la clase XFCont


1. Agregue una instancia de clase XFCONT (de XFRXLIB.VCX) en su formulario. Ajuste el
tamaño del contenedor de la clase XFCONT según lo necesite. La vista previa, incluida la
barra de estado, los iconos y las barras de desplazamiento se mostrarán en el
contenedor. Si cambia el tamaño del contenedor en tiempo de ejecución, su contenido se
ajusta automáticamente.
2. Cuando el formulario está a punto de ser lanzado, la instancia de la clase XFCONT necesita
hacer algo de limpieza. Para habilitarlo, llame al método clearLink () de la instancia de la
clase XFCont desde el método de destrucción del formulario:

PROCEDIMIENTO
1 PROCEDURE Destroy Thisform.cntXFRX.clearLink() ENDPROC

3. Al ejecutar el formulario, asegúrese de que la biblioteca de la clase XFRXLIB.VCX esté


referenciada en el comando SET CLASSLIB:

SET CLASSLIB TO XFRXLIB.VCX ADDITIVE

Enfoque VFP 8.0

En VFP 8.0, hay dos opciones para obtener una vista previa del informe en la vista
previa. Las opciones difieren en el mecanismo de llamada, aunque internamente ambos
funcionan exactamente igual.

Generando el tipo de salida "CNT"

El enfoque utiliza la sintaxis estándar de llamar a XFRX, sin usar explícitamente la clase XFRX
# DRAW (aunque se usa en segundo plano). No puede abrir un archivo XFF existente con
este enfoque: siempre debe ejecutar un informe que se previsualizará.
1. No envíe nada como el nombre del archivo de salida
2. Use "CNT" como parámetro de tipo de salida en la llamada al método SetParams
3. Método de restablecimiento de llamada de la clase de contenedor de vista previa
4. Llame al método SetOtherParams de la instancia de la clase XFRXSession con la referencia
de la instancia de XFCont como parámetro

Ejemplo:
LOCAL m.loSession, m.lnRetval loSession= xfrx("XFRX#INIT") m.lnRetVal = m.loSession.SetP
1 thisform.cntXFRX * Thisform.cntXFRX.reset() m.loSession.setotherparams(Thisform.cntXFRX)

Usando la clase XFRX # DRAW

La ventaja de este método es que puede previsualizar un archivo XFF existente: el archivo
XFF se abre y se "convierte" a tipo de salida "CNT" a través del método TransformReport:

Ejemplo:
LOCAL m.loSession m.loSession= xfrx("XFRX#INIT") Thisform.oReport = xfrx("XFRX#DRAW") IF
1 m.loSession.SetParams(,,,,,,"CNT") IF m.lnRetVal = 0 m.loSession.setOtherParams(Thisform

VFP 9.0 Enfoque

En VFP 9.0 la lógica es la misma, solo la sintaxis es un poco diferente: la referencia al objeto
XFCont se copia a la propiedad XFRXPreviewer de la instancia de la clase XFRXListener y
luego al método previewReport con la referencia XFRX # DRAW como parámetro se llama:
1 LOCAL m.loSession<font></font>
2 m.loSession= xfrx("XFRX#LISTENER")<font></font>

3 Thisform.oReport = xfrx("XFRX#DRAW")<font></font>

4 IF Thisform.oReport.openDocument("file.xff")<font></font>

5 Thisform.cntXFRX.reset()<font></font>

6 m.loSession.XFRXPreviewer = Thisform.cntXFRX<font></font>

7 m.loSession.previewReport(Thisform.oReport)<font></font>

8 ENDIF

Decoración de hipervínculo
Se ha agregado una nueva propiedad a las clases XFCont, cntXFRXMultipage y
frmMPPreviewer: UnderlineHyperlinksOnPrint. Puede usar los siguientes valores:
0 - sin decoración para hipervínculos
1 - muestra hipervínculos "normales" en azul, pero no decodifica hipervínculos de eventos
personalizados (verde)
2 - (valor predeterminado) decorar hipervínculos azules y verdes

Para apoyar esto en el imprimir salida, el método PrintDocument de la clase XFRX # DRAW
tiene un nuevo parámetro, tnUnderlineHyperlinksOnPrint, con los mismos valores y la
misma lógica.

Botones personalizados

Esta característica se implementa utilizando el mecanismo del controlador de extensión:


ahora se admite un nuevo método: ToolbarOnInit, que se invoca en el momento en que se
inicializa la barra de herramientas. En este método, el controlador de extensión puede
agregar nuevos botones al previsualizador y sus eventos de clic pueden vincularse con
otros métodos en el controlador de extensión. También se admite una nueva propiedad:
oPreviewContainer. Si está disponible, la vista previa lo rellenará automáticamente con la
referencia del objeto XFCont para un acceso más fácil a las propiedades del previsualizador
en los botones personalizados, haga clic en los métodos de evento.

Ejemplo:

1 USE demoreps\sales<font></font>

2 LOCAL m.loSession, m.lnRetval, m.loXFF, m.loPreview, m.loScripts<font></font>

3 m.loSession=EVALUATE([xfrx("XFRX#LISTENER")])<font></font>

4 m.lnRetVal = m.loSession.SetParams(,,,,,,"XFF") && no name = just in memory<font></font

5 IF m.lnRetVal = 0<font></font>

6 REPORT FORM demoreps\sales OBJECT m.loSession<font></font>


7 *<font></font>

8 * the XFRX#DRAW object reference is stored in oxfDocument property<font></font>

9 *<font></font>

10 m.loXFF = m.loSession.oxfDocument<font></font>

11 *<font></font>

12 * initialize the previewer<font></font>

13 *<font></font>

14 SET PATH TO xfrxlib<font></font>

15 SET CLASSLIB TO xfrxlib ADDITIVE<font></font>

16 m.loPreview = CREATEOBJECT("frmMPPreviewer")<font></font>

17 *<font></font>

18 * setup the extension handler<font></font>

19 *<font></font>

20 m.loPreview.oExtensionHandler = CREATEOBJECT("SampleExtensionHandler")<font></font>

21 m.loPreview.windowtype = 1<font></font>

22 m.loPreview.iTool = 2 && embedded toolbar<font></font>

23 *m.loPreview.iTool = 1 && standard toolbar<font></font>

24 m.loPreview.PreviewXFF(m.loXFF)<font></font>

25 m.loPreview.show(1)<font></font>

26 ENDIF<font></font>

27 <font></font>

28 DEFINE CLASS SampleExtensionHandler AS CUSTOM<font></font>

29 <font></font>

30 oPreviewContainer = .NULL.<font></font>

31 <font></font>

32 PROCEDURE ToolbarOnInit<font></font>

33 LPARAMETERS m.toToolbar<font></font>

34 LOCAL m.button<font></font>
35 IF m.toToolbar.AddObject("mybutton", "commandbutton")<font></font>

36 BINDEVENT(m.toToolbar.mybutton, "click" , This, "ButtonClicked")

37 m.toToolbar.mybutton.tabindex = 1<font></font>

38 m.toToolbar.mybutton.Visible = .t.<font></font>

39 IF UPPER(m.totoolbar.BaseClass)!="TOOLBAR"<font></font>

40 m.toToolbar.mybutton.left = m.toToolbar.cmdQuit.left<font></font>

41 m.toToolbar.cmdQuit.left = m.toToolbar.mybutton.left + m.toToolbar.mybutton

42 ENDIF <font></font>

43 ENDIF<font></font>

44 ENDPROC<font></font>

45 <font></font>

46 PROCEDURE ButtonClicked<font></font>

47 LOCAL m.lcString<font></font>

48 m.lcString = "This.oPreviewContainer.Name: "+This.oPreviewContainer.Name+CHR(13)<

49 m.lcString = m.lcString + "current page: "+TRANSFORM(This.oPreviewContainer.nPage

50 m.lcString = m.lcString + "XFRX#DRAW Object: "+This.oPreviewContainer.oXFRXWriter

51 m.lcString = m.lcString + "Page count: "+TRANSFORM(This.oPreviewContainer.oXFRXWr

52 WAIT WINDOW m.lcString<font></font>

53 <font></font>

54 *This.oPreviewContainer.oXFRXWriter.PrintDocument(...)<font></font>

55 *This.oPreviewContainer.oXFRXWriter.SavePicture(...)<font></font>

56 ENDPROC<font></font>

57 <font></font>

58 ENDDEFINE

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX
/

...

Previsualizador de XFRX

Imprimir desde el previsualizador

martinajindrova

12 de noviembre de 2017

De forma predeterminada, cuando los usuarios hacen clic en el botón "Imprimir" en la barra
de herramientas del previsualizador ( ), se llama al método de impresión de la clase
XFCont. Este método muestra un cuadro de diálogo con una selección de impresora y
permite ingresar un rango de página:

Cuando se realiza una vista previa de un archivo XFF, se puede acceder a la referencia XFRX
# DRAW correspondiente a través de la propiedad oXFRXWriter de la instancia de la clase
de vista previa.

Si desea cambiar la forma en que el previsualizador reacciona ante el evento de impresión,


puede configurar un controlador de extensión (consulte Registrar un controlador de
extensión en este capítulo para obtener más información). Hay tres eventos que el
controlador de extensión puede implementar:
Nombre Descripción Versión XFRX

Impresión Se llama a este método


cuando se hace clic en el
botón Imprimir en la barra
de herramientas.
Parámetros:
toXFF: el controlador
del archivo XFF que se
está visualizando

BeforePrintOptions Se llama a este método 16.1


antes de que se abra el
cuadro de diálogo
Opciones de impresora.
Parámetros:
toXFF: el controlador del
archivo XFF que se está
previsualizando en
Parámetros: el objeto que
contiene las opciones de
impresión.

PrintOptions Este método se invoca


después de que se cierra el
cuadro de diálogo
Opciones de impresora,
antes de la impresión real.
Parámetros:
toXFF: el controlador del
archivo XFF que se está
previsualizando en
Parámetros: el objeto que
contiene las opciones de
impresión.

El objeto de parámetro de impresión tiene los siguientes métodos:


Nombre Desccription
Versión XFRX
Nombre Desccription
Versión XFRX

ReadDEVMODE Lea los datos DEVMODE para la 17.0.0


impresora seleccionada por la propiedad
PrinterName.

SetField Establezca el campo de datos DEVMODE 17.0.0


para la impresora seleccionada por
propiedad PrinterName.
Parámetros:
tcField - Nombre del campo, como
"DM_COLOR", "DM_PRINTQUALITY",
etc.
tuValue - Valor de los campos

El objeto de parámetro de impresión tiene las siguientes propiedades:


Nombre Tipo Desccription Versión XFRX

AllOddEven número Incluye todas las páginas, impar o par


solamente. Los valores permitidos son:

1 ... todas las páginas (valor


predeterminado)
2 ... páginas impares
3 ... incluso páginas

Copias número La cantidad de copias

Enfocar número El número de páginas por hoja.

lShowDialog booleano Especifica si un XFRX llama al cuadro de 17.0.0


diálogo "Opciones de impresión".

PrinterName cuerda El nombre de la impresora a la que se


enviará el documento.
Nombre Tipo Desccription Versión XFRX

Rango de cuerda Ingrese los números de página y / o los


páginas intervalos de página separados por
comas (por ejemplo, 3,4,5-9 o
CURRENT (página)).

cDevmode cuerda Estructura DEVMODE.

lImprimir booleano Especifica si un XFRX llama al método 17.0.0


PrintDocument ().

cOutputFile cuerda Nombre de archivo de salida para XPS 17.0.0


Microsoft Document Writer u otro
controlador virtual de PDF.

aFindString formación Una matriz contiene cadenas para 17.0.0


resaltar.La matriz puede tener una
columna: el color de fondo será el
mismo para todas las cadenas. O la
cabina tiene dos columnas, mientras
que la segunda columna contiene el
color de fondo para la cadena.

El nombre del trabajo de la impresora generado por el método de impresión se almacena


en la propiedad cJobName de la clase XFCont y se puede cambiar tanto en tiempo de
diseño como en tiempo de ejecución. (El valor predeterminado es "XFRX").

Consulte también: Impresión del capítulo de archivos XFF en la página 46 para obtener
más información sobre cómo imprimir el contenido de los archivos XFF.

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX
/
...
/
Previsualizador de XFRX

Exportar informes de la vista previa

martinajindrova
Modificado por última vez ene 17, 2018

De manera similar a la impresión, cuando los usuarios hacen clic en el botón "Exportar" en
la barra de herramientas del previsualizador ( ), se llama al método de exportación de
la clase XFCont. Este método muestra un cuadro de diálogo con el tipo de salida y una
selección de nombre de archivo y convierte el archivo XFF que se está previsualizando en el
documento de salida:

Si desea crear su propia solución de exportación personalizada, puede configurar un


controlador de extensión (consulte Cómo registrar un párrafo del controlador de
extensión en este capítulo para obtener más información) o puede crear un elemento
secundario de la clase XFCont y anular el método de exportación. . Hay cinco eventos que
el controlador de extensión puede implementar:
Nombre Descripción
Versión XFRX

BeforeSetParams El método se ejecuta justo antes de llamar 17.3.1


al método SetParams () y se puede usar
para parametrizar el objeto de sesión xfrx
antes de exportar.
Nombre Descripción
Versión XFRX

Parámetros:
toXFF: el controlador del archivo XFF
que se está previsualizando en
Parámetros: el objeto que contiene las
opciones de exportación

Antes de exportar El método se ejecuta justo antes de exportar


el informe al formato de salida y se puede
usar para parametrizar el objeto de sesión
xfrx antes de exportarlo.
Parámetros:
toXFF: el controlador del archivo XFF
que se está previsualizando en
Parámetros: el objeto que contiene las
opciones de exportación

AfterExport El método se ejecuta justo después de


exportar el informe al formato de salida y
se puede usar para copiar el archivo de
salida a otra carpeta.
Parámetros:
toXFF: el controlador del archivo XFF
que se está previsualizando en
Parámetros: el objeto que contiene las
opciones de exportación

Exportar Se llama a este método cuando se hace clic


en el botón Exportar en la barra de
herramientas.
Parámetros:
toXFF: el controlador del archivo XFF
que se está visualizando

BeforeExportOptions Se llama a este método antes de que se abra 16.1


el cuadro de diálogo Opciones de
exportación.
Parámetros:
toXFF: el controlador del archivo XFF
que se está previsualizando en
Parámetros: el objeto que contiene las
opciones de exportación

ExportOptions Se llama a este método después de que se


cierra el cuadro de diálogo Opciones de
exportación, antes de que se ejecute la
Nombre Descripción
Versión XFRX

exportación real
Parámetros:
toXFF: el controlador del archivo XFF
que se está previsualizando en
Parámetros: el objeto que contiene las
opciones de exportación

El objeto de parámetro de exportación tiene las siguientes propiedades:


Nombre Tipo Descripción Grupo VersiónXFRX

cTarget cuerda Tipo de salida XFRX. General

cPageScope cuerda Ingrese los números de General


página y / o los intervalos
de página separados por
comas (por ejemplo,
3,4,5-9).

cOutputFile cuerda Archivo de salida. General

lNotOpenFile booleano Especifica si un archivo General 16.1.0


abierto XFRX después de
la creación.

lShowDialog booleano Especifica si un XFRX General 17.0.0


llama al cuadro de diálogo
"Opciones de impresión".

lExport booleano Especifica si una XFRX General 17.0.0


se exporta a la salida.

AllOddEven número Incluye todas las páginas, Imagen


impar o par
solamente. Los valores
permitidos son:
1 ... todas las páginas
(valor predeterminado)
2 ... páginas impares
3 ... incluso páginas

Copias número La cantidad de copias Imagen

Enfocar número El número de páginas por Imagen


hoja.
ImageDPI número Imagen DPI. Imagen

aFindString formación Una matriz contiene Imagen 17.0.0


cadenas para resaltar. La
matriz puede tener una
columna: el color de
fondo será el mismo para
todas las cadenas. O la
cabina tiene dos
columnas, mientras que la
segunda columna contiene
el color de fondo para la
cadena.

nAppendMode número Añada el modo para PDF, Modo de 16.1.0


RTF, FRTF y PLAIN. Los agregar
valores permitidos son:
1 ... Añadir al final
2 ... Insertar al principio
3 ... Reemplazar
(documento)
4 ... Insertar de la página
5 ... Reemplazar página
(s) de:

nAMFromPage número Para nAppendMode 4: el Modo de 16.1.0


informe generado se agregar
insertará en el documento
existente en el número de
página especificado.
Para nAppendMode 5:
primera página para
reemplazar en el
documento original.

nAMToPage número Para nAppendMode 5: Modo de 16.1.0


última página para agregar
reemplazar en el
documento original.

Archivar cuerda Archivo (zip) nombre de Archivo 16.1.0


archivo.

lArchiveAdditive booleano Agregar a archivo. Archivo 16.1.0

lArchiveDeleteFileAfter booleano Eliminar archivo (s) Archivo 16.1.0


después de crear archivo.

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX
/
...
/
Previsualizador de XFRX

Soporte de correo electrónico en el


previsualizador XFRX

martinajindrova
Modificado por última vez nov 12, 2017

Se ha agregado un icono de correo electrónico a la barra de herramientas de vista previa


de XFRX. Está deshabilitado por defecto para compatibilidad con versiones anteriores y
puede habilitarse configurando la propiedad iEmail de la clase de vista previa [xfCont,
cntXFRXMultiPage o frmMPPreviewer] en 1. Si hace clic en el icono de correo electrónico,
ejecuta el método de correo electrónico de la clase xfCont. De forma predeterminada,
muestra un cuadro de diálogo simple que solicita la dirección de correo electrónico, el
asunto, el cuerpo, etc. y utiliza la biblioteca VFPWinsock para enviar el correo electrónico.
VFPWinsock es una biblioteca de envío de SMTP gratuita escrita por un VFP MVP Francis
Faure. No se distribuye junto con XFRX y se puede descargar
de http://www.xfrx.net/vfpWinsock/index_e.asp . Es un paquete pequeño y agradable
escrito en VFP distribuido como un solo .prg.

El comportamiento predeterminado puede ser interceptado o anulado por un controlador


de extensión [ Obtenga más información sobre los manejadores de extensión
en 18.1.2.2 Registrar un manejador de extensión] - y, como el diálogo predeterminado no
solicita toda la información VFPWinsock necesita (por ejemplo, no lo hace) pregunte por el
host SMTP) realmente necesita crear un controlador de extensión para que funcione en su
entorno. Hay tres eventos que el controlador de extensión puede implementar:

Nombre Descripción Versión XFRX

BeforeEmailOptions El evento se dispara antes de que se


muestre el cuadro de diálogo y el usuario
hace clic en "Enviar".
El objeto de opciones y referencia de
archivo XFF se envía como parámetro.
De vuelta .F. suprimirá el correo
electrónico que se enviará.
Parámetros:
toXFF: el controlador del archivo XFF
que se
envía por correo electrónico
a Parámetros: el objeto que contiene las
opciones de correo electrónico.

EmailOptions El evento se activa después de que se


muestra el cuadro de diálogo y el usuario
hace clic en "Enviar".
El objeto de opciones y referencia de
archivo XFF se envía como parámetro.
De vuelta .F. suprimirá el correo
electrónico que se enviará.
Parámetros:
toXFF: el controlador del archivo XFF
que se
envía por correo electrónico
a Parámetros: el objeto que contiene las
opciones de correo electrónico.

Email El evento se dispara cuando se hace clic


en el icono, antes de que se muestre el
cuadro de diálogo.
La referencia de archivo XFF, el objeto
de opciones y el objeto de progreso se
Nombre Descripción Versión XFRX

envían como parámetro.


Si el objeto controlador de extensión no
tiene Evento de correo electrónico,
entonces XFRX intente ejecutar
vfpWinsock automáticamente.
Parámetros:
toXFF: el controlador del archivo XFF
que se
envía por correo electrónico
a Parámetros: el objeto que contiene las
opciones de correo electrónico.
toProgress: objetos de progreso de
XFRX.

Email_BeforeTransportReport El evento se dispara antes de llamar al 17.0.0


método TransformReport ().
Parámetros:
toSession: el controlador del objeto
XFRX # SESSION.
toParameters: el objeto que contiene las
opciones de correo electrónico.

Email_AfterTransportReport El evento se desencadena después del 17.0.0


método de llamada TransformReport ().
Parámetros:
toSession: el controlador del objeto
XFRX # SESSION.
toParameters: el objeto que contiene las
opciones de correo electrónico.

El objeto de parámetro de correo electrónico tiene las siguientes propiedades:


Nombre Tipo Descripción Versión XFRX

cSMTP_HOST cuerda Host SMTP

nSMTP_PORT entero Puerto SMTP, 17.0.0


el valor
predeterminado
es 25.

cAUTH_Login cuerda Inicio de 17.0.0


sesión ESMTP.
Nombre Tipo Descripción Versión XFRX

cAUTH_Password cuerda Contraseña de 17.0.0


ESMPT

cFrom cuerda De la dirección


de correo
electrónico.

cFROM_Name cuerda Del nombre del 17.0.0


correo
electrónico

cTo cuerda Para la


dirección de
correo
electrónico.

cTO_Name cuerda Para el nombre 17.0.0


del correo
electrónico

cCC cuerda Dirección de


correo
electrónico de
copia de
carbono.

cCC_Name cuerda Nombre de 17.0.0


correo
electrónico de
copia de
carbono.

cBCC cuerda Dirección de


correo
electrónico
copia ciega.

ccuerpo cuerda Mensaje como


texto

cBodyHTML cuerda Mensaje como 17.0.0


HTML

cDATA_MHTML cuerda Nombre de 17.0.0


archivo con
datos MTH.

cSubject cuerda Tema.


Nombre Tipo Descripción Versión XFRX

cCodePage cuerda Página de 17.0.0


códigos para
asunto,
nombre,
mensaje, etc.
El valor
predeterminado
es "iso-8859-
1".
Pero puede
configurar
"windows-
1250" o
"windows-
1252".

lEnviar booleano Especifica si


un evento de
llamada XFRX
Correo
electrónico o
vfpWinsock.

lShowDialog booleano Especifica si 17.0.0


un XFRX
llama al cuadro
de diálogo
"Opciones de
correo
electrónico".

Los siguientes son ejemplos de los dos escenarios más comunes:

Suprime el comportamiento predeterminado y maneja el evento de correo electrónico


por tu cuenta

1 LOCAL m.loPreview<font></font>
2 m.loPreview = CREATEOBJECT("frmMPPreviewer")<font></font>
3 m.loPreview.iEmail = 1 && show the email icon<font></font>
4 m.loPreview.oExtensionHandler = CREATEOBJECT("SampleExtensionHandler")<font></font>
5 m.loPreview.PreviewXFF(LOCAL m.loXFF) && preview the document <font></font>
6 m.loPreview.show(1)<font></font>
7 <font></font>
8 DEFINE CLASS SampleExtensionHandler AS CUSTOM<font></font>
9 <font></font>
10 PROCEDURE Email<font></font>
11 LPARAMETERS m.loXFF[, [m.opt[, m.oProgress]]<font></font>
12 * loXFF - XFF file reference<font></font>
13 * m.opt - email options (since XFRX 17.0.0)<font></font>
14 * m.oProgress - XFRX progress object (since XFRX 17.0.0)<font></font>
15 LOCAL m.loSession, m.lcFileName<font></font>
16 m.loSession=EVALUATE([xfrx("XFRX#INIT")])<font></font>
17 m.lcFileName = Addbs(Sys(2023))+"test.pdf" && temporary file name<font></font>
18 IF m.loSession.SetParams(m.lcFileName,,.T.,,,,"PDF") = 0 && the 3rd parameter say
19 m.loSession.TransformReport(m.loXFF)<font></font>
20 <font></font>
21 LOCAL m.sm<font></font>
22 SET PROCEDURE TO vfpwinsock ADDITIVE <font></font>
23 m.sm = Createobject("vfp_winsock_send_mail")<font></font>
24 m.sm.smtp_host = "your.smtp.server.here" &&&<<<<<<<<<<<<<<<<<<<< put your smtp
25 m.sm.From = "eqeus@eqeus.com" <font></font>
26 m.sm.To = "eqeus@eqeus.com"<font></font>
27 m.sm.subject = "Email test"<font></font>
28 m.sm.silence = .T.<font></font>
29 m.sm.attaCHMENT = m.lcFileName<font></font>
30 IF !m.sm.Send()<font></font>
31 =MESSAGEBOX(m.sm.erreur,16,"xfrx test")<font></font>
32 ELSE<font></font>
33 =MESSAGEBOX("Message was sent",0,"xfrx test")<font></font>
34 ERASE (m.lcFileName)<font></font>
35 ENDIF<font></font>
36 ENDIF <font></font>
37 RETURN .F.<font></font>
38 ENDPROC<font></font>
39 <font></font>
40 ENDDEFINE

Utilice el cuadro de diálogo predeterminado, utilice un controlador de extensión para


proporcionar los parámetros del servidor de correo y permita que XFRX envíe el
correo electrónico.

1 DEFINE CLASS SampleExtensionHandler AS CUSTOM<font></font>


2 <font></font>
3 PROCEDURE EmailOptions<font></font>
4 LPARAMETERS m.loXFF, m.loOptions<font></font>
5 m.loOptions.cSMTP_HOST = "mail.your_domain.com"<font></font>
6 m.loOptions.cFrom = "eqeus@eqeus.com"<font></font>
7 ENDPROC<font></font>
8 <font></font>
9 ENDDEFINE
 Sin etiquetas

Notificaciones de banderas
Documentación XFRX
/
...
/
Previsualizador de XFRX

Localización del previsualizador

martinajindrova
12 de noviembre de 2017

Cada localización se almacena en dos archivos:

 XFRXLIB_ <localization_code> .dbf - traducción de cadenas


 XFRXLIB_ <localization_code> .vcx - localización de los diálogos de selección de página y
búsqueda

La localización predeterminada es inglés. Otra localización es CSY - Czech, SK - Slovak, FR -


French, DE - Germany, TR - Turkey.

Para crear una nueva localización, siga estos pasos:

1. Elija un código para su localización (por ejemplo, DE para alemán)


2. Cree una copia del DFB de localización predeterminado (localización \ default \
XFRXLIB_XXX.DBF (+ CDX, + FPT)). Cambie el sufijo de acuerdo con su código de
localización. El DBF de localización predeterminado contiene cadenas en inglés que deben
traducirse.
3. Cree la biblioteca de clase visual XFRXLIB_ <localization_code> .vcx usando localization \
default \ locClass.prg. Envíe el código de localización como un parámetro.
Ejemplo: copie locClass en el directorio XFRXLIB y llame a:

do locClass with "DE"

que creará la biblioteca de clases XFRXLIB_DE. Traduzca las dos clases de diálogo en la
biblioteca de clases.

1. Copie los archivos de localización al directorio XFRXLIB.

Para activar la localización en su código, llame al método setLanguage de la clase


XFCont. Envíe el código de localización como un parámetro.

Ejemplo:
This.cntXFRX.setLanguage("DE")

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX
/
...
/
Previsualizador de XFRX

Registro de errores

martinajindrova
Modificado por última vez nov 12, 2017

Puede usar el método setLogFile () para crear el registro (desde XFRX 15.5).

=m.loPreview.setLogFile(<tcLogFile>)

Parámetros:

tcLogFile
el nombre del archivo de registro para crear.

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX

Páginas

Guía del desarrollador


metadata.attachments
Implementación de hipervínculos de eventos
personalizados (desglose) en el
previsualizador de XFRX

Usuario desconocido (mst)

Modificado por última vez mar 22, 2017 por martinajindrova

XFRX reconoce dos tipos de hipervínculos:

 Hipervínculos "normales" (impresos en azul ), que navegan a otros lugares en el informe o


a una dirección web externa (usando hipervínculos se describe en detalle en el capítulo
" Funciones interactivas / hipervínculos " en la página 19) y
 Hipervínculos de "eventos personalizados" (impresos en verde ), donde XFRX permite
asignar un código de VFP personalizado que se llamará cuando los usuarios hagan clic en el
hipervínculo.

Esta función de hipervínculo de "evento personalizado" se puede utilizar para invocar


acciones específicas de la aplicación (formularios de información, procesos personalizados,
etc.) o para implementar la funcionalidad de desglose. La invocación de un informe
detallado donde el usuario de campo hizo clic se toma como parámetro para el informe
(por ejemplo, al hacer clic en el nombre de un cliente en el informe que enumera todos los
clientes, se puede ejecutar un informe con información detallada sobre este cliente
específico). El nuevo informe se puede dirigir a una nueva página de una vista previa de
varias páginas, que podría proporcionar un entorno cómodo para "profundizar" en
información específica, con la capacidad de volver al informe original sin cerrar la
comparación de informes actual, lado a lado. , exportando / imprimiendo informes
seleccionados, etc.

 Configuración de hipervínculos de eventos personalizados


 Acceder a la vista previa de llamadas
 Ejemplo de solución de profundización

Configuración de hipervínculos de eventos personalizados


Los hipervínculos de eventos personalizados se definen de la misma manera que los
hipervínculos normales: agrega #UR A HREF = a la etiqueta o comentario de campo,
seguido de "vfpev" como un "protocolo", seguido de una expresión de FoxPro para evaluar.

Ejemplo: Hello world

#UR A HREF = "vfpev: \\ messagebox ('Hello world')"


Si agrega esto a un campo de su informe, aparecerá un cuadro de mensaje de "Hola
mundo" cada vez que haga clic en ese campo.
Tenga en cuenta que el texto siguiente después de HREF = se evalúa durante la ejecución
del informe, en el momento en que el campo está por renderizarse. El resultado se
almacena con ese campo en particular y se evalúa nuevamente cuando los usuarios hacen
clic en el campo. Por ejemplo, si necesita llamar a su función con un ID de cliente como
parámetro (por ejemplo, almacenado en customers.cusID como un valor entero), use algo
como esto: #UR A HREF = "vfpev: \\ myfunction (" + trans (customers.cusID) + ")"

Durante la generación del informe, la expresión customers.cusID se evalúa y los resultados


(por ejemplo, myfunction (1), myfunction (2), etc.) se almacenan con los campos
individuales. La función Myfunction con el parámetro almacenado se llama cuando los
usuarios hacen clic en el campo.

Acceder a la vista previa de llamadas


En el caso de que el evento personalizado dé como resultado la ejecución de un nuevo
informe, la rutina que procesa el nuevo informe puede querer previsualizar el resultado
resultante en la vista previa original, en la que se produjo el evento de clic. En ese caso,
puede usar esta variable del visualizador como la referencia del previsualizador. Por
ejemplo, la siguiente definición de hipervínculo estaría enviando la referencia del
previsualizador como el segundo parámetro del método runreport:

#UR A HREF = "vfpev: \\ runreport ('" + allt (customerid_a) + "', thisviewer)"

Ejemplo de solución de profundización


(El siguiente ejemplo está disponible en el subdirectorio DrilldownSample de la evaluación,
así como en el paquete comercial).

La solución de muestra consiste en tres informes:

 Una página de índice de clientes seguida de una breve lista de clientes. Para cada cliente
hay una lista de los últimos tres pedidos, el número total de pedidos y la facturación total:
 Cuando hace clic en el nombre del cliente, se genera un nuevo informe con los detalles del
cliente, que enumera todos los pedidos del cliente:

 Al hacer clic en un número de orden, se genera un informe de detalles de la orden:

Cada vez que se genera un nuevo informe, se agrega como una nueva página al
contenedor de vista previa:

Aquí está el código fuente completo:


1 LPARAMS m.tnReportType, m.tuPar1, m.toViewer<font></font>

2 SET PATH TO src; xfrxlib; libs; drilldownsample<font></font>

3 <font></font>

4 LOCAL m.loSession, m.lnRetval, m.lcPageCaption, m.loPreview<font></font>

5 <font></font>

6 IF EMPTY(m.tnReportType)<font></font>

7 *<font></font>

8 * no report type was sent - we need to initialize the previewer<font></font>

9 * and run the 1st report<font></font>

10 *<font></font>

11 SET CLASSLIB TO xfrxlib<font></font>

12 m.loPreview = CREATEOBJECT("frmMPPreviewer")<font></font>

13 m.tnReportType = 1<font></font>
14 m.toViewer = m.loPreview<font></font>

15 ENDIF<font></font>

16 <font></font>

17 *<font></font>

18 * initialize the XFRX listener<font></font>

19 *<font></font>

20 m.loSession=EVALUATE([xfrx("XFRX#LISTENER")])<font></font>

21 m.lnRetval = loSession.SetParams(,,,,,,"XFF")<font></font>

22 IF m.lnRetval = 0<font></font>

23 *<font></font>

24 * now let’s see which report we want to run, select the data<font></font>

25 * and run the report<font></font>

26 *<font></font>

27 DO CASE<font></font>

28 CASE m.tnReportType = 1<font></font>

29 SELECT companyname ;<font></font>

30 FROM customers ;<font></font>

31 ORDER BY companyname INTO CURSOR custindex<font></font>

32 <font></font>

33 REPORT FORM custindex OBJECT m.loSession Nopageeject<font></font>

34 <font></font>

35 SELECT * ;<font></font>

36 FROM customers INNER JOIN orders ON customers.customerid = orders.customeri

37 INNER JOIN orderdetails ON orders.orderid = orderdetails.ord

38 ORDER BY customers.companyname, customers.customerid, orderDate Desc, order

39 INTO CURSOR custlist<font></font>

40 <font></font>

41 REPORT FORM custlist OBJECT m.loSession<font></font>


42 m.lcPageCaption = "Customers list"<font></font>

43 <font></font>

44 CASE m.tnReportType = 2<font></font>

45 SELECT * ;<font></font>

46 FROM customers INNER JOIN orders ON customers.customerid = orders.customeri

47 INNER JOIN orderdetails ON orders.orderid = orderdetails.ord

48 ORDER BY customers.companyname, customers.customerid, orders.orderid ;<font

49 WHERE customers.customerid = m.tuPar1 ;<font></font>

50 INTO CURSOR custlist<font></font>

51 <font></font>

52 REPORT FORM custDet OBJECT m.loSession<font></font>

53 m.lcPageCaption = "Customers detail ("+ALLTR(m.tuPar1)+")"<font></font>

54 <font></font>

55 CASE m.tnReportType = 3<font></font>

56 SELECT * ;<font></font>

57 FROM customers INNER JOIN orders ON customers.customerid = orders.customeri

58 INNER JOIN orderdetails ON orders.orderid = orderdetails.ord

59 INNER JOIN products ON products.productid = orderdetails.pro

60 ORDER BY customers.companyname, customers.customerid, orders.orderid ;<font

61 WHERE orders.orderid = m.tuPar1 ;<font></font>

62 INTO CURSOR custlist<font></font>

63 <font></font>

64 REPORT FORM OrdDet OBJECT m.loSession<font></font>

65 m.lcPageCaption = "Order detail ("+ALLTR(STR(m.tuPar1))+")"<font></font>

66 ENDCASE<font></font>

67 ENDIF<font></font>

68 <font></font>

69 *<font></font>
70 * now preview the report<font></font>

71 *<font></font>

72 m.toViewer.previewXFF(m.loSession.oxfdocument, m.lcPageCaption)<font></font>

73 *<font></font>

74 * show the preview if not yet visible<font></font>

75 *<font></font>

76 IF NOT loPreview.Visible<font></font>

77 *<font></font>

78 * preview in modal Windows<font></font>

79 *<font></font>

80 m.loPreview.Show(1)<font></font>

81 EENDIF

Como puede ver, el código se llama primero sin parámetros, que ejecuta automáticamente
el primer informe (lista de clientes). A continuación, se llama al mismo código
(recursivamente, cuando el previsualizador está en modo modal) desde la vista previa
cuando los usuarios hacen clic en el evento personalizado con parámetros que controlan
qué informe se debe ejecutar, qué parámetros se deben usar para la instrucción de
selección y qué se debe el título de la página correspondiente en el reproductor.

Los comentarios de los campos del informe se definen de la siguiente manera:


Informe Campo Comentario

Lista de Nombre del #UR A HREF = "vfpev: \\ runreport (2, '" + allt
clientes cliente (customerid_a) + "', thisviewer)"

Detalle del Número de #UR A HREF = "vfpev: \\ runreport (3," + allt (str
cliente orden (orderid_a)) + ", thisviewer)"

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX
/
Páginas
/
Guía del desarrollador
Conversión de informes a imágenes

Usuario desconocido (mst)


Modificado por última vez mar 22, 2017 por martinajindrova

XFRX puede exportar páginas de informes individuales como imágenes BMP, PNG, GIF,
JPEG (JPG) y EMF, múltiples páginas se pueden exportar a formato de imagen TIFF (TIF).

El proceso de generación de imágenes se divide en dos pasos:

1. el informe se genera como cursor XFF


2. Se llama al método savePicture de la clase XFRX # DRAW para generar la imagen (consulte
la referencia de clase XFRX # DRAW para obtener detalles y una lista completa de
parámetros)

La ventaja de este enfoque es que una vez que se genera el archivo XFF, es muy fácil
obtener el recuento de páginas, generar imágenes individuales en un ciclo, etc.

Si esto suena complicado, eche un vistazo al ejemplo, en realidad es bastante simple:


1 LOCAL m.loSession, m.lnRetVal<font></font>
2 m.loSession= xfrx("XFRX#INIT")<font></font>
3 *<font></font>
4 * nothing is sent as the file name, so only a memory cursor is created<font></font>
5 *<font></font>
6 m.lnRetVal =m.loSession.SetParams(,,,,,,"XFF") <font></font>
7 IF m.lnRetVal = 0<font></font>
8 m.loSession.ProcessReport("invoices") <font></font>
9 local m.loXFF, m.lnI, m.lnJpegQuality<font></font>
10 *<font></font>
11 * the finalize method returns a XFRX#DRAW object reference,<font></font>
12 * which will be used to save the pictures<font></font>
13 *<font></font>
14 m.loXFF = loSession.finalize()<font></font>
15 m.lnJpegQuality = 80<font></font>
16 *<font></font>
17 * loXFF.pagecount contains the number of pages of the <font></font>
18 * report that <font></font>
19 * was just generated<font></font>
20 *<font></font>
21 * we are now going to save all pages one by one as <font></font>
22 * separate jpeg pictures<font></font>
23 *<font></font>
24 FOR m.lnI = 1 TO m.loXFF.pagecount<font></font>
25 m.loXFF.savePicture("page"+ALLTRIM(STR(m.lnI))+".jpg", ;<font></font>
26 "jpg",m.lnI,m.lnI,24,m.lnJpegQuality)<font></font>
27 ENDFOR<font></font>
28 =MESSAGEBOX("Pictures saved.")<font></font>
29 ENDIF

Puede generar los siguientes formatos de imagen: TIFF (TIF), BMP, GIF, JPEG (JPG), PNG,
EMF. El TIFF admite varias páginas, por lo que todo el informe se convierte en un único
archivo. Para otros formatos de salida, se crea un archivo por página: el nombre del archivo
se toma del parámetro tcFilename con _% PAGENO%.

La siguiente tabla muestra la asignación entre los parámetros ampliados y los parámetros
del método SavePicture ().
SetOtherParams () Guardar foto()

DE tnDe

A tnTo

BPP tnBpp

CALIDAD JPEG tnJPEGQuality

ANCHO DE MINIATURAS tnTumbnailWidth

THUMBNAILHEIGHT tnThumbnailHeight

PAGESPERSHEET tnPagesPerSheet

ALLEVENODD tnAllEvenOdd

FINDSTRING laFindString

TRANSPARENTE (booleano) liBacgroundMode (número)

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX
/
Páginas
/
Guía del desarrollador

Encadenando oyentes en VFP 9.0

Usuario desconocido (mst)


Modificado por última vez mar 22, 2017 por martinajindrova
Las instancias de la clase XFRXListener se pueden encadenar juntas, así como con otros
oyentes de informes, de modo que se puedan generar múltiples formatos de salida
mediante un solo comando INFORMAR. El siguiente ejemplo crea objetos XFRXListener
para documentos HTML y PDF y los encadena junto con UpdateListener de FFC para
mostrar una barra de progreso durante la ejecución del informe. Este enfoque asegura que
los documentos HTML y PDF contendrán exactamente el mismo resultado (si hubiera dos
ejecuciones sucesivas de informes, los datos podrían haberse modificado).
1 LOCAL m.loObj, m.loObj2, m.loObj3<font></font>
2 m.loObj = xfrx("XFRX#INIT")<font></font>
3 m.loObj.targetType = "HTML"<font></font>
4 m.loObj.targetFileName = "invoices.htm"<font></font>
5 <font></font>
6 m.loObj2 = xfrx("XFRX#INIT")<font></font>
7 m.loObj2.targetType = "PDF"<font></font>
8 m.loObj2.targetFileName = "invoices.pdf"<font></font>
9 m.loObj.successor = m.loObj2<font></font>
10 <font></font>
11 m.loObj3 = NEWOBJECT("updatelistener", "_reportlistener.vcx")<font></font>
12 m.loObj3.thermFormCaption = "Report in progress ..."<font></font>
13 m.loObj2.successor = m.loObj3<font></font>
14 <font></font>
15 REPORT FORM myReport OBJECT m.loObj

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX

Páginas

Guía del desarrollador

Exportación de datos a XLSX y ODS

Martin Haluza

Modificado por última vez feb 03, 2018 por martinajindrova


Esta característica permite exportar datos de tabla / cursor a Excel u hojas de cálculo de
OpenOffice, de manera similar al comando COPY TO ... TYPE XL5, con las siguientes
mejoras:

 La cantidad de registros no está limitada a 65K. El límite de Excel actual es de 1.048.576 filas
por hoja. Si el número de filas exportadas es mayor, la salida se envía a varias hojas.
 El archivo generado puede tener hasta 2GB de tamaño
 Opciones de formato, incluido el formateo dinámico (condicional), ancho de columna,
nombres y estilos de encabezado y recorte de texto

Nota de rendimiento

Excel: en una gran exportación de datos con 60 columnas en total, la velocidad promedia
2.500 registros por segundo. Al formatear la función de devolución de llamada está
activada, la velocidad puede ser más lenta, dependiendo del número de columnas y las
opciones de formato.

OpenOffice: exportar a OpenOffice es actualmente más lento que exportar a Excel.

Distribución con su aplicación


XLSXTemplate.zip archivo, que ahora es parte del paquete de descarga XFRX, debe
distribuirse con su aplicación para que la exportación de datos funcione correctamente.

Ejecutando la exportación

Ejecute el procedimiento XFRX_CopyToXLSX o XFRX_CopyToODS dentro de XFRX.PRG / FXP


con los siguientes parámetros:

 lcAlias - Fuente ALIAS (requerido)


 lcFile - Nombre del archivo de salida (requerido)
 lcFCCallBack - Nombre de la función de devolución de llamada - consulte las opciones de
formato a continuación (opcional). La exportación con la función de devolución de llamada
es significativamente más lenta. Por favor, mira la nota de rendimiento anterior.
 lcSheetName - Nombre de la hoja de Excel (opcional)
 llAddHeader - Exportar nombres de columna como encabezado (opcional)
.F. - No agregue el encabezado
.T. - Agregar encabezado con filtro automático
0 - No agregar encabezado (desde XFRX 18.0)
1 - Agregar encabezado (desde XFRX 18.0)
3 - Agregar encabezado con filtro automático (desde XFRX 18.0)
 llShowGrid - Mostrar / ocultar grilla (opcional), el valor predeterminado es .T.
 loProgress - objeto barra de progreso XFRX (opcional)
 lcSheetGroupExpression: expresión para dividir datos en más hojas (XFRX 15.3)

Ejemplo
1 OPEN DATABASE "C:\Program Files (x86)\Microsoft Visual FoxPro 9\Samples\Northwind\Northw

2 USE "Invoices"<font></font>

3 SET PROCEDURE TO xfrx.prg<font></font>

4 m.liErr=XFRX_CopyToXLSX("Invoices", "test.xlsx", , "Invoices")<font></font>

5 IF m.liErr<>0<font></font>

6 ?"ERROR",m.liErr<font></font>

7 ENDIF

Barra de progreso

El último parámetro (loProgress) es una referencia de objeto de barra de progreso XFRX


opcional. Si se especifica, el proceso de exportación llamará al método UpdateProgress ()
en este objeto con información de progreso de exportación. Vea más en Running XFRX #
Mostrando la barra de progreso en VFP 8.0 .

Cancelando la exportación en progreso

El proceso de exportación comprueba el valor de la variable pública


m.gnStopXFRX. Obtenga más información en Running XFRX # Cancelación de generación
de informes en curso .

Opciones de formateo

El proceso de exportación de datos usa la siguiente configuración para formatear la salida


de datos:

 Valores de fecha


 ESTABLECE LA FECHA
 SET CENTURY
 FIJAR MARCA A

 Valores de fecha y hora


 ESTABLECE LA FECHA
 SET CENTURY
 FIJAR MARCA A
 SET SECONDS
 FIJAR HORAS PARA
 Números
 ESTABLECER DECIMALES A
 SET POINT TO
El formateo adicional se puede lograr mediante una función de devolución de llamada,
cuyo nombre especifique como el 4º parámetro de los métodos XFRX_CopyToXLSX /
XFRX_CopyToODS. Cuando se especifica la función de devolución de llamada, se llama
durante la exportación, con una matriz de todas las columnas con sus propiedades como
parámetro. El parámetro es una matriz: un elemento por columna. Cada elemento es
nuevamente una matriz con 12 elementos, que contiene atributos para cada columna.
igualmente Contenido

1 Nombre del campo

2 Tipo de campo

3 Ancho del campo

4 Decimales de campo

5 Indicador NULL

6 Indicador NOCPTRANS

7 Título del encabezado

8 Formato XLS

9 Ancho de columna en px

10 Formato de celda del encabezado - Objeto con atributos

11 Modo de recorte 0 - ninguno, 1 - LTRIM, 2 - RTRIM, 3 - ALLTRIM

12 Formato de celda de datos: objeto con atributos

Ejemplo

1 #DEFINE XFRX_FORMATCOL_FNAME 1 && Field name<font></font>

2 #DEFINE XFRX_FORMATCOL_FTYPE 2 && Field type<font></font>

3 #DEFINE XFRX_FORMATCOL_FWIDTH 3 && Field width<font></font>

4 #DEFINE XFRX_FORMATCOL_FDEC 4 && Field decimals<font></font>


5 #DEFINE XFRX_FORMATCOL_FNULL 5 && NULL indicator<font></font>

6 #DEFINE XFRX_FORMATCOL_FNOCPT 6 && NOCPTRANS indicator<font></font>

7 #DEFINE XFRX_FORMATCOL_CAPTION 7 && Header caption<font></font>

8 #DEFINE XFRX_FORMATCOL_XLSFORMAT 8 && XLS format<font></font>

9 #DEFINE XFRX_FORMATCOL_WIDTH 9 && Column Width in px<font></font>

10 #DEFINE XFRX_FORMATCOL_HCELLF 10 && Header cell format - Object with attributes<font

11 #DEFINE XFRX_FORMATCOL_TMODE 11 && Trim Mode 0 - none, 1 - LTRIM, 2 - RTRIM, 3 - AL

12 #DEFINE XFRX_FORMATCOL_DCELLF 12 && Data cell format - Object with attributes<font><

13 <font></font>

14 #DEFINE _TOXLSX_ERROR_OK 0 && OK <font></font>

15 #DEFINE _TOXLSX_ERROR_OpenTemplateFailed -1 && Cannot open template file<font></f

16 #DEFINE _TOXLSX_ERROR_PrepareFilesFailed -2 && Cannot create files<font></font>

17 #DEFINE _TOXLSX_ERROR_SaveToXLSXFailed -3 && Cannot create xlsx file (zlib.dll)

18 #DEFINE _TOXLSX_ERROR_SaveToXLSX_ODSFailed -200 && Cannot create xlsx/ods file (zlib.

19 <font></font>

20 <font></font>

21 ...<font></font>

22 m.liErr=XFRX_CopyToXLSX("test", "test.xlsx", "copytoxlsxfccallback", "test")<font></fon

23 ...<font></font>

24 <font></font>

25 PROCEDURE copytoxlsxfccallback(m.laFields)<font></font>

26 <font></font>

27 LOCAL ARRAY m.laColor(3)<font></font>

28 <font></font>

29 FOR m.lii=1 TO ALEN(m.laFields,1)<font></font>

30 m.laFields(m.lii,XFRX_FORMATCOL_CAPTION)="Description "+;<font></font>

31 LTRIM(STR(m.lii,11))+" "+;<font></font>

32 m.laFields(m.lii,XFRX_FORMATCOL_FNAME) &&
33 * Header cell format<font></font>

34 WITH m.laFields(m.lii,XFRX_FORMATCOL_HCELLF)<font></font>

35 .align="center" && horizontal align<font></font>

36 .font="Tahoma" <font></font>

37 .fontsize=12<font></font>

38 .bold=.T.<font></font>

39 .ital=.T.<font></font>

40 .underline=.T.<font></font>

41 .lstriked=.T. && StrikeThru <font></font>

42 __C2RGB(RGB(255,255,255),@m.laColor) && BackColor<font></font>

43 .fillred=m.laColor(1)<font></font>

44 .fillgreen=m.laColor(2)<font></font>

45 .fillblue=m.laColor(3) <font></font>

46 __C2RGB(RGB(192,192,192),@m.laColor) && ForeColor<font></font>

47 .penred=m.laColor(1)<font></font>

48 .pengreen=m.laColor(2)<font></font>

49 .penblue=m.laColor(3)<font></font>

50 ENDWITH<font></font>

51 <font></font>

52 * Data cell format<font></font>

53 WITH m.laFields(m.lii,XFRX_FORMATCOL_DCELLF)<font></font>

54 .lstriked=.T.<font></font>

55 .font="Courier New" <font></font>

56 .DynamicFontBold=[IIF(UNITPRICE>50,.T.,.F.)]<font></font>

57 .DynamicForeColor=[IIF(UNITPRICE>50,RGB(255,0,0),0)]<font></font>

58 .DynamicFontItalic=[IIF(UNITPRICE>50,.T.,.F.)]<font></font>

59 .DynamicFontUnderline=[IIF(UNITPRICE>50,.T.,.F.)]<font></font>

60 .DynamicFontName=[IIF(UNITPRICE>50,'Courier New','Arial')]<font></font>
61 .DynamicFontSize=[IIF(UNITPRICE>50,12,10)]<font></font>

62 .DynamicAlignment=[IIF(UNITPRICE>50,'center','')]<font></font>

63 .DynamicBackColor=[IIF(UNITPRICE>50,RGB(192,192,192),RGB(255,255,255))]<font></fo

64 .DynamicFontStrikeThru=[IIF(UNITPRICE>50,.T.,.F.)]<font></font>

65 ENDWITH<font></font>

66 *m.laFields(m.lii,XFRX_FORMATCOL_XLSFORMAT)="" && XLS cell format<font></font>

67 m.laFields(m.lii,XFRX_FORMATCOL_WIDTH)=100 && Width in pixels<font></font>

68 m.laFields(m.lii,XFRX_FORMATCOL_TMODE)=3 && Trim Mode 0 - none, 1 - LTRIM, 2 - RTRI

69 NEXT

Expresión del grupo de hojas


Si desea dividir datos en más lits, puede usar el parámetro lcSheetGroupExpression:

1 * lcAlias - Source ALIAS (required)<font></font>

2 * lcFile - Output file name (required)<font></font>

3 * lcFCCallBack - Callback function name - please see Formatting options below (optional

4* Exporting with the callback function is significantly slower. <font></

5* Please see the performance note above.<font></font>

6 * lcSheetName - Excel sheet name (optional); if contains %XFRX_SGV% thne will be replac

7 * llAddHeader - Export column names as header (optional)<font></font>

8 * llShowGrid - Show/hide grid (optional), default is .T.<font></font>

9 * loProgress - XFRX progress bar object (optional)<font></font>

10 (new) lcSheetGroupExpression - Expression for splitting data to more sheets<font></fon

11 <font></font>

12 OPEN DATABASE "C:\Program Files (x86)\Microsoft Visual FoxPro 9\Samples\Northwind\North

13 USE "Invoices"<font></font>

14 INDEX ON ORDERDATE TAG "I01" && data must be indexed<font></font>

15 <font></font>
16 SET PROCEDURE TO xfrx.prg<font></font>

17 m.liErr=XFRX_CopyToXLSX("Invoices", "test.xlsx", , "Year %XFRX_SGV%", .T.,.T.,,'YEAR(OR

18 IF m.liErr<>0<font></font>

19 ?"ERROR",m.liErr<font></font>

20 ENDIF<font></font>

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX
/
Páginas
/
Guía del desarrollador

Ejecución de XFRX en un entorno basado en


web

Usuario desconocido (mst)


Modificado por última vez may 11, 2014 por Martin Haluza

XFRX se puede incorporar fácilmente en aplicaciones compiladas como DLL COM para
proporcionar funciones de informes en el entorno basado en web.

Hemos preparado una aplicación de muestra de esta técnica. Está disponible en línea
en http://www.eqeus.net/x.net . Si está interesado en el código fuente de esta
demostración, envíenos un correo electrónico a support@eqeus.com y se lo enviaremos.

A Pavel Horak le gusta esto

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX

Páginas

Guía del desarrollador


metadata.attachments

Formato de texto

martinajindrova

Modificado por última vez jun 28, 2017

Formatos admitidos
Actualmente, se admiten dos formatos: pseudo HTML y código BB. RTF apoya está en
desarrollo.
Formatos admitidos

Nombr Palabr Descripción Versió Ejemplos


e a clave n XFRX

pseudo <TF> Compatible con <TF> de 17.1 TF-UNI.pdf, tf-


HTML FoxyPreviewer uni_flow.rtf, TF-
UNI.png ,
TF-UNI-
09.pdf ,TF-UNI-
11.pdf ,TF-UNI-
28.pdf

Código <BB> Ver 17.1 BB-UNI.pdf ,bb-


BB ahttp://www.bbcode.org/reference.php uni_flow.rtf, BB
-UNI.png

RTF <RTF> Consultehttps://www.microsoft.com/en 17.2.0


-us/download/details.aspx?id=10725
Configuración predeterminada: general
Nombre de Parametr Descripción Valor
Versión XFRX

TF_DEFAULTTABSIZE Tamaño predeterminado del "1 en"


tabelator.

TF_LINE_HEIGHT Altura de línea predeterminada. "20pt" 17.1.1

Configuración predeterminada - cita


Nombre de Parametr Descripción Valor

TF_QUOTE_MARGIN Margen "10px"


para cita.

TF_QUOTE_BACKCOLOR Color de "RGB


fondo para (192,192,192)"
la cita.

TF_QUOTE_POSTFIX Postfix del "escribió:"


autor para
la cita.

Configuración predeterminada - lista


Nombre de Parametr Descripción Valor

TF_LIST_MARGIN Margen para la "10px"


lista.

TF_LIST_TABSIZE Tabelator "15px"


predeterminado
para la lista.
Nombre de Parametr Descripción Valor

TF_LIST_ITEM_CHAR Char para la CHR (168)


lista
desordenada.

TF_LIST_ITEM_FONTNAME Nombre de la "Símbolo"


fuente para la
lista
desordenada.

TF_LIST_ITEM_OL_FORMAT Formato de "bajo


artículo pedido romano"

Configuración predeterminada - Tabla


Nombre de Parametr Descripción Valor

TF_TABLE_MARGIN Margen para la "10px"


mesa

TF_TABLE_PADDING Relleno de la "2px"


celda.

TF_TABLE_BORDERSTYLE Estilo de borde. "sólido"

TF_TABLE_BORDERCOLOR Color del borde. "RGB (0,0,0)"

TF_TABLE_BORDERWIDTH Ancho del borde "1px"


de la tabla

TF_TABLE_BACKGROUNDCOLOR Color de fondo de "RGB


la tabla. (192,192,192)"

TF_TABLE_THBACKGROUNDCOLOR Cabeza de tabla "rgb


color del (255,255,192)"
bacgroud
Nombre de Parametr Descripción Valor

TF_TABLE_ALIGN Tabla / columna "izquierda"


alinear.

TF_TABLE_TRBACKGROUNDCOLOR_EVEN Incluso el color de "RGB


fondo de la fila. (0,255,255)"

TF_TABLE_TRBACKGROUNDCOLOR_ODD Color de fondo de "RGB


fila impar. (128,255,191)"

1 m.loSession.setOtherParams( "TF_DEFAULTTABSIZE", "1in")<font></font>

2 m.loSession.setOtherParams( "TF_QUOTE_MARGIN", "10px")<font></font>

3 m.loSession.setOtherParams( "TF_QUOTE_BACKCOLOR", "RGB(192,192,192)")<font></font>

4 m.loSession.setOtherParams( "TF_QUOTE_POSTFIX", " wrote: ")<font></font>

5 <font></font>

6 <font></font>

7 m.loSession.setOtherParams( "TF_LIST_MARGIN", "10px",0) && default value for all levels

8 m.loSession.setOtherParams( "TF_LIST_MARGIN", "10px",3) && value for third level<font><

9 m.loSession.setOtherParams( "TF_LIST_TABSIZE", "15px")<font></font>

10 m.loSession.setOtherParams( "TF_LIST_ITEM_CHAR", "CHR(168)")<font></font>

11 m.loSession.setOtherParams( "TF_LIST_ITEM_FONTNAME", "1in")<font></font>

12 m.loSession.setOtherParams( "TF_LIST_ITEM_OL_FORMAT", "lower roman") && se to list-styl

13 <font></font>

14 m.loSession.setOtherParams( "TF_TABLE_MARGIN", "2px") && default value for all levels<f

15 m.loSession.setOtherParams( "TF_TABLE_PADDING", "3px")<font></font>

16 m.loSession.setOtherParams( "TF_TABLE_BORDERSTYLE", "solid")<font></font>

17 m.loSession.setOtherParams( "TF_TABLE_BORDERCOLOR", "rgb(0,0,0)")<font></font>

18 m.loSession.setOtherParams( "TF_TABLE_BORDERWIDTH", "1px")<font></font>

19 m.loSession.setOtherParams( "TF_TABLE_BACKGROUNDCOLOR", "rgb(205,205,205)")<font></font


20 m.loSession.setOtherParams( "TF_TABLE_BACKGROUNDCOLOR", "rgb(205,205,205)",0,3) && defa

21 m.loSession.setOtherParams( "TF_TABLE_THBACKGROUNDCOLOR", "rgb(255,255,192)")<font></fo

22 m.loSession.setOtherParams( "TF_TABLE_ALIGN", "left") && default value for all levels<f

23 <font></font>

24 m.loSession.setOtherParams( "TF_TABLE_ALIGN", "right",0,3) && default value for all lev

25 m.loSession.setOtherParams( "TF_TABLE_TRBACKGROUNDCOLOR_EVEN", "RGB(0,255,255)") && def

26 m.loSession.setOtherParams( "TF_TABLE_TRBACKGROUNDCOLOR_ODD", "RGB(128,255,191)") && de

27 <font></font>

28 <font></font>

29 <font></font>

30 m.loSession.setOtherParams( "TF_TABLE_PADDING", "3px",2) && default value for second l

31 m.loSession.setOtherParams( "TF_TABLE_BACKGROUNDCOLOR", "rgb(215,215,215)",0) && defaul

Cómo usar el formato de texto con XFRX # LISTENER


VFP 9.0 SP0 / SP1

En VFP 9.0 o VFP 9.0 con SP1, "Stretch with overflow" no es compatible. El texto enriquecido
se puede representar en cuadros de texto con una altura estática solamente.

VFP 9.0 SP2

En VFP 9.0 con SP2, el texto enriquecido se puede representar en el cuadro de texto con
altura dinámica o altura estática. Para que el cuadro de texto con altura dinámica funcione
correctamente, la propiedad CallEvaluateContents debe establecerse en 2:
loSession=EVALUATE([XFRX("XFRX#LISTENER")])<font></font>

loSession.CallEvaluateContents=2<font></font>

Textformat a la pantalla
La salida del formato de texto también puede dibujarse en la pantalla. Puede descargar el
paquete Textformat2Screen.zip con ejemplos para <tf> y <bb>.
DO tf2screen.prg WITH "<TF>","tf-001.txt"<font></font>
DO tf2screen.prg WITH "<BB>","bb-001.txt"<font></font>

<font></font>

<font></font>

* <tf> template examples<font></font>

USE "_data\tf" IN 0<font></font>

USE "_data\tf-child" IN 0 ORDER "I01" ALIAS tf_child<font></font>

SELECT tf<font></font>

SET RELATION TO XX010 INTO "tf_child"<font></font>

DO "tf2screen.prg" with "<TF>","TF-009.txt" && TR template<font></font>

<font></font>

<font></font>

USE "_data\tf" IN 0<font></font>

USE "_data\tf-child" IN 0 ORDER "I01" ALIAS tf_child <font></font>

SELECT tf <font></font>

SET RELATION TO XX010 INTO "tf_child" <font></font>

SKIP 1<font></font>

DO "tf2screen.prg" with "<TF>","TF-010.txt" && LI template<font></font>

<font></font>

<font></font>

<font></font>

USE "_data\tf" IN 0 <font></font>

USE "_data\tf-child" IN 0 ORDER "I01" ALIAS tf_child <font></font>

SELECT tf <font></font>

SET RELATION TO XX010 INTO "tf_child" <font></font>

SKIP 2 <font></font>

DO "tf2screen.prg" with "<TF>","TF-011.txt" && P template <font></font>

<font></font>

* <bb> template examples<font></font>


USE "_data\bb" IN 0 <font></font>

USE "_data\bb-child" IN 0 ORDER "I01" ALIAS bb_child <font></font>

SELECT bb <font></font>

SET RELATION TO XX010 INTO "bb_child" <font></font>

DO "tf2screen.prg" with "<BB>","BB-003.txt" && TR template<font></font>

<font></font>

<font></font>

USE "_data\bb" IN 0 <font></font>

USE "_data\bb-child" IN 0 ORDER "I01" ALIAS bb_child <font></font>

SELECT bb <font></font>

SET RELATION TO XX010 INTO "bb_child"<font></font>

SKIP 1<font></font>

DO "tf2screen.prg" with "<BB>","BB-004.txt" && LI template<font></font>

<font></font>

<font></font>

USE "_data\bb" IN 0 <font></font>

USE "_data\bb-child" IN 0 ORDER "I01" ALIAS bb_child <font></font>

SELECT bb <font></font>

SET RELATION TO XX010 INTO "bb_child" <font></font>

SKIP 1 <font></font>

DO "tf2screen.prg" with "<BB>","BB-005.txt" && LEFT template

 Formato de texto - HTML


 Formato de texto - Código BB
 Formato de texto - RTF
 Tabla de colores

 Formatos admitidos
 Configuración predeterminada: general
 Configuración predeterminada - cita
 Configuración predeterminada - lista
 Configuración predeterminada - Tabla
 Cómo usar el formato de texto con XFRX # LISTENER
 VFP 9.0 SP0 / SP1
 VFP 9.0 SP2
 Textformat a la pantalla

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX
/
...
/
Formato de texto - HTML

Formato de texto - HTML

martinajindrova
Modificado por última vez dic 24, 2017

La palabra clave es <TF>.


Etiquetas compatibles de FoxyPreviewer

Etiqueta de inicio Etiqueta darse cuenta


final

Negrit <b> </b>


a

Itálico <i> </i>

Subray <u> </u>


ar

Strike <s> </s>


Thru

Color <color=> </color <color=255,0,0></color>


> <color=255></color>
<color=#FF0000></color>
<c=> </c> <color="red"></color>
<color = RGB
(255,0,0)> <color = HSL
(0,100,50)></color>
</color>
<color=CMYK(0,1,1,0)></color>

Color <higlight=> </higl <higlight=255,0,0></higlight>


de ight>
fondo <h=> </h> <higlight=255></higlight>
<higlight=#FF0000></higlight>
<higlight="red"></higlight>
< higlight= RGB
(255,0,0)> < = HSL
(0,100,50)> < =CMYK
(0,1,1,0)></higlight>
higlight</higlight>
higlight</higlight>

Nombr <fontname=""> </font


e de la name>
fuente <fname=""> </fnam
e>

Tamañ <fontsize=> </font


o de size>
fuente
<fsize=> </fsiz
e>

Estilo <fontstyle=""> </fonts <fontstyle="BIUS">


de tyle> </fontstyle>
fuente <fstyle=""> </fsty
s le>

CRLF <br>

Etiquetas extendidas por XFRX

Etiqueta de Etiquet darse cuenta Atributos


inicio a final de CSS

Negr <strong> </stron Desde XFRX 17.3.1


ita g>

Itálic <em> </em> Desde XFRX 17.3.1


o

Sobr <sup> </sup>


escri
to

Subí <sub> </sub>


ndic
e

Párra <p> </p> <p style=""></p> texto


fo alineado;
margen;
relleno;
ancho del
borde;
estilo de
borde;
color de
fondo;
tab-stops;
curvatura;
guion de
texto;
dirección;
juego de
caracteres;

tamaño de
la
pestaña;
color;
nombre de
la fuente;
tamaño de
fuente;
Estilo de
fuente;
font-
weight;
texto-
decoració
n;
altura de
la línea;

Laps <span> </span> <span style=""></span> color de


o fondo;
juego de
caracteres;

color;
nombre de
la fuente;
tamaño de
fuente;
Estilo de
fuente;
font-
weight;
texto-
decoració
n;

Rect <rectangle> </recta <rectangle flotador;


ángu ngle> style=""></rectangle> margen;
lo anchura;
altura;
ancho del
borde;
estilo de
borde;
color de
fondo;
curvatura;
color;
izquierda;
derecho;
wrap-
image;
envolvent
e;

Imag <img> </img> <img>field</img> flotador;


en <img style="">field</img> margen;
anchura;
altura;
tramo;
posición;
izquierda;
derecho;
wrap-
image;
envolvent
e;

Line <hr> </hr> <hr></hr> flotador;


a <hr style=""></hr> margen;
horiz ancho del
ontal borde;
estilo de
borde;
anchura;
posición;
izquierda;
derecho;
wrap-
image;
envolvent
e;

Line <vr> </vr> <vr></vr> flotador;


a <vr style=""></vr> margen;
verti ancho del
cal borde;
estilo de
borde;
altura;
posición;
izquierda;
derecho;
wrap-
image;
envolvent
e;

Citar <quote> </quote <quote></quote> texto


> <quote name=""></quote> alineado;
margen;
relleno;
ancho del
borde;estil
o de
borde;colo
r de
fondo; tab
-
stops; curv
atura;
guion de
texto;direc
ción;
juego de
caracteres;
tamaño de
la
pestaña;
color;
nombre de
la fuente;
tamaño de
fuente;
Estilo de
fuente;
font-
weight;
texto-
decoració
n;altura de
la línea;

Códi <code> <code> texto


go alineado;
margen;
relleno;
ancho del
borde; esti
lo de
borde; col
or de
fondo; tab
-
stops; curv
atura;
guion de
texto; dire
cción;
juego de
caracteres;

tamaño de
la
pestaña;
color;
nombre de
la fuente;
tamaño de
fuente;
Estilo de
fuente;
font-
weight;
texto-
decoració
n; altura
de la
línea;

Text <pre> </pre> texto


o alineado;
prefo margen;
rmad relleno;
o ancho del
borde; esti
lo de
borde; col
or de
fondo; tab
-
stops; curv
atura;
guion de
texto; dire
cción;
juego de
caracteres;

tamaño de
la
pestaña;
color;
nombre de
la fuente;
tamaño de
fuente;
Estilo de
fuente;
font-
weight;
texto-
decoració
n; altura
de la
línea;

Lista <ol> </ol> <ol style=""> list-style-


orde <li>First</li> type;
<li>Second</li>
nada </ol> texto
alineado;
margen;
relleno;
ancho del
borde;
estilo de
borde; col
or de
fondo; tab
-stops;
curvatura;
guion de
texto;
dirección;
juego de
caracteres;

tamaño de
la
pestaña;
color;
nombre de
la fuente;
tamaño de
fuente;
Estilo de
fuente;
font-
weight;
texto-
decoració
n;

Lista <ul> </ul> <ul style=""> list-style-


deso <li>First</li> image;
<li>Second</li>
rden </ul> texto
ada alineado;
margen;
relleno;
ancho del
borde;
estilo de
borde; col
or de
fondo; tab
-stops;
curvatura;
guion de
texto;
dirección;
juego de
caracteres;

tamaño de
la
pestaña;
color;
nombre de
la fuente;
fontt-size;
Estilo de
fuente;
font-
weight;
texto-
decoració
n;
<list> </list> <list style=""> list-style-
<li>First</li> image;
<li>Second</li>
</list> texto
alineado;
margen;
relleno;
ancho del
borde;
estilo de
borde; col
or de
fondo; tab
-stops;
curvatura;
guion de
texto;
dirección;
juego de
caracteres;

tamaño de
la
pestaña;
color;
font-name
font-size;
Estilo de
fuente;
font-
weight;
texto-
decoració
n;

Lista <li> </li> <li style=""> </li> list-style-


de image;
artic texto
ulos alineado;
margen;
relleno;
ancho del
borde;
estilo de
borde; col
or de
fondo; tab
-stops;
curvatura;
guion de
texto;
dirección;
juego de
caracteres;

tamaño de
la
pestaña;
color;
nombre de
la fuente;
tamaño de
fuente;
Estilo de
fuente;
font-
weight;
texto-
decoració
n;

Expr <vfpev> </vfpev <vfpev>DTOC(DATE())+"


esión > "+TIME()</vfpev>
de
VFP

Expr <vfpev </vfpev <vfpev


esión pictureformat= > pictureformat="99.99" xlsf
de "" xlsf=""> ="#0.00">10</vfpev>
VFP
con
form
ato
de
conv
ersió
n

Hipe <a href=""> </a> <a href="static


renla address"></a>
<a href="'string
ce expression'"></a>
<a href="field"></a>

<a name=""> </a> <a name="#static


name"></a>
<a name="'#string
expression'"></a>
<a name="'#'+field"></a>

Tabe <tab/> <tab/>


lator
<tab=/> <tab = X count of tabelators
X />

Pági <fcp=Xfontchar </fcp> <fcp=42></fcp>


na set=""> <fcp=65001
fontcharset="238"></fcp>
de
códi
go

Bloq <options> </optio <options>TF_LIST_ITEM_CHA


ue ns> R=CHR(168)</options>
de
opci
ones

Mes <table> </table <table>


a > <tr><th></th><th></th></tr
>
<tr><td></td><td></td></tr
>
</table>

Amp template="ali <table>


liar as_expression" <tr><th></th><th></th></tr
>
fila <tr
por template="alias_expression
alias ">
fuent <td><vfpev>Expression</vfp
ev></td>
e </tr>
</table>

<ul>
<li
template="alias_expression
"><vfpev>Expression</vfpev
></li>
</ul>

<p template="alias_express
ion">
<vfpev>Expression</vfpev><
/p>

Atributos de CSS

Nombre Valores darse cuenta

izquierda tamaño | por ciento 10pt o 12px o 1cm


10%

parte tamaño | por ciento 10pt o 12px o 1cm


superior 10%

anchura tamaño | por ciento 10pt o 12px o 1cm


10%

altura tamaño | por ciento 10pt o 12px o 1cm


10%

derecho tamaño | por ciento 10pt o 12px o 1cm


10%
posición estático | relativo | absoluto
| párrafo relativo

tramo clip | isométrico | tramo

curvatura número sin unidades

flotador izquierda | derecho | centro Para los valores que quedan | derecho
| texto arriba-abajo | texto- puede ser posición solo estática.
rectángulo Para valores text-top-bottom | texto-
rectángulo puede ser solo posición
absoluta | párrafo relativo.
Centro de valores agregado en XFRX
17.2.0.
Valores text-top-bottom | texto-
rectángulo están en desuso desde
XFRX 17.2.0.

wrap-image texto arriba-abajo | texto- Atributo agregado en XFRX 17.2.0.


rectángulo

envolvente ambos | izquierda | derecho Atributo agregado en XFRX 17.2.0.

list-style- decimal |
type decimal con corchete |
romano superior |
romano superior con soporte
|
latín superior |
latín superior con soporte |
bajo latino |
bajo latín con soporte |
romano superior |
romano superior con soporte

list-style- url ('') url ('filename.png')


image 'expresión'

juego de windows-1250 | windows- que sabe que VFP


caracteres 1252 | windows-42 es para fuente de
windows-1251 símbolos

dirección ltr | RTL

nombre de la "Arial" | "Símbolos", etc.


fuente
tamaño de tamaño 10pt o 12px o 1cm
fuente

tamaño de la tamaño 10pt o 12px o 1cm


pestaña

tab-stops Tamaño del centro izquierda izquierda 1 en el centro 1 a la derecha


tamaño correcto 1 pulgada;

texto izquierda | centro | derecho


alineado | bloque | justificar

guion de tamaño 10pt o 12px o 1cm


texto

Estilo de normal | cursiva heredar


fuente

fuente-peso normal | negrita | heredar

texto- normal | subrayar | línea de


decoración salida | heredar

color de R, G, B | #HEX | "Nombre de


fondo color WEB" |
rgb (r, g, b) | hsl (h, s, l)
| cmyk (c, m, y, k)

color R, G, B | #HEX | "Nombre de


color WEB" |
rgb (r, g, b) | hsl (h, s, l)
| cmyk (c, m, y, k)

altura de la tamaño | número | por ciento 10pt o 12px o 1cm


línea 2.5 es coficiente para el tamaño de
letra del párrafo
250% es coficiente para el tamaño de
letra del párrafo

margen A arriba-derecha-abajo-izquierda
B arriba-abajo, derecha-izquierda
A BC arriba, derecha-izquierda, abajo
A B CD arriba, derecha, abajo izquierda

margen tamaño
superior

margen- tamaño | por ciento


derecho
margen tamaño
inferior

margen tamaño | por ciento


izquierdo

relleno A arriba-derecha-abajo-izquierda
AB arriba-abajo, derecha-izquierda
A BC arriba, derecha-izquierda, abajo
A B CD arriba, derecha, abajo izquierda

acolchado tamaño
superior

relleno- tamaño | por ciento


derecho

fondo tamaño
acolchado

relleno tamaño | por ciento


izquierdo

ancho del tamaño


borde

estilo de ninguno | punteado


borde | discontinua | dashdot
|dashdotdot | sólido

unidades px | pt | en | cm | mm | pc | % % (solo para ancho, alto, izquierda,


| rem | em | ex | vw | vh |vmin arriba, derecha, margen, relleno,
| vmax | tw tamaño de fuente, altura de línea)
La unidad vh es significativa para la
altura fija del cuadro de texto en el
informe.

Las unidades vw, vh, vmin, vmax se


agregaron en XFRX 17.1.1 La
unidad tw se agregó en XFRX 17.1.3

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX
/
...
/
Formato de texto

Formato de texto - Código BB

martinajindrova
Modificado por última vez abr 23, 2017

La palabra clave es <BB>.


Etiquetas compatibles de bbcode.org

Etiqueta de inicio Etiqueta darse cuenta


final

Negrita [b] [/b]

Itálico [i] [/i]

Subrayar [u] [/u]

StrikeTh [s] [/s]


ru

Color [color=] [/color] [color=255,0,0][/color]


[color=255][/color]
[color=#FF0000][/color]
[color="red"][/color]
[color=RGB(255,0,0)][/color]
[color=HSL(0,100,50)][/color]

[color=CMYK(0,1,1,0)][/color]

Tamaño [size=] [/size]


de
fuente

Estilo de [style] [/style] [style color=#FF0000


fuentes size="10px"] [/style]

Hiperenl [url] [/url] [url="expression"][/url]


ace [url="expression"]text[/url]

Imagen [img] [/img] [img]image.png[/img]


[img width=
height=]image.png[/img]
[img
=widthxheight]image.png[/img]
[img]"expression"[/img]

Citar [quote] [/quote] [quote][/quote]


[quote=name][/quote]

Código [code] [code]

Texto [pre] [/pre]


preforma
do

Texto de [left] [/left]


alineació
n a la
izquierda

Alinear [right] [/right]


el texto a
la
derecha

Centrar [center] [/center


el texto ]
en el
centro

Lista [ol] [/ol] [ol]


ordenada [li]First[/li]
[li]Second[/li]
[/ol]

Lista [ul] [/ul] [ul]


desorden [li]First[/li]
[li]Second[/li]
ada [/ul]

[list] [/list] [list]


[li]First[/li]
[li]Second[/li]
[/list]

Mesa [table] [/table] [table]


[tr][th][/th][th][/th][/tr]
[tr][td][/td][td][/td][/tr]
[/table]

Etiquetas extendidas y atributos por XFRX

Etiqueta de Etiquet darse cuenta


inicio a final

Bloque [block] [/bloc Justificar la alineación


ar k]
alinear
texto

Tabelat [tab/] [tab/] [tab=X/]


or

Sobres [sup] [/sup]


crito

Subíndi [sub] [/sub


ce ]

Expresi [vfpev] [/vfpe [vfpev]DTOC(DATE())+"


ón de v] "+TIME()[/vfpev]
VFP

Expresi [vfpev [/vfp [vfpev


ón de pictureformat= ev] pictureformat="99.99" xlsf="#0.00"]1
VFP "" xlsf=""] 0[/vfpev]
con
format
o de
convers
ión

Bloque [options] [/opt [options]TF_LIST_ITEM_CHAR=CHR(168)[


de ions] /options]
opcion
es

Backgr bgcolor= [table


oundco bgcolor=rbg(192,192,192)][tr bgcolor
=rbg(135,153,237)][th][/th][th][/th]
lor para [/tr]
tablas, [tr][td bgcolor=rbg(183,244,131)][/t
filas y d][td][/td][/tr]
celdas [/table]

Amplia template="ali [table]


r fila as_expression" [tr][th][/th][th][/th][/tr]
[tr
por template="alias_expression"][td][vfp
alias ev]FIELD[/vfpev][/td][/tr]
fuente [/table]

[ul]
[li
template="alias_expression"][vfpev]F
IELD[/vfpev][/li]
[/ul]

[left
template="alias_expression"][vfpev]F
IELD[/vfpev][/left]

[ plantilla derecha =
"alias_expression"][vfpev]FIELD[
/vfpev][/right]

[ plantilla del centro =


"alias_expression"][vfpev]FIELD[
/vfpev][/center]

[block template =
"alias_expression"][vfpev]FIELD[
/vfpev][/block]

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX
/
...
/
Formato de texto

Formato de texto - RTF

martinajindrova
Modificado por última vez oct 13, 2017

La palabra clave es <RTF>.


Tokens compatibles por RTF

Simbólico darse cuenta Ve


rsi
ón

Propiedades del papel

Anchu \paperw Ancho de papel en twips 17.


ra 3

Altura \paperh Altura del papel en twips 17.


3

Marge \margl Margen a la izquierda en twips 17.


n 3
dejado

Marge \margr Margen a la derecha en twips 17.


n 3
derech
o

Marge \margt Margen superior en twips 17.


n 3
superio
r

Marge \margb Margen abajo en twips 17.


n 3
inferior

Propiedades del texto

Negrita \b Activar negrita


\b0 Desactivar negrita

Itálico \i Activar cursiva


\i0 Desactivar cursiva

Subray \ul Activar subrayado


ar
\ul0 Desactivar subrayado

StrikeT \strike Activar strikethru


hru
\strike0 Desactivar strikethru

Sobres \super Activar superíndice


crito

Subínd \sub Activar subíndice


ice

\ nosupersub Activar superíndice y subíndice 17.


3

Color \cfN \cf1 - índice en la tabla de colores

Color \cbN \cb1 - índice en la tabla de colores


de
fondo \chcbpatN \chcbpat1 - índice en la tabla de
colores

Nombr \fN \f0 - índice en la tabla de fuentes


e de la
fuente

Tamañ \fsN \fs40 - tamaño de letra * 2


o de
fuente

Página \ansicpgN \ansicpg1252


de
código

Propiedades de párrafo

Marge \sbN \sb420 - espacio antes del párrafo


n en twips
superio
r

Marge \saN \sa420 - espacio tras párrafo en


n twips
inferior

Marge \liN \li420 - espacio desde el párrafo


n de la izquierda en twips
dejado

Marge \riN \ri420 - espacio del párrafo


n correcto en twips
derech
o

Altura \slN \sl1500 - párrafo de altura de


de la línea en twips / múltiple
línea
\slmultN \slmult0- Altura de
lne\slmult1 - Hilo de línea
múltiple

Alinea \ql Alineación izquierda


ción
del \qr Alineación correcta
texto
\qc Alineación del centro
\qj Bloquear / justificar la alineación

Tab \txN \tx2000 - Tope de tabulación


detiene izquierdo en twips
\tqr \tqr\tx2000 - parada de
tabulación derecha en twips
\tqc \tqc\tx2000 - parada de
tabulación central en twips

Color \cbpatN \cbpat1 - índice en la tabla de


de colores
fondo

Guion \fiN \fi420 - sangría de primera línea


de en twips
texto

Tamañ \deftabN \deftab - tamaño de tabulación


o de la predeterminado en twips
pestaña

Fronter \brdrcfN \brdrcf1 - índice en la tabla de


a colores
\brspN \brsp200 - espacio entre boder y
texto en twips
\brdrwN \brdrw20 - ancho del borde en
twips
\brdrnone Ninguno borde
\brdrdot Borde de puntos
\brdrdash Borde del tablero
\brdrdashd Borde del punto de la rociada
\brdrdashdot Borde del punto de la rociada
\brdrdashdd Dash dot dot border
\brdrs Borde sólido

Tokens de control

Tabelat \tab
or

CRLF \line

Párrafo \par

\pard Restablecer propiedades de


párrafo
\plain Restablecer propiedades de texto
Salto \page 17.
de 3
página

Secció \sect 17.


n 3

Objetos

Líneas, \shp 17.


formas, 3
\pict
imágen
es

Tokens extendidos por XFRX

Simbólico darse cuenta Atributos de


CSS

Expr \*\vfpev {\vfpev {DTOC(DATE())+"


esión "+TIME()}}
de
VFP

Expr {\vfpev {\pictureformat99.99} {


esión \xlsf#0.00} {10}}
de
VFP
con
form
ato
de
conv
ersió
n

Expa \*\template {\template {alias_expression}}


ndir
por
alias
fuent
e

Sobre \*\super0 Desactivar superíndice


scrito

Subín \*\sub0 Desactivar subíndice


dice
Citar <quote> <quote></quote> <quote texto
name=""></quote> alineado; marg
en; relleno; anc
ho del
borde; estilo de
borde; color de
fondo; tab-
stops; curvatur
a; guion de
texto; dirección
; juego de
caracteres; tam
año de la
pestaña; color;
nombre de la
fuente; tamaño
de
fuente; Estilo
de fuente; font-
weight; texto-
decoración; alt
ura de la línea;

Códi <code> texto


go alineado; marg
en; relleno; anc
ho del
borde; estilo de
borde; color de
fondo; tab-
stops; curvatur
a; guion de
texto; dirección
; juego de
caracteres; tam
año de la
pestaña; color;
nombre de la
fuente; tamaño
de
fuente; Estilo
de fuente; font-
weight; texto-
decoración; alt
ura de la línea;

Texto <pre> texto


prefo alineado; marg
rmad en; relleno; anc
o ho del
borde; estilo de
borde; color de
fondo; tab-
stops; curvatur
a; guion de
texto; dirección
; juego de
caracteres; tam
año de la
pestaña; color;
nombre de la
fuente; tamaño
de
fuente; Estilo
de fuente; font-
weight; texto-
decoración; alt
ura de la línea;

Lista <ol> <ol style=""> <li>First</li> list-style-


orden <li>Second</li> </ol> type; texto
ada alineado; marg
en; relleno; anc
ho del
borde; estilo de
borde; color de
fondo; tab-
stops; curvatur
a; guion de
texto; dirección
; juego de
caracteres; tam
año de la
pestaña; color;
nombre de la
fuente; tamaño
de
fuente; Estilo
de fuente; font-
weight; texto-
decoración;

Lista <ul> <ul style=""> <li>First</li> list-style-


desor <li>Second</li> </ul> image; texto
dena alineado; marg
da en; relleno; anc
ho del
borde; estilo de
borde; color de
fondo; tab-
stops; curvatur
a; guion de
texto; dirección
; juego de
caracteres; tam
año de la
pestaña; color;
nombre de la
fuente;
fontt-
size; Estilo de
fuente; font-
weight; texto-
decoración;
<list> <list style=""> <li>First</li> list-style-
<li>Second</li> </list> image; texto
alineado; marg
en; relleno; anc
ho del
borde; estilo de
borde; color de
fondo; tab-
stops; curvatur
a; guion de
texto; dirección
; juego de
caracteres; tam
año de la
pestaña; color;
font-name
font-
size; Estilo de
fuente; font-
weight; texto-
decoración;

Lista <li> <li style=""> </li> list-style-


de image; texto
articu alineado; marg
los en; relleno; anc
ho del
borde; estilo de
borde; color de
fondo; tab-
stops; curvatur
a; guion de
texto; dirección
; juego de
caracteres; tam
año de la
pestaña; color;
nombre de la
fuente; tamaño
de
fuente; Estilo
de fuente; font-
weight; texto-
decoración;

Hiper <a href=""> <a href="static


enlac address"></a> <a href="'string
expression'"></a> <a
e href="field"></a>

<a name=""> <a name="#static name"></a> <a


name="'#string
expression'"></a> <a
name="'#'+field"></a>

Bloq <options> <options>TF_LIST_ITEM_CHAR=CHR(


ue de 168)</options>
opcio
nes

Mesa <table> <table> <tr><th></th><th></th><


/tr> <tr><td></td><td></td></tr
> </table>

Ampl template="ali <table> <tr><th></th><th></th><


iar as_expression" /tr> <tr
template="alias_expression"> <t
fila d><vfpev>Expression</vfpev></td
por > </tr> </table>
alias
fuent <ul> <li
template="alias_expression"><vf
e pev>Expression</vfpev></li>
</ul>

<p template="alias_expression">
<vfpev>Expression</vfpev></p>

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX
/
...
/
Formato de texto

Tabla de colores

martinajindrova
Modificado por última vez mar 26, 2017

#FF0000 Red #BDEDFF Robin Egg Blue


#00FFFF Cyan #CFECEC Pale Blue Lily
#0000FF Azul #E0FFFF Cian claro
#0000A0 Azul oscuro #EBF4FA Agua
#ADD8E6 Azul claro #F0F8FF Alice azul
#800080 Púrpura #F0FFFF Azur
#FFFF00 Amarillo #CCFFFF Light Slate
#00FF00 Lima #93FFE8 Luz aguamarina
#FF00FF Magenta #9AFEFF Azul eléctrico
#FFFFFF Blanco #7FFFD4 Aguamarina
#C0C0C0 Plata #00FFFF Cyan o Aqua
#808080 gris #7DFDFE Tron azul
#808080 Gris #57FEFF Zircon azul
#000000 Negro #8EEBEC Laguna Azul
#FFA500 naranja #50EBEC Celeste
#A52A2A marrón #4EE2EC Diamante azul
#800000 Granate #81D8D0 Tiffany Blue
#008000 Verde #92C7C7 Cyan Opaque
#808000 Aceituna #77BFC7 Hosta azul
#000000 Negro #78C7C7 Aurora boreal
azul
#0C090A Noche #48CCCD Turquesa Medio
#2C3539 Gunmetal #43C6DB Turquesa
#2B1B17 Medianoche #46C7C7 Medusa
#34282C Carbón #43BFC7 Guacamayo azul
verde
#25383C Gris pizarra #3EA99F Luz Mar Verde
oscuro
#3B3131 Petróleo #3B9C9C Turquesa oscuro
#413839 Gato negro #438D80 Sea Turtle Green
#3D3C3A Iridium #348781 Medio
aguamarina
#463E3F Anguila negra #307D7E Azul verdoso
#4C4646 Vaca negra #5E7D7E Gris turquesa
#504A4B Lobo gris #4C787E Beetle Green
#565051 Vampire Grey #008080 Teal
#5C5858 Grey Dolphin #4E8975 Mar verde
#625D5D Gris carbón #78866B C amouflage
verde
#666362 Gris ceniza #848b79 Sage Green
#6D6968 Gris nublado #617C58 Hazel Green
#726E6D Smokey Gray #728C00 Venom Green
#736F6E gris #667C26 Fern Green
#837E7C Granito #254117 Dark Forrest
Green
#848482 Acorazado gris #306754 Medium Sea
Green
#B6B6B4 Nube gris #347235 Verde medio del
bosque
#D1D0CE Ganso gris #437C17 Verde de algas
marinas
#E5E4E2 Platino #387C44 Pino verde
#BCC6CC Plata metálica #347C2C Jungle Green
#98AFC7 Gris azulado #347C17 Shamrock Green
#6D7B8D Gris pizarra #348017 Medium Spring
claro Green
#657383 Gris pizarra #4E9258 Bosque verde
#616D7E Jet Grey #6AA121 Cebolla verde
#646D7E Mist Blue #4AA02C Primavera verde
#566D7E Marble Blue #41A317 Verde lima
#737CA1 Azul pizarra #3EA055 Clover Green
#4863A0 Azul acero #6CBB3C Serpiente verde
#2B547E Arrendajo azul #6CC417 Alien Green
#2B3856 Dark Slate #4CC417 Manzana verde
Blue
#151B54 Azul de #52D017 Amarillo verde
medianoche
#000080 Azul marino #4CC552 Kelly verde
#342D7E Ballena azul #54C571 Zombie Green
#15317E Lapis Blue #99C68E Rana verde
#151B8D Azul Aciano #89C35C Guisantes verdes
#0000A0 Tierra Azul #85BB65 Dollar Bill Green
#0020C2 Azul cobalto #8BB381 Dark Sea Green
#0041C2 Blueberry Blue #9CB071 Iguana Green
#2554C7 Azul zafiro #B2C248 Aguacate Verde
#1569C7 Ojos azules #9DC209 Pistacho Verde
#2B60DE Azul real #A1C935 Ensalada verde
#1F45FC Orquídea azul #7FE817 Colibrí verde
#6960EC Loto azul #59E817 Nebula Green
#736AFF Light Slate #57E964 Semáforo Go
Blue Green
#357EC7 Azul pizarra #64E986 Algas verdes
#368BC1 Glacial Blue #5EFB6E Jade verde
Ice
#488AC7 Azul seda #00FF00 Verde
#3090C7 Blue Ivy #5FFB17 Verde esmeralda
#659EC7 Blue Koi #87F717 Lawn Green
#87AFC7 Columbia Blue #8AFB17 chartreuse
#95B9C7 Bebe azul #6AFB92 Dragon Green
#728FCE Luz acero azul #98FF98 Menta verde
#2B65EC Océano azul #B5EAAA Pulgar verde
#306EFF Cinta azul #C3FDB8 Luz Jade
#157DEC Vestido azul #CCFB5D Té verde
#1589FF Dodger Blue #B1FB17 Verde amarillo
#6495ED Azul Aciano #BCE954 Slime Green
#6698FF Cielo azul #EDDA74 Vara de oro
#38ACEC Mariposa azul #EDE275 Harvest Gold
#56A5EC Iceberg #FFE87C Sun Yellow
#5CB3FF Azul cristal #FFFF00 Amarillo
#3BB9FF Deep Sky Blue #FFF380 Maíz amarillo
#79BAEC Denim Blue #FFFFC2 Pergamino
#82CAFA Luz azul cielo #FFFFCC Crema
#82CAFF Día azul cielo #FFF8C6 Chifón de limón
#A0CFEC Jeans Blue #FFF8DC Seda de maiz
#B7CEEC Angel Azul #F5F5DC Beige
#B4CFEC Azul pastel #FBF6D9 Rubia
#C2DFFF Azul marino #FAEBD7 Blanco antiguo
#C6DEFF Azul pálido #F7E7CE champán
#AFDCEC Coral Blue #FFEBCD BlanchedAlmond
#ADDFFF Azul claro #F3E5AB Vainilla
#ECE5B6 Tan Brown #E66C2C Naranja de
Halloween
#FFE5B4 melocotón #F87217 Calabaza naranja
#FFDB58 Mostaza #F87431 Construcción
Cono Naranja
#FFD801 Caucho Ducky #E67451 Sunrise Naranja
Amarillo
#FDD017 Oro brillante #FF8040 Mango Naranja
#EAC117 marrón dorado #F88017 Naranja oscuro
#F2BB66 Macarrones #FF7F50 Coral
con queso
#FBB917 Azafrán #F88158 Basket Ball
Orange
#FBB117 Cerveza #F9966B Salmón claro
#FFA62F Cantalupo #E78A61 Mandarina
#E9AB17 Abeja amarilla #E18B6B Salmón oscuro
#E2A76F Azúcar morena #E77471 Coral claro
#DEB887 BurlyWood #F75D59 Frijol rojo
#FFCBA4 Deep Peach #E55451 Valentine Red
#C9BE62 Ginger Brown #E55B3C Impactante
naranja
#E8A317 Autobús #FF0000 Red
escolar
amarillo
#EE9A4D Sandy Brown #FF2400 Escarlata
#C8B560 Caída hoja #F62217 Rojo rubí
marrón
#D4A017 Orange Gold #F70D1A Ferrari Red
#C2B280 Arena #F62817 Fire Engine Red
#C7A317 Cookie Brown #E42217 Lava Red
#C68E17 Caramelo #E41B17 Amo el rojo
#B5A642 Latón #DC381F Pomelo
#ADA96E Caqui #C34A2C Castaño Rojo
#C19A6B Camel marrón #C24641 Rojo cereza
#CD7F32 B ronze #C04000 Caoba
#C88141 Tiger Orange #C11B17 Pimiento picante
#C58917 Canela #9F000F Arándano
#AF9B60 Casquillo de #990012 Vino tinto
bala
#AF7817 Vara de oro #8C001A borgoña
oscuro
#B87333 Cobre #954535 castaña
#966F33 Madera #7E3517 Sangre roja
#806517 Marrón roble #8A4117 Tierra de siena
#827839 Mocasín #7E3817 derramamiento
de sangre
#827B60 Ejército #800517 Ladrillo
marrón refractario
#786D5F Arenisca #810541 Granate
#493D26 Moca #7D0541 Pastel de ciruela
#483C32 Gris pardo #7E354D Velvet Maroon
#6F4E37 café #7D0552 Plum Velvet
#835C3B Oso café #7F4E52 Rosy Finch
#7F5217 Red Dirt #7F5A58 chip
#7F462C Sepia #7F525D Opaco morado
#C47451 Salmón #B38481 Rosy Brown
naranja
#C36241 Moho #C5908E Khaki Rose
#C35817 Zorro rojo #C48189 Arco Rosa
#C85A17 Chocolate #C48793 Lápiz labial rosa
#CC6600 Sedona #E8ADAA Rosa
#EDC9AF Arena del #E56717 Papaya Naranja
desierto
#FDD7E4 Cerdo Rosa #E66C2C Naranja de
Halloween
#FCDFFF Algodón de #8E35EF Púrpura
azúcar
#FFDFDD #893BFF Aztech Purple
Bubblegum
rosado
#FBBBB9 Misty Rose #8467D7 Medium Purple
#FAAFBE Rosado #A23BEC Jazmín Púrpura
#FAAFBA Rosa claro #B041FF Narciso morado
#F9A7B0 Flamingo Pink #C45AEC Tyrian Purple
#E7A1B0 Rosa rosada #9172EC Crocus Purple
#E799A3 Margarita Rosa #9E7BFF Mimosa púrpura
#E38AAE Cadillac Pink #D462FF Heliotropo
Púrpura
#F778A1 Carnation Pink #E238EC carmesí
#E56E94 Blush Red #C38EC7 Dragón Púrpura
#F660AB Rosa caliente #C8A2C8 Lila
#FC6C85 Sandía rosa #E6A9EC Blush Pink
#F6358A Violet Red #E0B0FF malva
#F52887 Rosa profundo #C6AEC7 Glicina púrpura
#E45E9D Cupcake rosa #F9B7FF Blossom Pink
#E4287C Limonada rosa #D2B9D3 Cardo
#F535AA Rosa neón #E9CFEC Bígaro
#FF00FF Magenta #EBDDE2 Lavanda Pinocho
#E3319D Dimorphotheca #E3E4FA Azul lavanda
Magenta
#F433FF Bright Neon #FDEEF4 Perla
Pink
#D16587 Pale Violet #FFF5EE SeaShell
Red
#C25A7C Tulip Pink #FEFCFF Leche blanca
#CA226B Rojo Violeta #FFFFFF Blanco
Medio
#C12869 Rogue Pink #8E35EF Púrpura
#C12267 Rosa quemado #893BFF Aztech Purple
#C25283 Bashful Pink #8467D7 Medium Purple
#C12283 Carnation Pink #A23BEC Jazmín Púrpura
#B93B8F ciruela
#7E587E Viola Purple
#571B7E Iris púrpura
#583759 Ciruela
púrpura
#4B0082 Índigo
#461B7E Monstruo
morado
#4E387E Purple Haze
#614051 Berenjena
#5E5A80 Uva
#6A287E Purple Jam
#7D1B7E Orquídea
oscura
#A74AC7 Flor Purpura
#B048B5 Orquídea
mediana
#6C2DC7 Amatista
morada
#842DCE Violeta oscuro
#8D38C9 Violeta
#7A5DC7 Purple Sage
Bush

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX
/
Páginas
/
Guía del desarrollador
metadata.attachments

Referencia

Usuario desconocido (mst)


Modificado por última vez nov 04, 2015 por martinajindrova
 Propiedades y métodos comunes en las clases XFRXListener y XFRXSession
 Clase XFRXListener
 Clase XFRXSession
 XFRX # DRAW Class
 Clase XFCont
 Clase de INL de PDFL #
 Clase eqZip
 Clase de LECTOR DE PDF #
 Clase XFRX # XML

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX

...

Propiedades y métodos comunes en las clases XFRXListener y XFRXSession


metadata.attachments

Propiedades y métodos comunes en las


clases XFRXListener y XFRXSession

martinajindrova

Modificado por última vez sep 16, 2017

Propiedades
PictureDPI Versión
XFRX

Resolución DPI (puntos por pulgada) a la que se vuelven a


calcular todas las imágenes. Puede usar esta propiedad para
reducir el tamaño del documento de salida.
Esta propiedad debe enviarse antes de llamar al método
SetParams para XFRX # INIT.
Valor predeterminado: 0 (no recalcular, mantener las imágenes
como están)
DefaultPictureFormat

Formato de imagen de los componentes de activeX convertidos


en imágenes.
Valores permitidos: "bmp", "jpg", "png", "tif", "gif"
Valor predeterminado: "jpg"

Calidad JPEG

Calidad JPEG para convertir a formato JPEG. Valor predeterminado: 15.1.0


80

lMultiLineLineBehavior

Active el antiguo algoritmo para la altura de los calcs del texto de 15.0.3
varias líneas

nFlowLayoutMode

Modo para salidas de diseño de flujo: FDOC, FRTF, FODT, 15.5.0


NATIVE_FDOCX
1 - encabezado, detalle, pie de página se genera como encabezado
de página, detalle y pie de página (valor predeterminado)
2 - encabezado, detalle, pie de página se generan como detalle

cTextToImage

Modo para convertir texto en imágenes 17.3.


"AUTO": el texto que tiene #UR TEXTTOIMAGE =
<expresión> y el resultado será .T. luego se convierte en
imagen (valor predeterminado)
"TODOS" - Todos los textos se convertirán a la imagen
"NINGUNO" - Ninguno de los textos se convertirá en imagen

 Propiedades
 PictureDPI
 DefaultPictureFormat
 Calidad JPEG
 lMultiLineLineBehavior
 nFlowLayoutMode
 cTextToImage
 Métodos principales
 Mensaje de error()
 Setparams ()
 SetOtherParams (...)
 Finalizar()
 initLog ()
 setLogFile ()
 Métodos para registrar secuencias XFF enlazadas a la página
 RegisterScript ()
 UnregisterAllScripts ()
 Métodos de ajuste de tamaño de página
 setPaperSize ()
 ShrinkHeight ()
 Métodos para definir el cifrado de documentos
 setPasswords ()
 setPermissions ()
 Métodos para establecer las propiedades del documento
 setAuthor ()
 setCategory ()
 setComments ()
 setCompany ()
 setCreator ()
 setKeywords ()
 setManager ()
 setProducer ()
 setSubject ()
 setTitle ()
 setCreationDate ()
 Métodos de archivos adjuntos
 AddAttachment ()
 ClearAttachments ()

Métodos principales
Mensaje de error()

Sintaxis:
lnRetVal = loXFRXobj.ErrorMessage(lnErrorNo)

Este método devuelve un mensaje de error correspondiente al valor devuelto por el método SetParam

Setparams ()

Llame a este método para establecer los parámetros de generación de documentos.


Sintaxis:
lnRetVal = loXFRXobj.SetParams(<tcOutputName>, <tcTempDirectory>, <tlNotOpenViewer>,

<tlSilent>, <tlNewSession>, <tcTarget>, <tcArchive>,

<tlDeleteFileAfter>, <tuAppend>)
Valores devueltos:
0 ... todo estuvo bien, puede comenzar a procesar informes
-1 ... no puede cargar la aplicación Word o Excel
-2 ... la versión de la aplicación Word o Excel debe ser 2000 o superior
-3 ... no puede crear o abrir el archivo de salida
-4 ... destino desconocido
-5 ... hndlib.dll no se puede cargar (falta o se usa una versión anterior)
-6 ... xfrxlib.fll no se puede cargar (falta o no es válido). Por favor vea las preguntas más frecuentes si
-7 ... zlib.dll no se puede cargar
-8 ... Se usa un viejo xfrxlib.fll
-9 ... Lo sentimos, se requiere Word 2007 o superior para el formato docx.
-10 ... El documento existente está dañado o en un formato no compatible
-11 ... Archivo de firma no encontrado
-12 ... No se puede usar el archivo de firma
-13 ... La carpeta de salida no existe o no tiene acceso de escritura
-14 ... El documento existente usa transmisión de reflujo rápido - es no es posible agregar datos. (desde
cargar la aplicación de Excel. (desde XFRX 17.0) -16 ... La versión de la aplicación Excel debe ser 200
... PDFpassword no es válido. (desde XFRX 17.1) -18 ... No es posible añadir nuevos datos con contras
XFRX 17.1)

Puede recuperar el mensaje en inglés para el código devuelto con el método ErrorMessage () .

Parámetros:
tcOutputName
el nombre del documento para crear.

Directorio tcTempDirectory donde se crearán los archivos temporales. Si está en blanco, los archivos
temporal de Visual FoxPro [opcional]
tlNotOpenViewer
si se establece en .T., los documentos no se abrirán después de la generación [opcional]
tcCodePage
es una página de códigos del documento generado [opcional]. Si no especifica este parámetro, se usa
tlSilent
si se establece en .T., no se imprimirán mensajes [opcional]. Esta opción es útil si su aplicación no est
mensaje Procesando ... y los mensajes de error en su código.
tlNewSession
de forma predeterminada, el documento de Word estará abierto en la sesión de Word actual, si existe.
.T., El documento siempre estará abierto en una nueva sesión de Word. Esta opción no se usa para obje
tcTarget
El tipo de salida que se generará. Uno de los valores enumerados en Tipos de objetivos de salida XFR
tcArchive
El nombre del archivo zip que se creará. Si no está vacío, el archivo generado se agregará al archivo d
tlAdditive
Si se establece en .T. y el archivo ya existe, el archivo será agregado. (Opcional)
Tenga en cuenta: puede agregar varios archivos al archivo, pero los archivos existentes con el mismo n
archivos nuevos siempre se agregarán.
tlDeleteFileAfter
Si se establece en .T., el archivo generado se eliminará una vez que se haya copiado en el archivo. (O
tuAppend
Especifica si el documento generado se anexará a un archivo existente. Este parámetro puede ser lógic
siguiente significado:
Tipo Valor Sentido

Lógico .F. Se sobrescribirá un documento existente


Salida Versión XFRX

PDF 10.1

RTF 16.1

FRTF 16.1

LLANURA 16.1

.T. El informe generado se adjuntará al final del documento existen


Salida Versión XFRX

PDF 10.1

RTF 16.1

FRTF 16.1
LLANURA 16.1

Numérico 0 Se sobrescribirá un documento existente


Salida Versión XFRX

PDF 10.1

RTF 16.1

FRTF 16.1

LLANURA 16.1

<número de página> El informe generado se insertará en el documento existente en el


Salida Versión XFRX

PDF 10.1

RTF 16.1

FRTF 16.1

LLANURA 17.0 Solo para el valor 1.

Cuerda "R <página No.>" La página se reemplazará con el informe generado.


Salida Versión XFRX

PDF 10.1

RTF 16.1

FRTF 16.1

"R <from>: <to>" El rango de página se reemplazará con el informe generado.


Salida Versión XFRX

PDF 10.1

RTF 16.1

FRTF 16.1

Ejemplos:
Parámetro Sentido

.T. El informe generado se agregará al final del documento existente.

1 El informe generado se insertará al comienzo del documento existente.

5 El informe generado se insertará en el documento existente, entre las páginas 4 y 5.

"R5" El informe generado se insertará entre las páginas 4 y 6, reemplazando a la página 5.

"R4: 8" El informe generado se insertará entre las páginas 3 y 9, reemplazando las páginas 4,5

.F. o 0 El documento existente será sobrescrito.

SetOtherParams (...)

Este método se usa para agregar varios parámetros específicos del tipo de salida. El primer parámetro e
el parámetro que se establecerá, el segundo parámetro es los valores que se establecerán.
Ejemplo:
Para establecer el siguiente nombre de la hoja en el documento XLS en "Cliente 1", llame a:
.SetOtherParams ("NEXT_SHEET_NAME", "Cliente 1")

Parámetros específicos de HTML


Nombre Tipo Nota

PRINT_BOOKMARKS Lógico, Puede enviar dos parámetros con esta opción. El pri
Numérico lógico y controla si el marcador debe mostrarse (.T.)
predeterminado).
El segundo parámetro especifica qué tipo de marcad
mostrar:

 Enviar 0 mostrará los marcadores de los números de pág


informe (predeterminado)
 El envío 1 mostrará solo los marcadores definidos en el i
 Enviar 2 mostrará solo los marcadores de número de pá

CONVERTIMIENTO_TIFFTOPNG Lógico El valor predeterminado es .F.


Si este parámetro se establece en .T., Las imágenes
convertirán a PNG.

Las imágenes en línea Lógico El valor predeterminado es .F.


Si este parámetro se establece en .T., Las imágenes esta
de salida.

Parámetros específicos de texto plano


Nombre Tipo Nota

PLAIN_CPI_HORIZONTAL Numérico Caracteres horizontales por valor de pulgada

PLAIN_CPI_VERTICAL Numérico Caracteres verticales por valor de pulgada

PLAIN_SHOW_LINES Lógico Valor predeterminado = .T.


Este parámetro permite suprimir líneas horizontales del

Encontrará más información sobre el parámetro de texto sin formato en Convertir informes en el capít
41.

Parámetros específicos de XLS, XLSPLAIN, NATIVE_FXLS, NATIVE_PFXLSX, ODS, FODS,


Nombre Tipo Nota

DISPLAY_GRID_LINES Lógico Valor predeterminado = .T.


Si este parámetro se establece en .F., Las líne
no serán visibles.

LEAVE_FULL_FIELD_CONTENT Lógico Valor predeterminado = .F.


Por defecto, el contenido de los campos no es
tamaño del campo. Esta opción permite dejar
en la celda de Excel.

NEXT_SHEET_NAME Cuerda El nombre de la siguiente hoja que se insertar


ejecutará.

NEXT_SHEET_NAME_EXPR Cuerda Esta expresión, si está definida, se evalúa en


resultado se utiliza como el nombre de la hoja
Este parámetro tiene prioridad sobre el parám

ADDPAGENUMBERTOSHEETDISPLAYNAME Lógico Valor predeterminado = .T.


Si este parámetro se establece en .F. luego, X
el nombre de la hoja.
(Desde XFRX 15.6)

SHEET_PER_PAGE Lógico Valor predeterminado = .F.


De forma predeterminada, el documento XLS
genera una hoja larga, con el encabezado de p
de página en la parte inferior.
Si este parámetro se establece en .T., Cada pá
una hoja nueva.

SHEET_PER_NP_GROUP Lógico Valor predeterminado = .F.


Esta opción combina el modo simple y el mo
Si este parámetro está establecido en .T. (y SH
genera una nueva hoja para cada grupo de inf
cada grupo en una nueva página" configurado

SHEETPAGEBREAK Lógico Valor predeterminado = .F.


Esta opción agrega saltos de página en la hoja po

(Desde XFRX 15.7)

HORIZONTAL_ADJUSTMENT Numérico La diferencia de coordenadas máxima consid


VERTICAL_ADJUSTMENT Consulte el capítulo de ajuste de células XL
información.

Finalizar()

Este método finaliza la generación de documentos y muestra el documento generado (a menos que la v
explícitamente suprimida).
La Finalizar () método no tiene que ser llamado en VFP 9.0, si el último comando FORM de informe
NOPAGEEJECT.
initLog ()

Este método crea un archivo de registro con el nombre "_XFRX.log".


Sintaxis
= loXFRXobj.initLog(<tlSilent>)

Parámetros:
tlSilent
no escribe el encabezado en el archivo de registro [opcional]

setLogFile ()

Este método crea un archivo de registro con el nombre < tcLogFile >.
Sintaxis
= loXFRXobj.setLogFile(<tcLogFile>, <tlSilent>)

Parámetros:
tcLogFile
el nombre del archivo de registro para crear.
tlSilent
no escribe el encabezado en el archivo de registro [opcional]

Métodos para registrar secuencias XFF enlazadas a la página


RegisterScript ()

Sintaxis:
RegisterScript(toScriptObject, tcScriptMethod, tnZOrder, tcPageScope, tnNumberingTyp

Parámetros:
toScriptObject
Referencia del objeto PDFLScripts
tcMethodName
El nombre del método que contiene la secuencia de comandos
tnZIndex
0 ... imprima a continuación (antes) la página de informe
1 ... imprima arriba (después) la página de informe
tcScope
Define qué páginas invocar los scripts. Puede contener "ALL", "ODD", "EVEN" y números delimitad
con comas. Los guiones se pueden usar para definir el alcance de entrada. Ejemplos: "ODD", "1,5-19",
"ODD, 4,8"
tnPageNumberingType
Define cómo XFRX determina el número de página:
0 ... absolute - el número de página en el documento,
1 ... relativo - el número de página en el informe actual,
2 ... el valor de _PAGENO

UnregisterAllScripts ()

Sintaxis:
UnregisterAllScripts()

Si se combinan varios informes y desea aplicar scripts en un determinado informe, pero no en los sigui
llame a este método para eliminar todos los registros de scripts.
Este método no necesita ser llamado al final del procesamiento de informes.

Métodos de ajuste de tamaño de página


setPaperSize ()

Use este método para definir un tamaño de página definido por el usuario.
Sintaxis:
setPaperSize(nUDPaperWidth, nUDPaperHeight[,nUDPaperOrientation] )

Consulte el párrafo de tamaño de página definido por el usuario en la página 18


(nad) para obtener más información.
nUDPaperWidth
Ancho del papel
nUDPaperHeight
Altura del papel
Orientación del
papel nUDPaperOrientation (XFRX 15.5)

ShrinkHeight ()

Use este método para acortar el tamaño de la página. Consulte el ajuste del tamaño
de página HTML en la estructura 34 para obtener más información.

Métodos para definir el cifrado de documentos


setPasswords ()

Establece contraseñas para la protección de documentos PDF y Word.


Sintaxis de PDF:
setPasswords(tcOwnerPassword, tcUserPassword)
Parámetros:
La contraseña del usuario (tcUserPassword) puede estar vacía. Si la contraseña de propietario (tcOwne
vacía, se generará una cadena aleatoria como contraseña.
El propietario puede hacer cualquier cosa con el documento. Los permisos de usuario se pueden estable
métodos setPermissions ().
Sintaxis de Word:
setPasswords(tcReadPassword, tcWritePassword, tlRequirePassword)

Puede omitir tcReadPassword o tcWritePassword. tlRequirePassword es opcional (el valor predetermin


establece en .T., Word solicitará la contraseña incluso cuando el documento se abra por primera vez de
generación (si la propiedad DoNotOpenViewer está configurada en .F.).

setPermissions ()

Establece los permisos de usuario en el documento PDF.


Sintaxis:
setPermissions(tlPrintDocument, tlModifyDocument, tlCopyTextAndGraphics, tlAddOrModi

Métodos para establecer las propiedades del documento


setAuthor ()

Establece la propiedad del autor del documento.


Sintaxis:
setAuthor(tcvalue)

Parámetros: tcValue (char) es un valor que se usará en las propiedades del


documento.

setCategory ()

Establece la propiedad del documento "Categoría".


Sintaxis:
setCategory(tcvalue)

Parámetros: tcValue (char) es un valor que se usará en las propiedades del


documento.

setComments ()

Establece el documento propiedad "Comentarios".


Sintaxis:
setComments(tcvalue)

Parámetros: tcValue (char) es un valor que se usará en las propiedades del


documento.

setCompany ()

Establece la propiedad del documento "Empresa".


Sintaxis:
setCompany(tcValue)

Parámetros: tcValue (char) es un valor que se usará en las propiedades del


documento.

setCreator ()

Establece la propiedad de "creador" del documento.


Sintaxis:
setCreator( tcValue )

Parámetros: tcValue (char) es un valor que se usará en las propiedades del


documento.

setKeywords ()

Establece la propiedad de "palabras clave" del documento.


Sintaxis:
setKeywords(tcValue)

Parámetros: tcValue (char) es un valor que se usará en las propiedades del


documento.

setManager ()

Establece la propiedad del documento "Administrador".


Sintaxis:
setManager(tcValue)

Parámetros: tcValue (char) es un valor que se usará en las propiedades del


documento.

setProducer ()

Establece la propiedad del documento "productor".


Sintaxis:
setProducer(tcValue)

Parámetros: tcValue (char) es un valor que se usará en las propiedades del


documento.

setSubject ()

Establece el documento propiedad "Asunto"


Sintaxis:
setSubject(tcValue)

Parámetros: tcValue (char) es un valor que se usará en las propiedades del


documento.

setTitle ()

Establece la propiedad del título del documento.


Sintaxis:
setTitle(tcValue)

Parámetros: tcValue (char) es un valor que se usará en las propiedades del


documento.

setCreationDate ()

Establece la propiedad de fecha de creación del documento (desde XFRX 16.0).


Sintaxis:
setCreationDate(tdValue)

Parámetros: tdValue (date / datetime) es un valor que se usará en las propiedades del
documento.

Métodos de archivos adjuntos


AddAttachment ()
Versió
n XFR
X

Agregar archivo adjunto a la lista 17.3


Sintaxis:
AddAttachment(m.lcFileName, m.llEmbedded, m.lcDescription, m.lcFileType, m.lcRelatio

Consulte el párrafo de tamaño de página definido por el usuario en la


página 18 (nad) para obtener más información.
m.lcFileName Nombre de archivo
m.ll Embedded Embedded flag (debe ser verdadero)
m.lcDescription Descripción del archivo
m.lcFileType tipo MIME
m.lcRelationship debe ser "alternativa"

ClearAttachments ()

Borrar la lista de archivos adjuntos. 17.3

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX

...

Referencia
metadata.attachments

Clase XFRXListener

martinajindrova

Modificado por última vez mar 22, 2017

Propiedades :
AppendToFile

Especifica si el documento generado se agregará a un archivo existente. Este


parámetro puede ser lógico, numérico o una cadena, con el siguiente significado:
Tipo Valor Sentido

Lógico .F. Se sobrescribirá un documento existente


.T. El informe generado se adjuntará al final del
documento existente

Numérico 0 Se sobrescribirá un documento existente

<número de El informe generado se insertará en el documento


página> existente en el número de página especificado.

Cuerda "R <página La página se reemplazará con el informe


No.>" generado.

"R <from>: El rango de página se reemplazará con el informe


<to>" generado.

Ejemplos:
Parámetro Sentido

.T. El informe generado se agregará al final del documento existente.

1 El informe generado se insertará al comienzo del documento


existente.

5 El informe generado se insertará en el documento existente, entre


las páginas 4 y 5.

"R5" El informe generado se insertará entre las páginas 4 y 6,


reemplazando a la página 5.

"R4: 8" El informe generado se insertará entre las páginas 3 y 9,


reemplazando las páginas 4,5,6,7 y 8.

.F. o 0 El documento existente será sobrescrito.

Esta propiedad solo se aplica a documentos PDF.

Página de código

La página de códigos del documento de salida.

DoNotOpenViewer

Si se establece en .T., Los documentos no se abrirán después de la generación.


Valor predeterminado = .F.
lAllwaysWholePage

Por compatibilidad con versiones anteriores XFRX. Si se establece en .T., XFRX no


cambia la posición izquierda y superior de algunos objetos.
Valor predeterminado = .F.

NewViewerSession

De forma predeterminada, los documentos de Word y HTML estarán abiertos en la


instancia actual de la aplicación, si existe. Si este parámetro se establece en .T., El
documento siempre estará abierto en una nueva instancia de Word / navegador web.
Valor predeterminado = .F.

Modo silencioso

Esta es una propiedad de la clase ReportListener. Si se establece en .T., No se


imprimirá ningún mensaje durante el proceso de generación de informes.

targetFileName

El nombre del archivo que se generará.

tipo de objetivo

El tipo de salida que se generará. Uno de los valores enumerados en Tipos de


objetivos de salida XFRX (arriba) .

TMPFolder

Carpeta donde se crearán los archivos temporales. Si está en blanco, los archivos
temporales se crearán en la ruta temporal de Visual FoxPro
Métodos :
Los métodos comunes se describen en Propiedades y métodos comunes en las clases
XFRXListener y XFRXSession (arriba).
zipDocument ()

Especifica que el documento generado se debe agregar a un archivo zip.


Sintaxis:
zipDocument(ArchiveName, AddToArchive, DeleteSourceDocument)

Valores devueltos: ninguno


Parámetros:
ArchiveName (char) es el nombre de archivo del archivo zip
AddToArchive (lógico) especifica si el archivo se debe agregar al archivo existente
(.T.) O si se debe crear un archivo nuevo (.F).
DeleteSourceDocument (logical) si se establece en .T., El documento fuente se
eliminará después de agregarlo al archivo.

Puede enviar estos tres parámetros a XFRX ya sea por este método o como los
últimos tres parámetros del método SetParams. Este método está disponible para su
conveniencia de que prefiera completar las propiedades de XFRXListener y llamar a
SetParams sin parámetros.

 Propiedades:
 AppendToFile
 Página de código
 DoNotOpenViewer
 lAllwaysWholePage
 NewViewerSession
 Modo silencioso
 targetFileName
 tipo de objetivo
 TMPFolder
 Métodos:
 zipDocument ()

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX

/
...

Referencia
metadata.attachments

Clase XFRXSession

martinajindrova

Modificado por última vez may 24, 2017

Los métodos comunes se describen en Propiedades y métodos comunes en las clases


XFRXListener y XFRXSession (arriba).
lMultiDetailBehavior

Active múltiples detalles de soporte para XFRX # INIT (funcionalidad experimental).


Esta propiedad se eliminó en XFRX 17.0.

lHidePictureOutsideBand

.T. - Ocultar imagen si la línea inferior está fuera de banda (valor predeterminado)
.F. - Muestre la imagen si la línea de fondo está fuera de banda

lAbsoluteHackAllowed

.T. - XFRX detecta objetos para la posición absoluta (valor predeterminado para la compilación con VFP 9.0)
.F. - XFRX no detecta objetos para la posición absoluta

ProcessReport ()

Procesa el informe.
Sintaxis:
ProcessReport(<tcReportName>, <tcForClause>, <tlSummary>, <tcScopeClause>, <tcWhileC

Parámetros:
tcReportName
el nombre del archivo de informe
tcForClause
la cláusula FOR [opcional]
tlSummary
El interruptor de cláusula de resumen. Si se establece en .T., El informe se procesa como si se utilizar
en el comando FORM INFORMAR [opcional]
tcScopeClause
La cadena correspondiente a la cláusula de alcance del informe (como NEXT 4, REST, ALL, RECOR
predeterminado es "TODO" [opcional]
tcWhileClause
La cláusula while [opcional]
tlPlain
interruptor de formato normal. Enviar .T. como este parámetro para cambiar la salida HTML a format
simple no genera ningún salto de página en el documento; se generará una página larga. El valor prede

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX

...

Referencia
metadata.attachments

XFRX # DRAW Class

martinajindrova

Modificado por última vez nov 12, 2017

Propiedades:
PageCount

El número total de páginas en el documento XFF


( numérico)
Métodos:
AddPage ()

Agrega una nueva página al final del documento.


Sintaxis:
XFRXDraw::AddPage([tcPageSize])

O
XFRXDraw::AddPage(tnPageWidth, tnPageHeight)

Parámetros:
tcPageSize
El tamaño de página de la página nueva. Valores disponibles: "A4", "carta"
tnPageWidth, tnPageHeight
El ancho y el alto de la nueva página. La unidad se puede definir mediante
el método SetUnit (). La unidad por defecto apunta (1/72 en).
Si no se especifica el tamaño de página, se utiliza el tamaño de página actual.

CreateDocument ()

Crea un nuevo archivo XFF.


Sintaxis:
XFRXDraw::CreateDocument([tcFileName])

Valores devueltos
.T. ... el archivo se creó con éxito
.F. ... archivo no pudo haber sido creado ()

Se sobrescribe un archivo existente.


Parámetros:
tcFileName
El nombre del archivo si el documento se creará. Si este parámetro está vacío, el
archivo XFF se crea en la memoria.

Dibujar linea()

Dibuja una línea en la página actual.


Sintaxis:
XFRXDraw::DrawLine(tnXPos, tnYPos, tnXToPos, <font></font>

tnYToPos [, tnLineWidth[, tnPenPattern]])

Parámetros:
tnXPos, tnYPos
Las coordenadas X, Y del punto de inicio de la línea.
tnXToPos, tnYPPos
Las coordenadas X, Y del punto final de la línea.
tnLineWidth
El ancho de línea en puntos. 0 representa la línea del cabello. Opcional, valor
predeterminado = 1.
tnPenPattern
El patrón de línea del borde:
0 ... sin borde
1 ... con puntos
2 ... con puntos
3 ... con puntos y rayas
4 ... punto con punto y coma
8 ... línea sólida
Opcional, valor predeterminado = 8.

Dibujar la imagen()

Dibuja una imagen en la página actual en un rectángulo delimitador dado.


Sintaxis:
XFRXDraw::DrawPicture(tnXPos, tnYPos, tnWidth, tnHeight, <font></font>

tcFilename[, tnAdjType<font></font>

[, llCentralHorizontaly[, tnRotate[,<font></font>

tnRotationPoint[, tcLinkName[, tcLinkRef]]]]]])

Parámetros:
tnXPos, tnYPos
Las coordenadas X, Y de la esquina superior izquierda del rectángulo delimitador.
tnWidth
El ancho del rectángulo
tnHigh
La altura del rectángulo
tcFileName
El nombre del archivo de imagen
tnAdjType
0 ... imagen de clip
1 ... estira la imagen, conserva la forma
2 ... estira la imagen, llena el cuadro
llCentralHorizontaly
Center horizontaly en el marco (desde XFRX 15.7).
tnRotate
El ángulo de rotación del texto en grados. La etiqueta se girará en el sentido
contrario a las agujas del reloj. Valor predeterminado opcional = 0 (desde XFRX
15.7).
tnRotationPoint

El punto dentro del rectángulo alrededor del cual se rota el texto. Los valores
permitidos son 0..8, opcional, valor predeterminado = 0 (izquierda, arriba). Consulte
la imagen de la derecha para las posiciones de los puntos (desde XFRX 15.7).
tcLinkName
Si se completa este parámetro, el texto será un objetivo designado de un
hipervínculo. ( Consulte elparámetro tcLinkRef ) (desde XFRX 15.7).
tcLinkRef
Si se completa este parámetro, el texto será un hipervínculo. Navegará a un
destino con el nombre tcLinkRef (desde XFRX 15.7).

DrawGeneralField ()

Dibuja una imagen en la página actual en un rectángulo delimitador dado. (desde


XFRX 16.1)
Sintaxis:
XFRXDraw::DrawGeneralField(tnXPos, tnYPos, tnWidth, <font></font>

tnHeight, tcFieldName[, tnAdjType<font></font>

[, llCentralHorizontaly[, tnRotate<font></font>

[, tnRotationPoint[, tcLinkName<font></font>

[, tcLinkRef]]]]]])

Parámetros:
tnXPos, tnYPos
Las coordenadas X, Y de la esquina superior izquierda del rectángulo delimitador.
tnWidth
El ancho del rectángulo
tnHigh
La altura del rectángulo
tcFieldName
El nombre general del campo
tnAdjType
0 ... clip Imagen
1 ... estira la imagen, conserva la forma
2 ... estira la imagen, llena el cuadro
llCentralHorizontaly
Center horizontaly en el marco.
tnRotate
El ángulo de rotación del texto en grados. La etiqueta se girará en el sentido
contrario a las agujas del reloj. Opcional, valor predeterminado = 0.
tnRotationPoint

El punto dentro del rectángulo alrededor del cual se rota el texto. Los valores
permitidos son 0..8, opcional, valor predeterminado = 0 (izquierda, arriba). Por
favor, mira la imagen a la derecha para las posiciones de los puntos.
tcLinkName
Si se completa este parámetro, el texto será un objetivo designado de un
hipervínculo. (ver parámetro tcLinkRef ).
tcLinkRef
Si se completa este parámetro, el texto será un hipervínculo. Navegará a un
destino con el nombre tcLinkRef .

DrawRectangle ()

Dibuja un rectángulo en la página actual.


Sintaxis:
XFRXDraw::DrawRectangle(tnXPos, tnYPos, tnWidth, <font></font>

tnHeight [, tnLineWidth<font></font>
[, tnFillPattern<font></font>

[, tnPenPattern[, tnRoundFactor<font></font>

[, tnMode [,tnRotate [,tnRotationPoint]]]]]]]])

Parámetros:
tnXPos, tnYPos
Las coordenadas X, Y de la esquina superior izquierda.
tnWidth
El ancho del rectángulo
tnHigh
La altura del rectángulo
tnLineWidth
El ancho de línea en puntos. 0 representa la línea del cabello. Opcional, valor
predeterminado = 1.
tnFillPattern
El patrón de relleno:
0 ... Sin relleno
1 ... Relleno (color)
2 ... Línea horizontal
3 ... Línea vertical
4 ... Diagonal ascendente
5 ... Diagonal descendente
6 ... Cruz
7 ... Cruz Diagonal
Opcional, valor predeterminado = 0.
tnPenPattern
El patrón de línea del borde:
0 ... sin borde
1 ... con puntos
2 ... con puntos
3 ... con puntos y rayas
4 ... punto con punto y coma
8 ... línea sólida
Opcional, valor predeterminado = 8.
tnRoundFactor
El radio de la curvatura de los bordes del rectángulo. 0 hace que el rectángulo esté
en ángulo recto (sin redondeo), 99 crea una elipse. Opcional, valor predeterminado
= 0.
tnMode
El modo opaque / transparent (desde XFRX 16.0):
0 ... Opaco
1 ... Transparente
Opcional, valor predeterminado = 0.
tnRotate (desde XFRX 17.3) El ángulo de rotación del texto en grados. La etiqueta
se girará en el sentido contrario a las agujas del reloj. Opcional, valor
predeterminado = 0.
tnRotationPoint (desde XFRX 17.3)

El punto dentro del rectángulo alrededor del cual se rota el texto. Los valores
permitidos son 0..8, opcional, valor predeterminado = 0 (izquierda, arriba). Por
favor, mira la imagen a la derecha para las posiciones de los puntos.
El borde y el color de relleno deben definirse mediante el método SetColor () antes
de llamar al método DrawRectangle () .

DrawText ()

Dibuja un texto, usando una fuente definida por el método SetFont .


Sintaxis:
XFRXDraw::DrawText(tnLeft, tnTop, tcText<font></font>

[, tnRotate[, tcLinkName[,<font></font>

tcLinkRef[, tcBookmark<font></font>

[, tcTooltip[, tnmode[, liCP]]]]]]])

O
XFRXDraw::DrawText(tcText[, tnRotate[, <font></font>

tcLinkName[, tcLinkRef[, <font></font>

tcBookmark[, tcTooltip[, <font></font>

tnmode[, liCP]]]]]]])

Parámetros:
tnLeft, tnTop
Las coordenadas donde se dibujará el texto. Si se usa la segunda sintaxis (sin las
coordenadas), el texto se dibujará en la posición actual: que es una posición definida
por el método SetPos () o un final de una salida si
la llamada anterior al método DrawText () .
tcText
El texto a dibujar
tnRotate
El ángulo de rotación del texto en grados. La etiqueta se girará en el sentido
contrario a las agujas del reloj. Opcional, valor predeterminado = 0.
tcLinkName
Si se completa este parámetro, el texto será un objetivo designado de un
hipervínculo. (ver parámetro tcLinkRef ).
tcLinkRef
Si se completa este parámetro, el texto será un hipervínculo. Navegará a un
destino en el documento local con el nombre tcLinkRef . Para navegar a una URL
http, incluya "http: //" al comienzo del parámetro.
tcBookmark
No está vacío, el parámetro contiene el nombre de un marcador que se creará y
navegará hasta este texto.
tcTooltip
La información sobre herramientas que se muestra al pasar el mouse sobre este
texto.
tnMode Modo
opaco / transparente (desde XFRX 15.7).
0 ... "opaco
1 ..." transparente "

Página de texto del código de liCP (desde XFRX 15.7)

DrawTextBox ()

Word ajusta el texto de entrega e imprime en un rectángulo delimitador


determinado. Si la altura del rectángulo es cero, entonces el rectángulo se estira para
ajustarse al texto completo y se devuelve la altura del rectángulo.
Sintaxis:
XFRXDraw::DrawTextBox(tnLeft, tnTop, tnWidth, tnHeight, <font></font>

tcText[, tnAlign[, tnVAlign<font></font>

[, tnRotate[,tnRotationPoint[,<font></font>

tcLinkName[, tcLinkRef[, tcBookmark<font></font>

[, tcTooltip[, tnmode[, liCP]]]]]]]]]])

Valor de retorno: se devuelve la


altura del rectángulo delimitador.
Parámetros:
tnLeft, tnTop
Las coordenadas X e Y de la esquina superior izquierda del rectángulo
delimitador.
tnWidth, tnHeight
El ancho y la altura del rectángulo delimitador. Si tnHeight es 0, el rectángulo se
estira para ajustarse al texto completo y se devuelve la altura del rectángulo.
tnAlign
La alineación horizontal del texto dentro del rectángulo. Los valores permitidos
son:
0 ... "izquierda"
1 ... "centro"
2 ... "derecha"
3 ... "bloque" (justificación completa)
Opcional, el valor predeterminado es 0 (izquierda).
tnVAlign
La alineación vertical del texto dentro del rectángulo. Los valores permitidos son:
0 ... "arriba"
1 ... "centro"
2 ... "abajo".
Opcional, el valor predeterminado es 0 (arriba).
tnRotate
El ángulo de rotación del texto en grados. La etiqueta se girará en el sentido
contrario a las agujas del reloj. Opcional, valor predeterminado = 0.
tnRotationPoint

El punto dentro del rectángulo alrededor del cual se rota el texto. Los valores
permitidos son 0..8, opcional, valor predeterminado = 0 (izquierda, arriba). Por
favor, mira la imagen a la derecha para las posiciones de los puntos.
tcLinkName
Si se completa este parámetro, el texto será un objetivo designado de un
hipervínculo. (ver parámetro tcLinkRef ).
tcLinkRef
Si se completa este parámetro, el texto será un hipervínculo. Navegará a un
destino con el nombre tcLinkRef .
tcBookmark
No está vacío, el parámetro contiene el nombre de un marcador que se creará y
navegará hasta este texto.
tcTooltip
La información sobre herramientas que se muestra al pasar el mouse sobre este
texto.
modo tnMode
Opaque / transparent (desde XFRX 15.4).
0 ... "opaco
1 ..." transparente "

Página de texto del código de liCP (desde XFRX 15.7)

GetBoundingRectangle ()

Devuelve las coordenadas del rectángulo delimitador en el script vinculado a un


rectángulo.
Sintaxis:
XFRXDraw::GetBoundingRectangle()

Valor de retorno:
NULL : el rectángulo delimitador no está disponible

Object - un objeto con las siguientes propiedades:


nLeft, nTop - las coordenadas de la esquina superior izquierda del rectángulo
nWidth, nHeight - el ancho y alto del rectángulo

La unidad de coordenadas se puede configurar mediante el método SetUnit


() . La unidad predeterminada es Point (1/72 in).

GetPageWidth ()

Devuelve el ancho de la página.

GetPageHeight ()

Devuelve la altura de la página.

GetXPos ()

Devuelve la coordenada horizontal de la posición actual.


Sintaxis:
XFRXDraw::GetXPos()

GetYPos ()

Devuelve la coordenada vertical de la posición actual.


Sintaxis:
XFRXDraw::GetYPos()

OpenDocument ()

Abre un archivo XFF existente.


Sintaxis:
XFRXDraw::OpenDocument(tcFileName)

Valores devueltos
.T. ... el archivo se abrió con éxito
.F. ... el archivo no se pudo haber abierto (el archivo no existe o está bloqueado)

Imprimir documento()

Imprime el archivo XFF en la impresora especificada.


Sintaxis:
XFRXDraw::PrintDocument(tcPrinterName, tcJobname, <font></font>

tnFrom [, tnTo [, tcDEVMODE <font></font>

[, tnPagesPerSheet, [ tnAllEvenOdd, <font></font>

[ tnCopies, [tnUnderlineHyperlinksOnPrint, <font></font>

[laFindString, [lcOutput]]]]]]]])

Valores devueltos
-100 ... no se puede inicializar el dispositivo de la impresora
-101 ... no se puede inicializar el controlador de la impresora
-102 ... no se puede inicializar la estructura DEVMODE
0 ... sin errores

Parámetros:
tcPrinterName
Luego, nombre de la impresora a la que se enviará el documento
tcJobName
El nombre del trabajo de la impresora
tnDe
Si es numérico, la primera página que se imprimirá.
tnTo
La última página que se imprimirá.
tcDEVMODE
DEVMODE estructura.
tnPagesPerSheet
El número de páginas por hoja.
tnAllEvenOdd
Incluye todas las páginas, impar o par solamente. Los valores permitidos son:
1 ... todas las páginas (valor predeterminado)
2 ... páginas impares
3 ... incluso páginas
tn Copias
El número de copias.
tnUnderlineHyperlinksOnPrint
Imprimir hipervínculo ...
0 - No imprimir hipervínculo
1 - Imprimir hipervínculo en color azul
2 - Imprimir hipervínculo en color verde

laFindString (XFRX 15.4)


Una matriz contiene cadenas para resaltar (color de fondo yelow).
lcOutput (XFRX 15.5)
Un nombre de archivo de salida para impresoras virtuales como Microsoft XPS
Document Writer, PDFCreator.

Alternativamente, tnFrom puede contener un valor de cadena, que contiene los


números de páginas separados por comas y rangos separados por guiones, por
ejemplo:
“1,2,5-6,8,20-30”

Guardar foto()

El método SavePicture guarda las páginas del informe como una imagen.
Sintaxis:
XFRXDraw::SavePicture(tcFilename, tcType, tnFrom [, <font></font>

tnTo [, tnBpp [, tnJPEGQuality [, <font></font>


tnThumbnailWidth [, tnThumbnailHeight [, <font></font>

tnPagesPerSheet, [ tnAllEvenOdd [, m.tnCopies, [<font></font>

laFindString, [liBackgroundMode] ]]]]]]]]]),

Valores devueltos
0 ... no se encontraron errores
-1 ... formato de imagen desconocido
-2 ... página fuera de rango

Parámetros:
tcFilename
El nombre del archivo que se generará.
tcType
El formato de la imagen que se guardará. Las opciones admitidas actualmente son:
BMP, GIF, JPEG (JPG), PNG, TIFF (TIF), EMF.
tnDe
El número de página que se guardará. Si se guarda el formato TIFF, el parámetro
especifica la primera página que se guardará.
tnTo
Si se guarda el formato TIFF, el parámetro especifica la última página que se
guardará. Ignorado de lo contrario.
tnBpp
Bits por píxel. Los valores admitidos actualmente son 2, 16 o 24.
tnJPEGQuality
Especifica la calidad de compresión JPEG. El rango es de 1 - la calidad más baja a
100 - la mejor calidad. El valor predeterminado es 0 - calidad
predeterminada. Ignorado para otros tipos de salida.
tnTumbnailWidth
El ancho de la imagen de salida en píxeles.
tnThumbnailHeight
La altura de la imagen de salida en píxeles.
tnPagesPerSheet
El número de páginas por hoja.
tnAllEvenOdd
Incluye todas las páginas, impar o par solamente. Los valores permitidos son:
1 ... todas las páginas (valor predeterminado)
2 ... páginas impares
3 ... incluso páginas
tn Copias
Número de copias. Este parámetro es ignorado.
laFindString (XFRX 15.4)
Una matriz contiene cadenas para resaltar (color de fondo yelow).
liBackGroundMode (XFRX 15.5)
Modo de fondo de la imagen de salida para formato TIFF, EMF y PNG

0 ... Opaco (el color predeterminado es blanco)


1 ... Transparente (utilice 32bppARGB siempre)

Si se omiten tanto tnThumbnailWidth como tnThumbnailHeight, se utiliza el


tamaño de página original. Si solo se envía uno de los valores, el otro se calcula en
consecuencia.

SetColor ()

Establece los colores de dibujo en primer plano y en segundo plano.


Sintaxis:
XFRXDraw::SetColor(tfr, tfg, tfb[, tbr, tbg, tbb])

Parámetros:
tfr, tfg, tfb Componentes
rojos, verdes y azules del color de primer plano
tbr, tbg, tbb Componentes
rojos, verdes y azules del color de fondo (opcional)

SetFont ()

Establece el nombre y los atributos de la fuente para las siguientes llamadas a


DrawText () o DrawTextBox ().
Sintaxis:
XFRXDraw::SetFont(tcFontName, tnSize[, tlBold[, <font></font>

tlItalic[, tlUnderline[, <font></font>

tlStrikeThrough]]]])

Parámetros:
tcFontName
El nombre de la fuente
tnSize
El tamaño de fuente en puntos
tlBold, tlItalics, tlUnderline, tlStrikeThrough
Los atributos de la fuente. Estos parámetros son opcionales, el valor
predeterminado es .F. El parámetro tlStrikeThrough es desde XFRX 15.7

SetPos ()

Establece la posición donde el texto será dibujado por la llamada al


método DrawText () posterior .
Sintaxis:
XFRXDraw::SetPos(tnXPos, tnYPos)

Parámetros:
tnXPos, tnYPos
Las coordenadas X e Y (horizontal y vertical) de la posición. La unidad de
coordenadas se define mediante el método SetUnit () , la unidad predeterminada es
Point (pt).

SetUnit ()

Establece las unidades de dibujo.


Sintaxis:
XFRXDraw::SetUnit(tcUnit)

Parámetros:
tcUnit
El código de unidad. Los valores permitidos son: "in" - pulgadas, "cm" -
centímetros, "pt" - puntos y "px" - píxeles.

La unidad predeterminada es punto.

 Propiedades:
 PageCount
 Métodos:
 AddPage ()
 CreateDocument ()
 Dibujar linea()
 Dibujar la imagen()
 DrawGeneralField ()
 DrawRectangle ()
 DrawText ()
 DrawTextBox ()
 GetBoundingRectangle ()
 GetPageWidth ()
 GetPageHeight ()
 GetXPos ()
 GetYPos ()
 OpenDocument ()
 Imprimir documento()
 Guardar foto()
 SetColor ()
 SetFont ()
 SetPos ()
 SetUnit ()

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX
/
...
/
Referencia
metadata.attachments

Clase XFCont

martinajindrova
Modificado por última vez mar 11, 2017

Clase de contenedor de vista previa de XFRX. Esta sección describe las propiedades que
puede modificar en su implementación personalizada de la vista previa.
yo reservo

Controla si el marcador debe mostrarse en la vista previa. Los valores permitidos


son:

 -1 = Inhabilitar marcadores
 0 = Habilitar marcadores pero ocultarlos (los usuarios deben hacer clic en el botón de
marcador para verlos)
 1 = Habilitar marcadores, mostrándolos siempre
 2 = Habilitar los marcadores, pero mostrarlos u ocultarlos automáticamente en
función de si hay marcadores definidos en el informe para previsualizar
(predeterminado)

iTool
Controla la visibilidad de la barra de herramientas en la parte superior. Los valores
permitidos son:

 -1 = Deshabilitar la barra de herramientas


 0 = La barra de herramientas estará habilitada pero oculta. Se puede invocar a través
del menú de acceso directo con el botón derecho
 1 = La barra de herramientas estará habilitada y visible. (defecto)

mostrar el estado

Controla la visibilidad de la barra de herramientas en la barra de estado del


contenedor de vista previa. Los valores permitidos son:

 .T. = mostrar la barra de herramientas (predeterminado)


 .F. = esconder la barra de herramientas

DisplayMessage ()

XFCont está utilizando este método para mostrar mensajes a través de WAIT
WINDOW. Si desea cambiar esto, puede anular este método en una subclase.
Sintaxis:
XFCont::DisplayMessage(tcMessage)
Parámetros:
tcMessage
El mensaje para mostrar

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX

...

Referencia
metadata.attachments

Clase de INL de PDFL #


martinajindrova

Modificado por última vez sep 09, 2017

Propiedades:
PictureDPI

Resolución DPI (puntos por pulgada) a la que se vuelven a calcular todas


las imágenes. Puede usar esta propiedad para reducir el tamaño del
documento de salida.
Esta propiedad debe enviarse antes de llamar al método SetParams.
Valor predeterminado: 0 (no recalcular, mantener las imágenes como
están)

DefaultPictureFormat

Formato de imagen de los componentes de activeX convertidos en


imágenes.
Valores permitidos: "bmp", "jpg", "png", "tif", "gif"
Valor predeterminado: "jpg"

Calidad JPEG

Calidad JPEG para convertir a formato JPEG. Valor predeterminado: 80 XFRX


15.1.0

Métodos:
Documento de control

attachToPDFDocument ()

Adjunte el objeto XFRX # INIT con salida PDF.


Sintaxis:
PDFL::AttachtoPDFDocument(toSession)

Parámetros:
toSession
Instance del objeto XFRX # INIT.

EndPage ()

Cerrar la página actual.


Sintaxis:
PDFL::EndPage()

CreateDocument ()

Crea un nuevo archivo XFF.


Sintaxis:
PDFL::CreateDocument( m.tcName, m.tlAdd, m.tcOwner, m.tcUser)

Valores devueltos
0 ... el archivo se creó correctamente
-1 ... el archivo no pudo haberse creado ()

Se sobrescribe un archivo existente.


Parámetros:
tcName
El nombre del archivo si el documento se creará. Si este parámetro está vacío, el archivo XFF se crea
memoria.
tlAñadir
si .T. y existe el archivo, la salida se agregará al archivo existente.
m.tcOwner
La contraseña del propietario.
m.tcUser
La contraseña de usuario

FinishDocument ()

Cerrar página actual. Termina la creación del documento.


Sintaxis:
PDFL::FinishDocument()

NewPage()

Agrega una nueva página al final del documento.


Sintaxis:
PDFL::NewPage(tnPageWidth, tnPageHeight)

Parámetros:
tnPageWidth, tnPageHeight
El ancho y el alto de la nueva página.

SetOtherParams ()

Este método se usa para agregar varios parámetros específicos del tipo de salida. El primer parámetro e
valor de cadena que representa el parámetro que se establecerá, el segundo parámetro es los valores qu
establecerán. Ver para SetOtherParams (...)
Sintaxis:
PDFL::SetOtherParams(..)

ShowDocument ()

Mostrar archivo PDF a través de shell API.


Sintaxis:
PDFL::ShowDocument()

Propiedades del documento

setVersion ()

Establecer la versión del archivo PDF. Ver el parámetro PDF VERSIÓN .

setEmbeddingType ()

Establecer incrustación de fuente. Consulte la incrustación de fuentes en PDF .

setPDFA ()

Establecer la versión PDF \ A. Ver para PDF / A soporte

setOutline ()

Establecer la bandera de marcadores.


PDFL::SetOutline(m.tlShow)

setSubject ()

Establecer sujeto para el archivo de salida. Ver para setSubject () .

setKeywords ()

Establecer palabras clave para el archivo de salida. Ver para setKeywords ().
setCreator ()

Establecer creador para el archivo de salida. Ver para establecer el Creador ().

setProducer ()

Establecer productor para el archivo de salida. Ver para setProducer ().

setCreationDate ()

Establecer la fecha de creaciones para el archivo de salida. Ver para setCreationDate ().

setComments ()

Establecer comentarios para el archivo de salida. Ver para establecer los comentarios ().

setCategory ()

Establecer la categoría para el archivo de salida. Ver para establecercategoría ().

setManager ()

Establecer el administrador para el archivo de salida. Ver para setManager ().

setCompany ()

Establecer compañía para el archivo de salida. Ver para establecer compañía ().

setAuthor ()

Establecer autor para el archivo de salida. Ver para establecerAutor ().

setTitle ()

Establecer el título para el archivo de salida. Ver para setTitle ()

setPermissions ()

Establezca los permisos de usuario en el documento PDF. Ver para establecer Permissions ().

setPasswords ()

Establecer contraseña para el archivo de salida. Ver para establecer contraseñas ().
DigitalSignature()

Establecer la firma digital para el archivo de salida. Consulte las características específicas de PDF #Señas
digitales en PDF .

Métodos de dibujo

AddBox ()

Dibuja un rectángulo en la página actual.


Sintaxis:
PDFL::AddBox(m.x0, m.y0, m.nwidth, m.nheight, m.nsize, <font></font>

m.nfill, m.tnpenpat, m.noffset, m.tnMode, m.tnRotate, m.lnRotationPoint

Parámetros:
X0, Y0
Las coordenadas X, Y de la esquina superior izquierda.
nWidth
El ancho del rectángulo
nAlto
La altura del rectángulo
nSize
El ancho de línea en puntos. 0 representa la línea del cabello. Opcional, valor predeterminado = 1.
tnRellene
el patrón de relleno:
0 ... Sin relleno
1 ... Relleno (color)
2 ... Línea horizontal
3 ... Línea vertical
4 ... Diagonal ascendente
5 ... Diagonal descendente
6 ... Cruz
7 ... Cruz Diagonal
Opcional, valor predeterminado = 0.
tnPenPat
El patrón de línea de borde:
0 ... sin borde
1 ... con puntos
2 ... con puntos
3 ... punto y con puntos
4 ... punto-con-puntos
8 ... línea sólida
Opcional, valor predeterminado = 8.
nOffset
El radio de la curvatura de los bordes del rectángulo. 0 hace que el rectángulo esté en ángulo recto (si
redondeo), 99 crea una elipse. Opcional, valor predeterminado = 0.
tnMode
El modo opaque / transparent (desde XFRX 16.0):
0 ... Opaco
1 ... Transparente
Opcional, valor predeterminado = 0.

tnRotate (desde XFRX 17.3) El ángulo de rotación del texto en grados. La etiqueta se girará en el se
contrario a las agujas del reloj. Opcional, valor predeterminado = 0.
tnRotationPoint (desde XFRX 17.3)
El punto dentro del rectángulo alrededor del cual se rota el texto. Los valores permitidos son 0..8, opc
valor predeterminado = 0 (izquierda, arriba). Por favor, mira la imagen a la derecha para las posiciones
los puntos.

El borde y el color de relleno deben definirse mediante el método SetColor () antes de llamar al
método AddBox () .

Añadir línea()

Dibuja una línea en la página actual.


Sintaxis:
PDFL::AddLine(m.x0, m.y0, m.x1, m.y1, m.lnWidth<font></font>

[, m.lnPattern[, m.tnRotation]])

Parámetros:
X0, Y0
Las coordenadas X, Y del punto de inicio de la línea.
X1, Y1
Las coordenadas X, Y del punto final de la línea.
lnWidth
El ancho de línea en puntos. 0 representa la línea del cabello. Opcional, valor predeterminado = 1.
lPenPattern
El patrón de línea de borde:
0 ... sin borde
1 ... con puntos
2 ... con puntos
3 ... punto y con puntos
4 ... punto-con-puntos
8 ... línea sólida
Opcional, valor predeterminado = 8.
tnRotación Ángulo de rotación. Opcional, valor predeterminado = 0.
El color del borde debe definirse mediante el método SetForeColor () antes de llamar al método Add
() .

AppendLine ()

Agregue una línea desde la posición actual en la página actual.


Sintaxis:
PDFL::AppendLine(m.tnx, m.tny)

Parámetros:
tnX, tnY
Las coordenadas X, Y del punto final de la línea.

AppendBezier ()

Adjunte una línea bezier desde la posición actual en la página actual.


Sintaxis:
PDFL::AppendBezier(m.tnx, m.tny, m.tnx1, m.tny1, m.tnx2, m.tny2)

Parámetros:
tnX, tnY
Las coordenadas X, Y de la esquina superior izquierda del rectángulo delimitador.

tnX1, tnY1
Las coordenadas X, Y del punto final de la línea.
tnX1, tnY1
A puntos de control de Bézier.

Añade una foto()

Dibuja una imagen en la página actual en un rectángulo delimitador dado.


Sintaxis:
PDFL::AddPicture(m.tcPic, m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight, <font></font>

m.tnAdjType, m.tnRotate, m.tnRotationPoint<font></font>

[, m.lcLinkName[, m.lcLinkHref<font></font>

[, m.lcmyk[, m.lneg[, m.tcMask]]]]])

Parámetros:
tcPic
El nombre del archivo de imagen
tnLeft, tnTop
Las coordenadas X, Y de la esquina superior izquierda del rectángulo delimitador.
tnWidth
El ancho del rectángulo
tnHigh
La altura del rectángulo
tnAdjType
0 ... imagen de clip
1 ... estira la imagen, conserva la forma
2 ... estira la imagen, llena el cuadro
tnRotate
El ángulo de rotación del texto en grados. La etiqueta se girará en el sentido contrario a las agujas del
reloj. Opcional, valor predeterminado = 0.
tnRotationPoint
El punto dentro del rectángulo alrededor del cual se rota el texto. Los valores permitidos son 0..8, opc
valor predeterminado = 0 (izquierda, arriba). Por favor, mira la imagen a la derecha para las posiciones
los puntos.
lcLinkName
Si se completa este parámetro, el texto será un objetivo designado de un hipervínculo. (ver
el parámetro l cLinkRef ).
lcLinkRef
Si se completa este parámetro, el texto será un hipervínculo. Navegará a un destino con
el nombre l cLinkRef .
lcmyk
.T. o .F. si la imagen de JEG usa CMYK ...
lNeg
.T. o .F. si la imagen usa colores negativos.
tcMask
Color de máscara transparente para ver la imagen transparente .

AddGenPicture ()

Dibuja un campo general en la página actual en un rectángulo delimitador dado.


Sintaxis:
PDFL::AddGenPicture(m.tcField, m.tnLeft, m.tnTop, m.tnWidth, m.tnHeight, <font></fon

m.tnAdjType, m.tnRotate, m.lnRotationPoint<font></font>


[, m.lcLinkName[, m.lcLinkHref<font></font>

[, m.lcmyk[, m.lneg[, m.tcMask]]]]])

Parámetros:
tcField
El nombre general del campo
tnLeft, tnTop
Las coordenadas X, Y de la esquina superior izquierda del rectángulo delimitador.
tnWidth
El ancho del rectángulo
tnHigh
La altura del rectángulo
tnAdjType
0 ... imagen de clip
1 ... estira la imagen, conserva la forma
2 ... estira la imagen, llena el cuadro
tnRotate
El ángulo de rotación del texto en grados. La etiqueta se girará en el sentido contrario a las agujas del
reloj. Opcional, valor predeterminado = 0.
tnRotationPoint
El punto dentro del rectángulo alrededor del cual se rota el texto. Los valores permitidos son 0..8, opc
valor predeterminado = 0 (izquierda, arriba). Por favor, mira la imagen a la derecha para las posiciones
los puntos.
lcLinkName
Si se completa este parámetro, el texto será un objetivo designado de un hipervínculo. (ver
el parámetro l cLinkRef ).
lcLinkRef
Si se completa este parámetro, el texto será un hipervínculo. Navegará a un destino con
el nombre l cLinkRef .
lcmyk
.T. o .F. si la imagen de JEG usa CMYK ...
lNeg
.T. o .F. si la imagen usa colores negativos.
tcMask
Color de máscara transparente para ver la imagen transparente .

nueva línea()

Cambiar posición para nueva línea.


Sintaxis:
PDFL::NewLine()

outText ()

Poner texto en la posición actual.


Sintaxis:
PDFL::OutText(m.tcText, m.tnRotation, m.lnRotationPoint, <font></font>

m.llAddBackColor, m.lcLinkName, m.lcLinkHref)

Parámetros:
tc
Texto de salida de texto.

tnRotación
El ángulo de rotación del texto en grados. La etiqueta se girará en el sentido contrario a las agujas del
reloj. Valor predeterminado opcional = 0.

lnRotationPoint
Punto dentro del rectángulo alrededor del cual se gira el texto. Los valores permitidos son 0..8, opcio
valor predeterminado = 0 (izquierda, arriba). Por favor, mira la imagen a la derecha para las posiciones
los puntos.

llAddBackColor
Agrega color de fondo debajo del texto.

lcLinkName
Si se completa este parámetro, el texto será un objetivo designado de un hipervínculo. (ver
el parámetro l cLinkRef ).

lcLinkHref
Si se completa este parámetro, el texto será un hipervínculo. Navegará a un destino con
el nombre l cLinkRef .

SetBackColor ()

Establece los colores del dibujo de fondo.


Sintaxis:
PDFL::SetColor(tbr, tbg, tbb)

Parámetros:
tbr, tbg, tbb Componentes
rojos, verdes y azules del color de fondo (opcional)
SetColor ()

Establece los colores de dibujo en primer plano y en segundo plano.


Sintaxis:
PDFL::SetColor(tfr, tfg, tfb, tbr, tbg, tbb)

Parámetros:
tfr, tfg, tfb Componentes
rojos, verdes y azules del color de primer plano
tbr, tbg, tbb Componentes
rojos, verdes y azules del color de fondo (opcional)

SetFont ()

Establece el nombre y los atributos de la fuente para las siguientes llamadas a DrawText () o DrawText
().
Sintaxis:
PDFL::SetFont(tcFontName, tnSize[, tlBold[, tlItalic[, tlUnderline

[, tnEmbed[, lnCodePage ]]]]])

Parámetros:
tcFontName
El nombre de la fuente
tnSize
El tamaño de fuente en puntos
tlBold, tlItalics, tlUnderline
Los atributos de la fuente. Estos parámetros son opcionales, el valor predeterminado es .F.

tnEmbed Insertar
fuente
0 - la fuente no se incrustará.
1 - la fuente se incluirá como subconjunto
2 - la fuente se incluirá como todos los caracteres
3 - la fuente se incluirá como subíndice UNICODE en la página Código de página de códigos.
SetForeColor ()

Establece los colores de dibujo en primer plano.


Sintaxis:
PDFL::SetColor(tfr, tfg, tfb)

Parámetros:
tfr, tfg, tfb Componentes
rojos, verdes y azules del color de primer plano

SetPos ()

Establece la posición donde el texto será dibujado por la llamada al método DrawText () posterior .
Sintaxis:
PDFL::SetPos(tnXPos, tnYPos)

Parámetros:
tnXPos, tnYPos
Las coordenadas X e Y (horizontal y vertical) de la posición. La unidad de coordenadas se define me
el método SetUnit () , la unidad predeterminada es Point (pt).

 Propiedades:
 PictureDPI
 DefaultPictureFormat
 Calidad JPEG
 Métodos:
 Documento de control
 attachToPDFDocument ()
 EndPage ()
 CreateDocument ()
 FinishDocument ()
 NewPage()
 SetOtherParams ()
 ShowDocument ()
 Propiedades del documento
 setVersion ()
 setEmbeddingType ()
 setPDFA ()
 setOutline ()
 setSubject ()
 setKeywords ()
 setCreator ()
 setProducer ()
 setCreationDate ()
 setComments ()
 setCategory ()
 setManager ()
 setCompany ()
 setAuthor ()
 setTitle ()
 setPermissions ()
 setPasswords ()
 DigitalSignature()
 Métodos de dibujo
 AddBox ()
 Añadir línea()
 AppendLine ()
 AppendBezier ()
 Añade una foto()
 AddGenPicture ()
 nueva línea()
 outText ()
 SetBackColor ()
 SetColor ()
 SetFont ()
 SetForeColor ()
 SetPos ()

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX

...

Referencia
metadata.attachments

Clase eqZip

martinajindrova
Modificado por última vez may 10, 2017

Esta sección describe métodos para crear archivo ZIP.


Archivo abierto()

Abrir archivo de archivo ZIP.


Sintaxis:
eqZIP::OpenArchive(m.tcZipName, m.tnAppend)

Parámetros:
m.tcZipName
El archivo de archivo ZIP.

m.tnAppen
Un indicador de agregar.

Valores devueltos
.T. - Archivar crear / abrir con éxito.
.F. - Archivo no crear / abrir con éxito.

CloseArchive ()

Cerrar archivo de archivo ZIP.


Sintaxis:
eqZIP::CloseArchive(m.tcComment)

Parámetros:
m.tcComment
Comentario de archivo ZIP.

OpenNewFile ()

Abra el manejador de archivo.


Sintaxis:
eqZIP::OpenNewFile(m.tcFileName, m.ttCreated, m.llIWontUTF8, m.lcPassword, m.liCRC32

Parámetros:
m.tcFileName
Nombre de archivo en archivo ZIP.

m.ttCreated
Fecha y hora creada.

m.llIWontUTF8
Un deseo usa UTF-8 para codificar el nombre del archivo.
Para la codificación UTF-8 o la contraseña es needy zlib.dll versión 1.25 o superior .
m.lcPassword
Contraseña de archivo

m.liCRC32
Archivo de suma de comprobación CRC32. es obligatorio para m.lcPassword . Checksum es para todos los dato

Valores devueltos
0 - Archivo anexado al archivo ZIP.
-102 - ZIP_PARAMERROR
-103 - ZIP_BADZIPFILE
-104 - ZIP_INTERNALERROR

AppendFile ()

Agregue un archivo al archivo ZIP.


Sintaxis:
eqZIP::AppendFile(m.tcFilename, m.tcNameInArchive, m.llIWontUTF8, m.lcPassword)

Parámetros:
m.tcFileName
El nombre del archivo de origen.

m.tcNameInArchive
Nombre de archivo en archivo ZIP.

m.llIWontUTF8
Un deseo usa UTF-8 para codificar el nombre del archivo.
Para la codificación UTF-8 o la contraseña es needy zlib.dll versión 1.25 o superior .
m.lcPassword
Contraseña de archivo

Valores
devueltos -1 - El archivo fuente no existe
-2 - El archivo fuente no puede abrir
0 - Archivo anexar al archivo ZIP
-102 - ZIP_PARAMERROR
-103 - ZIP_BADZIPFILE
-104 - ZIP_INTERNALERROR

WriteData ()

Escribir datos en el manejador de archivo abierto.


Sintaxis:
eqZIP::WriteData(m.tcData)

Parámetros:
m.tcData
Datos que se escribirán en el identificador del archivo.
Valores de retorno
-102 - ZIP_PARAMERROR
-103 - ZIP_BADZIPFILE
-104 - ZIP_INTERNALERROR

Cerrar el archivo()

Cierre el identificador del archivo.


Sintaxis:
eqZIP::CloseFile()

SYS2007 ()

Calcule la suma de comprobación CRC32 para los datos.


Sintaxis:
eqZIP::SYS2007(m.lcData)

Parámetros:
m.lcData
Datos que calculan la suma de comprobación CRC32.

 Archivo abierto()
 CloseArchive ()
 OpenNewFile ()
 AppendFile ()
 WriteData ()
 Cerrar el archivo()
 SYS2007 ()

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX

...
/

Referencia
metadata.attachments

Clase de LECTOR DE PDF #

martinajindrova

Modificado por última vez may 10, 2017

Desde XFRX 17.1

Propiedades:
lReadObjectData

Habilitado / deshabilitado los datos del objeto de


lectura.
Valor de defecto: .F.

cCursorName

Nombre del cursor para objetos PDF.

Métodos:
openDocument ()

Abrir archivo PDF


Sintaxis:
pdfReader::OpenDocument(m.tcFile)

Parámetros:
m.tcFile
El archivo PDF.

Valores devueltos
.T. - Archivo PDF abierto con éxito.
.F. - El archivo PDF no se abre con éxito.
ReadDocument ()

Lea el archivo pdf de contenido.


Sintaxis:
pdfReader::ReadDocument()

Valores devueltos
0 - OK
-10 - El documento existente está dañado o en un formato
no compatible
-17 - PDFpassword no es válido.

CloseDocument ()

Cerrar archivo PDF


Sintaxis:
pdfReader::CloseDocument()

SetPasswords ()

Establece contraseñas para la protección de documentos


PDF.
pdfReader::SetPasswords(m.tcOwner, m.tcUser)

Parámetros:
m.tcOwner
La contraseña del propietario
m.tcUser
La contraseña del usuario.

Ejemplo

m.pdfReader = EVALUATE([xfrx("PDF#READER")])<font></font>

m.pdfReader.lReadObjectData=.T.<font></font>

*m.pdfReader.SetPasswords("owner","user") && set password for pdf file<font></font>

<font></font>

lcfile="BASE-UNI.pdf"<font></font>

IF m.pdfReader.openDocument(lcFile) < 0<font></font>

RETURN<font></font>
ENDIF<font></font>

m.pdfReader.ReadDocument()<font></font>

SELE (m.pdfreader.cCursorName)<font></font>

BROWSE NORMAL<font></font>

m.pdfReader.closeDocument()

 Propiedades:
 lReadObjectData
 cCursorName
 Métodos:
 openDocument ()
 ReadDocument ()
 CloseDocument ()
 SetPasswords ()

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX

...

Referencia
metadata.attachments

Clase XFRX # XML

martinajindrova

Modificado por última vez nov 12, 2017

Propiedades:
PageCount

El número total de páginas en el documento XFF


( numérico)

Métodos:
AddPage ()

Agrega una nueva página al final del documento.


Sintaxis:
XFRXDraw::AddPage([tcPageSize])

O
XFRXDraw::AddPage(tnPageWidth, tnPageHeight)

Parámetros:
tcPageSize
El tamaño de página de la página nueva. Valores disponibles: "A4", "carta"
tnPageWidth, tnPageHeight
El ancho y el alto de la nueva página. La unidad se puede definir mediante
el método SetUnit (). La unidad por defecto apunta (1/72 en).
Si no se especifica el tamaño de página, se utiliza el tamaño de página actual.

CreateDocument ()

Crea un nuevo archivo XFF.


Sintaxis:
XFRXDraw::CreateDocument([tcFileName])

Valores devueltos
.T. ... el archivo se creó con éxito
.F. ... archivo no pudo haber sido creado ()

Se sobrescribe un archivo existente.


Parámetros:
tcFileName
El nombre del archivo si el documento se creará. Si este parámetro está vacío, el archivo
XFF se crea en la memoria.
Dibujar linea()

Dibuja una línea en la página actual.


Sintaxis:
XFRXDraw::DrawLine(tnXPos, tnYPos, tnXToPos, <font></font>

tnYToPos [, tnLineWidth[, tnPenPattern]])

Parámetros:
tnXPos, tnYPos
Las coordenadas X, Y del punto de inicio de la línea.
tnXToPos, tnYPPos
Las coordenadas X, Y del punto final de la línea.
tnLineWidth
El ancho de línea en puntos. 0 representa la línea del cabello. Opcional, valor
predeterminado = 1.
tnPenPattern
El patrón de línea del borde:
0 ... sin borde
1 ... con puntos
2 ... con puntos
3 ... con puntos y rayas
4 ... punto con punto y coma
8 ... línea sólida
Opcional, valor predeterminado = 8.

Dibujar la imagen()

Dibuja una imagen en la página actual en un rectángulo delimitador dado.


Sintaxis:
XFRXDraw::DrawPicture(tnXPos, tnYPos, tnWidth, tnHeight, <font></font>

tcFilename[, tnAdjType<font></font>

[, llCentralHorizontaly[, tnRotate[,<font></font>

tnRotationPoint[, tcLinkName[, tcLinkRef]]]]]])

Parámetros:
tnXPos, tnYPos
Las coordenadas X, Y de la esquina superior izquierda del rectángulo delimitador.
tnWidth
El ancho del rectángulo
tnHigh
La altura del rectángulo
tcFileName
El nombre del archivo de imagen
tnAdjType
0 ... imagen de clip
1 ... estira la imagen, conserva la forma
2 ... estira la imagen, llena el cuadro
llCentralHorizontaly
Center horizontaly en el marco (desde XFRX 15.7).
tnRotate
El ángulo de rotación del texto en grados. La etiqueta se girará en el sentido contrario a las
agujas del reloj. Valor predeterminado opcional = 0 (desde XFRX 15.7).
tnRotationPoint

El punto dentro del rectángulo alrededor del cual se rota el texto. Los valores permitidos son
0..8, opcional, valor predeterminado = 0 (izquierda, arriba). Consulte la imagen de la derecha
para las posiciones de los puntos (desde XFRX 15.7).
tcLinkName
Si se completa este parámetro, el texto será un objetivo designado de un
hipervínculo. ( Consulte el parámetro tcLinkRef ) (desde XFRX 15.7).
tcLinkRef
Si se completa este parámetro, el texto será un hipervínculo. Navegará a un destino con
el nombre tcLinkRef (desde XFRX 15.7).

DrawGeneralField ()

Dibuja una imagen en la página actual en un rectángulo delimitador dado. (desde XFRX 16.1)
Sintaxis:
XFRXDraw::DrawGeneralField(tnXPos, tnYPos, tnWidth, <font></font>

tnHeight, tcFieldName[, tnAdjType<font></font>

[, llCentralHorizontaly[, tnRotate<font></font>

[, tnRotationPoint[, tcLinkName<font></font>

[, tcLinkRef]]]]]])
Parámetros:
tnXPos, tnYPos
Las coordenadas X, Y de la esquina superior izquierda del rectángulo delimitador.
tnWidth
El ancho del rectángulo
tnHigh
La altura del rectángulo
tcFieldName
El nombre general del campo
tnAdjType
0 ... clip Imagen
1 ... estira la imagen, conserva la forma
2 ... estira la imagen, llena el cuadro
llCentralHorizontaly
Center horizontaly en el marco.
tnRotate
El ángulo de rotación del texto en grados. La etiqueta se girará en el sentido contrario a las
agujas del reloj. Opcional, valor predeterminado = 0.
tnRotationPoint

El punto dentro del rectángulo alrededor del cual se rota el texto. Los valores permitidos son
0..8, opcional, valor predeterminado = 0 (izquierda, arriba). Por favor, mira la imagen a la
derecha para las posiciones de los puntos.
tcLinkName
Si se completa este parámetro, el texto será un objetivo designado de un
hipervínculo. (ver parámetro tcLinkRef ).
tcLinkRef
Si se completa este parámetro, el texto será un hipervínculo. Navegará a un destino con
el nombre tcLinkRef .

DrawRectangle ()

Dibuja un rectángulo en la página actual.


Sintaxis:
XFRXDraw::DrawRectangle(tnXPos, tnYPos, tnWidth, <font></font>

tnHeight [, tnLineWidth<font></font>

[, tnFillPattern<font></font>

[, tnPenPattern[, tnRoundFactor<font></font>

[, tnMode [,tnRotate [,tnRotationPoint]]]]]]]])

Parámetros:
tnXPos, tnYPos
Las coordenadas X, Y de la esquina superior izquierda.
tnWidth
El ancho del rectángulo
tnHigh
La altura del rectángulo
tnLineWidth
El ancho de línea en puntos. 0 representa la línea del cabello. Opcional, valor
predeterminado = 1.
tnFillPattern
El patrón de relleno:
0 ... Sin relleno
1 ... Relleno (color)
2 ... Línea horizontal
3 ... Línea vertical
4 ... Diagonal ascendente
5 ... Diagonal descendente
6 ... Cruz
7 ... Cruz Diagonal
Opcional, valor predeterminado = 0.
tnPenPattern
El patrón de línea del borde:
0 ... sin borde
1 ... con puntos
2 ... con puntos
3 ... con puntos y rayas
4 ... punto con punto y coma
8 ... línea sólida
Opcional, valor predeterminado = 8.
tnRoundFactor
El radio de la curvatura de los bordes del rectángulo. 0 hace que el rectángulo esté en ángulo
recto (sin redondeo), 99 crea una elipse. Opcional, valor predeterminado = 0.
tnMode
El modo opaque / transparent (desde XFRX 16.0):
0 ... Opaco
1 ... Transparente
Opcional, valor predeterminado = 0.
tnRotate (desde XFRX 17.3) El ángulo de rotación del texto en grados. La etiqueta se girará
en el sentido contrario a las agujas del reloj. Opcional, valor predeterminado = 0.
tnRotationPoint (desde XFRX 17.3)

El punto dentro del rectángulo alrededor del cual se rota el texto. Los valores permitidos son
0..8, opcional, valor predeterminado = 0 (izquierda, arriba). Por favor, mira la imagen a la
derecha para las posiciones de los puntos.
El borde y el color de relleno deben definirse mediante el método SetColor () antes de llamar
al método DrawRectangle () .

DrawText ()

Dibuja un texto, usando una fuente definida por el método SetFont .


Sintaxis:
XFRXDraw::DrawText(tnLeft, tnTop, tcText<font></font>

[, tnRotate[, tcLinkName[,<font></font>

tcLinkRef[, tcBookmark<font></font>

[, tcTooltip[, tnmode[, liCP]]]]]]])

O
XFRXDraw::DrawText(tcText[, tnRotate[, <font></font>

tcLinkName[, tcLinkRef[, <font></font>

tcBookmark[, tcTooltip[, <font></font>

tnmode[, liCP]]]]]]])

Parámetros:
tnLeft, tnTop
Las coordenadas donde se dibujará el texto. Si se usa la segunda sintaxis (sin las
coordenadas), el texto se dibujará en la posición actual: que es una posición definida por
el método SetPos () o un final de una salida si la llamada anterior al método DrawText () .
tcText
El texto a dibujar
tnRotate
El ángulo de rotación del texto en grados. La etiqueta se girará en el sentido contrario a las
agujas del reloj. Opcional, valor predeterminado = 0.
tcLinkName
Si se completa este parámetro, el texto será un objetivo designado de un
hipervínculo. (ver parámetro tcLinkRef ).
tcLinkRef
Si se completa este parámetro, el texto será un hipervínculo. Navegará a un destino en el
documento local con el nombre tcLinkRef . Para navegar a una URL http, incluya "http: //" al
comienzo del parámetro.
tcBookmark
No está vacío, el parámetro contiene el nombre de un marcador que se creará y navegará
hasta este texto.
tcTooltip
La información sobre herramientas que se muestra al pasar el mouse sobre este texto.
tnMode Modo
opaco / transparente (desde XFRX 15.7).
0 ... "opaco
1 ..." transparente "

Página de texto del código de liCP (desde XFRX 15.7)

DrawTextBox ()

Word ajusta el texto de entrega e imprime en un rectángulo delimitador determinado. Si la


altura del rectángulo es cero, entonces el rectángulo se estira para ajustarse al texto completo
y se devuelve la altura del rectángulo.
Sintaxis:
XFRXDraw::DrawTextBox(tnLeft, tnTop, tnWidth, tnHeight, <font></font>

tcText[, tnAlign[, tnVAlign<font></font>

[, tnRotate[,tnRotationPoint[,<font></font>

tcLinkName[, tcLinkRef[, tcBookmark<font></font>

[, tcTooltip[, tnmode[, liCP]]]]]]]]]])

Valor de retorno: se devuelve la


altura del rectángulo delimitador.
Parámetros:
tnLeft, tnTop
Las coordenadas X e Y de la esquina superior izquierda del rectángulo delimitador.
tnWidth, tnHeight
El ancho y la altura del rectángulo delimitador. Si tnHeight es 0, el rectángulo se estira
para ajustarse al texto completo y se devuelve la altura del rectángulo.
tnAlign
La alineación horizontal del texto dentro del rectángulo. Los valores permitidos son:
0 ... "izquierda"
1 ... "centro"
2 ... "derecha"
3 ... "bloque" (justificación completa)
Opcional, el valor predeterminado es 0 (izquierda).
tnVAlign
La alineación vertical del texto dentro del rectángulo. Los valores permitidos son:
0 ... "arriba"
1 ... "centro"
2 ... "abajo".
Opcional, el valor predeterminado es 0 (arriba).
tnRotate
El ángulo de rotación del texto en grados. La etiqueta se girará en el sentido contrario a las
agujas del reloj. Opcional, valor predeterminado = 0.
tnRotationPoint

El punto dentro del rectángulo alrededor del cual se rota el texto. Los valores permitidos son
0..8, opcional, valor predeterminado = 0 (izquierda, arriba). Por favor, mira la imagen a la
derecha para las posiciones de los puntos.
tcLinkName
Si se completa este parámetro, el texto será un objetivo designado de un
hipervínculo. (ver parámetro tcLinkRef ).
tcLinkRef
Si se completa este parámetro, el texto será un hipervínculo. Navegará a un destino con
el nombre tcLinkRef .
tcBookmark
No está vacío, el parámetro contiene el nombre de un marcador que se creará y navegará
hasta este texto.
tcTooltip
La información sobre herramientas que se muestra al pasar el mouse sobre este texto.
modo tnMode
Opaque / transparent (desde XFRX 15.4).
0 ... "opaco
1 ..." transparente "

Página de texto del código de liCP (desde XFRX 15.7)

GetBoundingRectangle ()

Devuelve las coordenadas del rectángulo delimitador en el script vinculado a un rectángulo.


Sintaxis:
XFRXDraw::GetBoundingRectangle()

Valor de retorno:
NULL : el rectángulo delimitador no está disponible

Object - un objeto con las siguientes propiedades:


nLeft, nTop - las coordenadas de la esquina superior izquierda del rectángulo
nWidth, nHeight - el ancho y alto del rectángulo

La unidad de coordenadas se puede configurar mediante el método SetUnit () . La unidad


predeterminada es Point (1/72 in).

GetPageWidth ()

Devuelve el ancho de la página.

GetPageHeight ()

Devuelve la altura de la página.

GetXPos ()

Devuelve la coordenada horizontal de la posición actual.


Sintaxis:
XFRXDraw::GetXPos()
GetYPos ()

Devuelve la coordenada vertical de la posición actual.


Sintaxis:
XFRXDraw::GetYPos()

OpenDocument ()

Abre un archivo XFF existente.


Sintaxis:
XFRXDraw::OpenDocument(tcFileName)

Valores devueltos
.T. ... el archivo se abrió con éxito
.F. ... el archivo no se pudo haber abierto (el archivo no existe o está bloqueado)

SetColor ()

Establece los colores de dibujo en primer plano y en segundo plano.


Sintaxis:
XFRXDraw::SetColor(tfr, tfg, tfb[, tbr, tbg, tbb])

Parámetros:
tfr, tfg, tfb Componentes
rojos, verdes y azules del color de primer plano
tbr, tbg, tbb Componentes
rojos, verdes y azules del color de fondo (opcional)

SetFont ()

Establece el nombre y los atributos de la fuente para las siguientes llamadas a DrawText () o
DrawTextBox ().
Sintaxis:
XFRXDraw::SetFont(tcFontName, tnSize[, tlBold[, <font></font>

tlItalic[, tlUnderline[, <font></font>

tlStrikeThrough]]]])

Parámetros:
tcFontName
El nombre de la fuente
tnSize
El tamaño de fuente en puntos
tlBold, tlItalics, tlUnderline, tlStrikeThrough
Los atributos de la fuente. Estos parámetros son opcionales, el valor predeterminado es
.F. El parámetro tlStrikeThrough es desde XFRX 15.7

SetPos ()

Establece la posición donde el texto será dibujado por la llamada al método DrawText
()posterior .
Sintaxis:
XFRXDraw::SetPos(tnXPos, tnYPos)

Parámetros:
tnXPos, tnYPos
Las coordenadas X e Y (horizontal y vertical) de la posición. La unidad de coordenadas se
define mediante el método SetUnit () , la unidad predeterminada es Point (pt).

SetUnit ()

Establece las unidades de dibujo.


Sintaxis:
XFRXDraw::SetUnit(tcUnit)

Parámetros:
tcUnit
El código de unidad. Los valores permitidos son: "in" - pulgadas, "cm" - centímetros, "pt" -
puntos y "px" - píxeles.

La unidad predeterminada es punto.

 Propiedades:
 PageCount
 Métodos:
 AddPage ()
 CreateDocument ()
 Dibujar linea()
 Dibujar la imagen()
 DrawGeneralField ()
 DrawRectangle ()
 DrawText ()
 DrawTextBox ()
 GetBoundingRectangle ()
 GetPageWidth ()
 GetPageHeight ()
 GetXPos ()
 GetYPos ()
 OpenDocument ()
 SetColor ()
 SetFont ()
 SetPos ()
 SetUnit ()

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX
/
Páginas
/
Guía del desarrollador

Lista de compatibilidad DLL / FLL

martinajindrova
Modificado por última vez mar 01, 2018

XFRX XFRXLIB.fll HNDLIB.dll darse cuenta

18.0 134 128 xfrxlib.fll


- _xfTrim () - error de
escala DPI fijo

17.3.1 134 128

17.3 134 128 xfrxlib.fll


- _xfbmp () - error
BPP corregido
- _xf_convertImage ()
- imagen nueva
respecto a bpp de la
imagen original
- nueva
función _xfGetLTI ()
XFRX XFRXLIB.fll HNDLIB.dll darse cuenta

hndlib.dll
- nueva función
zipFile ()
- nuevos parámetros en
dobmp ()

17.2.1 133 127 xfrxlib.fll


- _xfbmp () - soporte
rotar para rectángulos,
mejores rectángulos
pinturas

17.2 133 127

17.1 133 127 xfrxlib.fll


- _xfTrim - error
reparado -
_xfCropImage - nueva
función
hndlib.dll
- error reparado con
caracteres chinos
- error pequeño
reparado en HEXFile
()

17.0 132 127 hndlib.dll


- (pdf) Añadir soporte
para BMP 16bpp
RGB555 / RGB565 /
RGB, BMP 2bpp,
BMP 4bppRLE, BMP
8bppRLE, BMP OS /
2, BMP con formato
JPEG / PNG
-_ww () - palabra que
falta para la alineación
a la derecha
xfrxlib.fll
- _xfbmp () - mejor
soporte para el
rectángulo con curvas
-_xfWordWrap () -
palabra faltante para la
alineación correcta,
error Cx00000005.
-_xfWMF2Image -
XFRX XFRXLIB.fll HNDLIB.dll darse cuenta

nueva función

16.1.X 132 126 hndlib.dll


- nuevas funciones
MDString (), MD5File
()

16.0 132 125 xfrxlib.fll


- _xfConvertImage () -
Solución de error con
GIF87a
- _xfGetDPIScale () -
Solución de error con
DPI
- _xfBmp2 () -
compatible con las
propiedades del
documento

15.7 131 125 hndlib.dll - error


reparado con alguna
fuente de Symbol -
error reparado para
fuentes monoespaciado
con ancho de
caracteres (como
Courier New) - error
reparado
para caracteres
inexistentes en la
fuente

15.6 131 124

15.5 131 124 xfrxlibfll


- corrigió errores en
_xfBmp2 () para la
fuente PostScript

15.4 131 124 xfrxlibfll


- error reparado
en
_xfImageGetDPI
()
- error reparado
XFRX XFRXLIB.fll HNDLIB.dll darse cuenta

en _xfBmp2 ()
- nueva función
agregada
_xfAddProperty
()
- changed
_xfSaveImage ()

15.3 130 124 xfrxlib.fll: admite la


fuente PostScript
hndlib.dll - compatible
con cadenas UTF-8

15.2 130 124

15.1.1 130 124 xfrxlib.fll - nueva


función
_xfImageGetDPI

15.1 130 124 xfrxlib.fll - soluciona


algunos errores al
guardar en la imagen
hndlib.dll - corrige
algunos errores para la
salida PDF

15.0 129 123 xfrxlib.fll - soporte


dúplex
hndlib.dll - corrigió
algunos errores

14.7 129 123

14.6 129 123 xfrxlib.fll - nueva


función _xf_ImageBpp

14.5 129 123

14.4 129 123

14.3 129 123

14.2 129 123

14.0 129 123

12.9 129 123

12.8 127 123


XFRX XFRXLIB.fll HNDLIB.dll darse cuenta

12.7 127 123

12.6 124 123

12.5 124 123

12.4 124 123

12.3 123 123

12.2 122 120

12.1 122 120

12.0 121 120

11.3 113 113

11.2 111 98

11.1 111 98

11.0 102 98

10.2 102 98

10.1 _ 98

10.0 _ 98

9.8 _ 98

9.7 _ 96

9.6 _ 96

9.5 _ 95

9.0 _ 95

8.3 _ 81
 dll / fllcomplist

Notificaciones de banderas
Documentación XFRX
/
Páginas
/
Guía del desarrollador

Utiliza API de DLL externo

martinajindrova
Modificado por última vez feb 14, 2018

WIN32API

DECLARE INTEGER GetClassName EN win32api AS XFRX_GetClassName entero,


cadena @, INTEGER
DECLARE INTEGER FindWindow EN WIN32API AS XFRX_FindWindow
CADENA cnull, CADENA cwinname
DECLARE INTEGER GetCurrentProcessId EN WIN32API AS
XFRX_GetCurrentProcessId
DECLARE INTEGER GetActiveWindow EN win32api AS XFRX_GetActiveWindow
DECLARE INTEGER GetDC EN WIN32API AS XFRX_GetDC INTEGER iHWND
DECLARE INTEGER ReleaseDC EN WIN32API COMO XFRX_ReleaseDC
INTEGER ihwnd, INTEGER iHDC
DECLARE INTEGER GetDeviceCaps EN WIN32API COMO XFRX_GetDeviceCaps
INTEGER iHDC, INTEGER iIndex
DECLARE ScreenToClient EN WIN32API COMO XFRX_ScreenToClient INTEGER
hWnd, STRING @ lpPoint
DECLARE INTEGER GetSystemMetrics EN WIN32API COMO
XFRX_GetSystemMetrics INTEGER

kernel32.dll

DECLARE INTEGER GetLocaleInfo IN kernel32.dll AS XFRX_GetLocaleInfo


INTEGER, INTEGER, STRING @, INTEGER
DECLARE INTEGER GetEnvironmentVariable IN kernel32.dll AS
XFRX_GetEnvironmentVariable STRING lpName, STRING @ lpBuffer, INTEGER
nSize
DECLARE INTEGER CloseHandle IN kernel32 AS XFRX_CloseHandle INTEGER
lhProcess
DECLARE INTEGER WideCharToMultiByte IN kernel32. dll AS
XFRX_WideCharToMultiByte INTEGER, INTEGER, STRING @, INTEGER,
STRING @, INTEGER, STRING @, STRING @
DECLARE INTEGER MultiByteToWideChar IN kernel32.dll AS
XFRX_MultiByteToWideChar INTEGER, INTEGER, STRING @, INTEGER,
STRING @, INTEGER
DECLARE INTEGER GetTimeZoneInformation EN kernel32. dll AS
XFRX_GetTimeZoneInformation STRING @
DECLARE INTEGER OpenProcess EN kernel32 AS XFRX_OpenProcess INTEGER
dwDesiredAccessas, INTEGER bInheritHandle, INTEGER dwProcId
DECLARE INTEGER SetFileTime EN kernel32 AS XFRX_SetFileTime entero, cadena
@, CADENA @, CADENA @
DECLARE INTEGER SystemTimeToFileTime EN kernel32 AS
WIN32API

XFRX_SystemTimeToFileTime CADENA @ LPSYSTEMTIME, CADENA @


lpFileTime
DECLARE INTEGER CreateFile EN kernel32.dll AS XFRX_CreateFile STRING @,
INTEGER, INTEGER, INTEGER, INTEGER, INTEGER, INTEGER
DECLARE INTEGER CloseHandle IN kernel32.dll AS XFRX_CloseHandle
INTEGER
DECLARE INTEGER TzSpecificLocalTimeToSystemTime EN KERNEL32.dll AS
XFRX_TzSpecificLocalTimeToSystemTime STRING @lpTimeZone, STRING
@lpLocalTime, STRING @lpUniversalTime
DECLARE INTEGER LocalFileTimeToFileTime IN kernel32 AS
XFRX_LocalFileTimeToFileTime STRING @ lpLocalTime, STRING @ lpFileTime
DECLARE INTEGER SetProcessWorkingSetSize IN kernel32 AS
XFRX_SetProcessWorkingSetSize INTEGER hProcess, INTEGER
dwMinimumWorkingSetSize, INTEGER dwMaximumWorkingSetSize

zlib.dll

DECLARE INTEGER compress2 IN zlib AS XFRX_cxx STRING @, STRING @,


STRING @, INTEGER liSOURCELEN, INTEGER liLEVEL
DECLARE INTEGER compress IN zlib.dll AS XFRX_compresione STRING @,
INTEGER @, STRING @, INTEGER
DECLARE INTEGER descomprima IN ZLIB.DLL AS XFRX_uncompress STRING
@, INTEGER @, STRING @, INTEGER

gdi32.dll

DECLARE INTEGER TranslateCharsetInfo IN gdi32 AS XFRX_TranslateCharsetInfo


INTEGER, STRING @, INTEGER
DECLARE LONG CreateDC IN gdi32 AS XFRX_CreateDC STRING lpszDriver,
STRING lpszDevice, LONG lpszOutput, LONG lpInitData
DECLARE LONG DeleteDC IN gdi32 AS XFRX_DeleteDC LARGO hDC
DECLARE LONG DeleteEnhMetaFile EN gdi32.dll AS XFRX_DeleteEnhMetaFile
INTEGER
DECLARE LONG SetWinMetaFileBits EN gdi32.dll AS XFRX_SetWinMetaFileBits
INTEGER, STRING @, INTEGER, STRING @
DECLARE LONG CopyEnhMetaFile EN gdi32.dll AS XFRX_CopyEnhMetaFile
INTEGER, STRING @

OLE32.DLL

DECLARE INTEGER CLSIDFromString IN ole32 AS XFRX_CLSIDFromString


STRING, STRING @
DECLARE INTEGER CoCreateGuid EN OLE32.DLL COMO XFRX_CoCreateGuid
STRING @lcBuffer
DECLARE INTEGER StringFromGUID2 IN Ole32.dll AS XFRX_StringFromGUID2
STRING cGUIDStruc, STRING @cGUID, LONG nSize

psapi
WIN32API

DECLARE INTEGER GetModuleFileNameEx IN psapi AS


XFRX_GetModuleFileNameEx INTEGER hProcess, INTEGER hModule, STRING
ModuleName, INTEGER nSize
DECLARE INTEGER EnumProcessModules IN psapi AS
XFRX_EnumProcessModules INTEGER hProcess, STRING @lphModule, INTEGER
cb, INTEGER @lpcbNeeded

shell32.Dll

DECLARE INTEGER ShellExecute IN shell32.Dll AS XFRX_ShellExecute INTEGER


nWinHandle, STRING cOperation, STRING cFilename, STRING cParameters,
STRING cDirectory, INTEGER nShowWindow

ADVAPI32.DLL

DECLARE INTEGER RegQueryValueEx EN ADVAPI32.DLL AS


XFRX_RegQueryValueEx INTEGER, STRING @, INTEGER, INTEGER @, STRING
@, INTEGER @
DECLARE INTEGER RegOpenKeyEx EN ADVAPI32.DLL AS
XFRX_RegOpenKeyEx INTEGER, STRING @, INTEGER, INTEGER, INTEGER @
nKeyHandle
DECLARE INTEGER RegCloseKey EN ADVAPI32 .DLL COMO
XFRX_RegCloseKey INTEGER

winspool.drv

DECLARE LONG DeviceCapabilities IN winspool.drv AS XFRX_DeviceCapabilities


STRING @pDevice, STRING @pPort, LONG fwCapability, STRING @pOutput,
STRING @pDevMode

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX
/
Páginas
/
Guía del desarrollador

Licencia XFRX

Usuario desconocido (mst)


Modificado por última vez may 11, 2014 por Martin Haluza
Renuncia:

El software y la información provista por Eqeus.com se proporcionan "tal cual", sin garantía
alguna. Usted utiliza el software bajo su propio riesgo. Eqeus.com renuncia a todas las
garantías y condiciones, ya sean expresas o implícitas, incluidas, entre otras, las garantías de
comerciabilidad e idoneidad para un fin determinado. En ningún caso Eqeus.com será
responsable de ningún daño, incluidos, entre otros, daños directos, indirectos, especiales,
incidentales o consecuentes de ningún tipo, incluso si Eqeus.com ha sido advertido de la
posibilidad de dichos daños. Usted acepta no obtener o usar el software en ningún estado
o país que no permita la exclusión o limitación de responsabilidad por daños incidentales o
consecuentes.

La licencia de software permite distribuir XFRX y / o PDF Library con aplicaciones de


software a los usuarios finales para proporcionar una opción para transferir informes a los
formatos de salida de destino compatibles con XFRX.

La compra de la licencia le da derecho a recibir todas las versiones nuevas de XFRX y / o la


Biblioteca PDF de forma gratuita durante un año a partir de la fecha de compra.

El permiso está sujeto a las siguientes restricciones:

1. Los códigos fuente de la biblioteca XFRX y PDF NO se deben distribuir.

2. XFRX y PDF Library o cualquier parte del mismo NO debe distribuirse como herramienta
de software o como parte de una herramienta de software proporcionada a desarrolladores
de aplicaciones para ser incorporada en sus productos, incluidos, entre otros, marcos de
software y herramientas de generación de informes.

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX
/
Páginas
/
Guía del desarrollador

Tao de XFRX

martinajindrova
Modificado por última vez jul 25, 2015

 Cómo exportar datos a XLSX con filas máximas - 65535 para MS Excel 2003
 Cómo establecer un nombre de hoja personalizado para XLS, XLSPLAIN, ODS, FODS,
PFODS, NATIVE_FDOCX y NATIVE_PFDOCX
 Cómo configurar el área de impresión, ajustar al ancho en la configuración de página y el
índice de tamaño de papel para NATIVE_FXLSX y NATIVE_PFXLSX
 Cómo exportar texto como imagen a PDF o cambia otro atributo de fuente
 Cómo agregar estilo personalizado en el documento MS Word 2007
 XFRX # INIT e imágenes / documentos en el campo General

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX
/
...
/
Tao de XFRX

Cómo exportar datos a XLSX con filas


máximas - 65535 para MS Excel 2003

martinajindrova
Modificado por última vez ago 15, 2015

Los parámetros del método CopyToXLSX () son los mismos en Exportación de datos a XLSX
y ODS .
SET PROCEDURE TO xfrx.fxp<font></font>
m.loXLSX=CREATEOBJECT("_TOXLSX")<font></font>
m.loXLSX.nMaxRow=65535 && 1048576, 65535<font></font>
liErr=m.loXLSX.CopyToXLSX(m.lcAlias, m.lcFile, m.lcFCCallBack, m.lcSheetName, ;<font></fo
m.llAddHeader, m.llShowGrid, m.loProgress, m.lcSheetExpressionG

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX

...
/

Tao de XFRX

Cómo establecer un nombre de hoja


personalizado para XLS, XLSPLAIN, ODS,
FODS, PFODS, NATIVE_FDOCX y
NATIVE_PFDOCX

martinajindrova

Modificado por última vez ago 15, 2015

XFRX # INIT y salida directa


loSession=EVALUATE([xfrx("XFRX#INIT")])<font></font>

&& if each report has only one page, you can suppress page number in sheet name <font></

loSession.setOtherParams("ADDPAGENUMBERTOSHEETDISPLAYNAME",.F.) && since XFRX 15.6<font><

loSession.setOtherParams("NEXT_SHEET_NAME","First Report")<font></font>

loSession.ProcessReport(lcPath+"_reports\basetext") <font></font>

loSession.setOtherParams("NEXT_SHEET_NAME","Second Report") <font></font>

loSession.ProcessReport(lcPath+"_reports\baseshapes")...

XFRX # INIT, salida directa a XFF y transformación a


XFRX # LISTENER ...
XFRX # INIT
loXFF=EVALUATE([xfrx("XFRX#DRAW")]) <font></font>

loXFF.OpenDocument("out.xff")<font></font>

loSession=EVALUATE([xfrx("XFRX#INIT")]) <font></font>

loSession.setOtherParams("ADDPAGENUMBERTOSHEETDISPLAYNAME",.F.) && since XFRX 15.6 <font>


loHACK=CREATEOBJECT("_XFRXHACK",loSession)<font></font>

loSession.TransformReport(loXFF)<font></font>

RELE loHACK <font></font>

XFRX # LISTENER
loSession=EVALUATE([XFRX("XFRX#LISTENER")])<font></font>

lnRetVal = loSession.SetParams("temp.xls",,,,,,"XLS")<font></font>

IF lnRetVal = 0<font></font>

loSession.setOtherParams("ADDPAGENUMBERTOSHEETDISPLAYNAME",.F.)<font></font>

loHACK=CREATEOBJECT("_XFRXHACK",loSession)<font></font>

REPORT FORM (lcPath+"_reports\firstreport") NOPAGEEJECT object loSession<font></font>

REPORT FORM (lcPath+"_reports\secondreport") NOPAGEEJECT NORESET object loSession<font

REPORT FORM (lcPath+"_reports\thirdreport") NOPAGEEJECT NORESET object loSession<font>

REPORT FORM (lcPath+"_reports\fourthreport") NORESET object loSession<font></font>

RELE loHACK<font></font>

ENDIF

Clase HACK
DEFINE CLASS _XFRXHACK AS CUSTOM<font></font>

oEWriter=.NULL.<font></font>

oEDoc=.NULL.<font></font>

nPageno=0<font></font>

nReportno=0<font></font>

cTarget=""<font></font>

nVersion=0<font></font>

lXLS=.F.<font></font>

<font></font>

PROCEDURE GetReportName(m.tnReportNo)<font></font>
RETURN IIF(This.nReportNo=1,"First Report",IIF(This.nReportNo=2,"Second Report",;<f

IIF(This.nReportNo=3,"Third Report","Fourth Report")))<font></font>

ENDPROC<font></font>

<font></font>

ROCEDURE Init(m.loSession)<font></font>

m.loSession=IIF(TYPE("m.loSession.oxfSession")="O",m.loSession.oxfSession,m.loSessi

This.nVersion=VAL(CHRTRAN(m.loSession.GetVersion(),;<font></font>

CHRTRAN(m.loSession.GetVersion(),"0123456789",""),""))<font></fon

This.cTarget=m.loSession.cTarget<font></font>

This.lXLS=This.cTarget=="XLS" OR This.cTarget=="XLSPLAIN"<font></font>

=BINDEVENT(m.loSession.oDocumentWriter,"NewPage",This,"NewPage",0)<font></font>

=BINDEVENT(m.loSession.oDocumentWriter,"NewReport",;<font></font>

This,"NewReport",;<font></font>

IIF(This.cTarget=="XLS" OR This.cTarget=="XLSPLAIN",0,1))<font></font>

This.oEWriter=m.loSession.oDocumentWriter<font></font>

This.oEDoc=m.loSession.oDocument<font></font>

ENDPROC<font></font>

<font></font>

PROCEDURE newReport(m.tnReportNo, m.tcCodePage, m.toReport)<font></font>

This.nPageno=0<font></font>

This.nReportno=m.tnReportNo<font></font>

IF This.lXLS<font></font>

This.oEWriter.cNextSheetName=This.GetReportName(This.nReportNo)<font></font>

ELSE<font></font>

This.oEDoc.cNextSheetName=This.GetReportName(This.nReportNo)<font></font>

IF This.nVersion<1560000<font></font>

IF TYPE("This.oEWriter.oOXML")="O"<font></font>

This.oEWriter.oOXML.lAddPageNumberToSheetDisplyName=.F.<font></font>
ELSE<font></font>

IF TYPE("This.oEWriter.oOO")="O"<font></font>

This.oEWriter.oOO.lAddPageNumberToSheetDisplyName=.F.<font></font>

ENDIF<font></font>

ENDIF<font></font>

ENDIF<font></font>

ENDIF<font></font>

ENDPROC<font></font>

<font></font>

PROCEDURE newPage(m.tnHeight, m.tnWidth, m.tnPageNo, m.tnOri)<font></font>

This.nPageno=This.nPageno+1<font></font>

IF This.lXLS<font></font>

This.oEWriter.cNextSheetName=This.GetReportName(This.nReportNo)+ ;<font></font>

IIF(This.nPageno=1,""," "+LTRIM(STR(This.nPageno))

ELSE<font></font>

This.oEDoc.cNextSheetName=This.GetReportName(This.nReportNo)+ ;<font></font>

IIF(This.nPageno=1,""," "+LTRIM(STR(This.nPageno)))<

ENDIF<font></font>

ENDPROC<font></font>

ENDDEFINE<font></font>

Usar NEXT_SHEET_NAME_EXPR
Soporte completo para XLS / XLSPLAIN y XFRX # INIT + TranformReport () o XFRX #
LISTENER desde XFRX 15.6
loSession=EVALUATE([XFRX("XFRX#LISTENER")])<font></font>

lnRetVal = loSession.SetParams(laOuts(lii,2),,NOT llOpen,"1250",,,laOuts(lii,3))<font></f

IF lnRetVal = 0 <font></font>

loSession.setOtherParams("NEXT_SHEET_NAME_EXPR","_HACKSHEETNAME(this)")<font></font>
REPORT FORM (lcPath+"_reports\firstreport") NOPAGEEJECT object loSession <font></font>

REPORT FORM (lcPath+"_reports\secondreport") NOPAGEEJECT NORESET object loSession <fon

REPORT FORM (lcPath+"_reports\thirdreport") NOPAGEEJECT NORESET object loSession <font

REPORT FORM (lcPath+"_reports\fourthreport") NORESET object loSession <font></font>

<font></font>

ENDIF<font></font>

<font></font>

PROCEDURE _HACKSHEETNAME(m.loReport)<font></font>

RETURN IIF(m.loReport.tnReportNumber=1,"First Report",;<font></font>

IIF(m.loReport.tnReportNumber=2,"Second Report",;<font></font>

IIF(m.loReport.tnReportNumber=3,"Third Report","Fourth Report")))+;<font></font

IIF(m.loReport.nCurrentReportPageNo=1,""," "+;<font></font>

LTRIM(STR(m.loReport.nCurrentReportPageNo)))<font></font>

ENDPROC

 XFRX # INIT y salida directa


 XFRX # INIT, salida directa a XFF y transformación a XFRX # LISTENER ...
 XFRX # INIT
 XFRX # LISTENER
 Clase HACK
 Usar NEXT_SHEET_NAME_EXPR

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX

...

Tao de XFRX
Cómo configurar el área de impresión, ajustar
al ancho en la configuración de página y el
índice de tamaño de papel para
NATIVE_FXLSX y NATIVE_PFXLSX

martinajindrova

Modificado por última vez ago 15, 2015

(para XFRX temprano 15.6)

XFRX # INIT y salida directa


m.loSession=EVALUATE([xfrx("XFRX#INIT")]) <font></font>

m.lnRetVal = m.loSession.SetParams("test.xlsx",,,,,,"NATIVE_FXLSX")<font></font>

IF m.lnRetVal=0<font></font>

m.loHACK=CREATEOBJECT("_XFRXHACK",m.loSession)<font></font>

m.loSession.ProcessReport("_reports\basetext")<font></font>

m.loSession.Finalize()<font></font>

RELE m.loHACK<font></font>

END IF

XFRX # INIT, salida directa a XFF y transformación a


m.loXFF=EVALUATE([xfrx("XFRX#DRAW")]) <font></font>

m.loXFF.OpenDocument("out.xff")<font></font>

m.loSession=EVALUATE([xfrx("XFRX#INIT")]) <font></font>

m.lnRetVal = m.loSession.SetParams("test.xlsx",,,,,,"NATIVE_FXLSX")<font></font>

IF m.lnRetVal=0<font></font>

m.loHACK=CREATEOBJECT("_XFRXHACK",m.loSession)<font></font>
m.loSession.TransformReport(m.loXFF)<font></font>

RELE m.loHACK<font></font>

END IF

XFRX # LISTENER
m.loSession=EVALUATE([xfrx("XFRX#LISTENER")]) <font></font>

m.lnRetVal = m.loSession.SetParams("test.xlsx",,,,,,"NATIVE_FXLSX") <font></font>

IF m.lnRetVal=0<font></font>

m.loHACK=CREATEOBJECT("_XFRXHACK",m.loSession)<font></font>

REPORT FORM ("_reports\firstreport") OBJECT m.loSession<font></font>

RELE m.loHACK <font></font>

END IF

Clase HACK
DEFINE CLASS _XFRXHACK AS CUSTOM<font></font>

oEWriter=.NULL.<font></font>

cTarget=""<font></font>

nVersion=0<font></font>

DIMENSION aps(256,3)<font></font>

PROCEDURE Init(m.loSession)<font></font>

m.loSession=IIF(TYPE("m.loSession.oxfSession")="O",m.loSession.oxfSession,m.loSessi

This.nVersion=VAL(CHRTRAN(m.loSession.GetVersion();<font></font>

,CHRTRAN(m.loSession.GetVersion(),"0123456789",""),""))<font></fon

This.cTarget=m.loSession.cTarget<font></font>

DO CASE<font></font>

CASE This.cTarget=="NATIVE_FXLSX" OR This.cTarget=="NATIVE_PFXLSX"<font></font>


=BINDEVENT(m.loSession.oDocumentWriter,"RenderPage",This,"RenderPageBefore"

=BINDEVENT(m.loSession.oDocumentWriter,"RenderPage",This,"RenderPageAfter",

ENDCASE<font></font>

This.oEWriter=m.loSession.oDocumentWriter<font></font>

This.InitPaperSize() <font></font>

ENDPROC<font></font>

<font></font>

PROCEDURE RenderPageAfter(m.tnHeight, m.tnWidth, m.tnPageNo)<font></font>

LOCAL m.liSele<font></font>

m.liSele=SELECT()<font></font>

WITH This.oEWriter.oOXML<font></font>

SELECT (.Alias) <font></font>

SET KEY TO "header"<font></font>

SET FILTER TO XX003=.nPageNo<font></font>

GO TOP<font></font>

IF NOT EOF()<font></font>

REPLACE XX001 WITH STRTRAN(XX001,[<dimension ref="A1:A1"/>],;<font></font>

'<sheetPr><pageSetUpPr fitToPage="1"/></sheetPr>'+CHR(13)+CHR(10)+;<font></f

[<dimension ref="A1:]+.CIToC(.nColNo)+LTRIM(STR(.nRowNo,11))+["/>])<font></f

ENDIF<font></font>

SET KEY TO<font></font>

SET FILTER TO<font></font>

<font></font>

m.lcPom=[ <definedName name="_xlnm.Print_Area" localSheetId="]+LTRIM(STR(.nPageNo-

[">']+StrTranHTMLStringOO(STRTRAN(.cPageDisplayName,"'","''"))+;<font></fon

['!$A$1:$]+.CIToC(.nColNo)+[$]+LTRIM(STR(.nRowNo,11))+[ </definedName>]<fon

INSERT INTO (.Alias) (XX000,XX001) VALUES("workbook:dn",m.lcPom)<font></font>

ENDWITH<font></font>
<font></font>

SELECT (m.liSele)<font></font>

ENDPROC<font></font>

<font></font>

PROCEDURE RenderPageBefore(m.tnHeight, m.tnWidth, m.tnPageNo)<font></font>

LOCAL m.liSele, m.lnYY, loEWriter<font></font>

m.liSele=SELECT()<font></font>

m.loEWriter=This.oEWriter<font></font>

WITH m.loEWriter.oOXML<font></font>

SELECT (loEWriter.rpivotsalias)<font></font>

GO BOTTOM<font></font>

m.lnYY=YY<font></font>

SELECT (.Alias) <font></font>

SET FILTER TO XX003=.nPageNo<font></font>

SET KEY TO "footer"<font></font>

GO TOP<font></font>

IF NOT EOF()<font></font>

REPLACE XX001 WITH STRTRAN(XX001,[paperSize="9"],;<font></font>

[fitToHeight="]+LTRIM(STR(MAX(INT(m.lnYY/(m.loEWriter.nPageHeight-m.loEWr

[" paperSize="]+LTRIM(STR(This.GetPaperSize(m.loEWriter.nPageWidth, m.loE

ENDIF<font></font>

SET KEY TO<font></font>

SET FILTER TO<font></font>

ENDWITH<font></font>

SELECT (m.liSele)<font></font>

ENDPROC<font></font>

<font></font>

PROCEDURE GetPaperSize(m.tnWidth, m.tnHeight) <font></font>


LOCAL m.lnPaperSize<font></font>

FOR m.lnPaperSize=1 TO ALEN(This.aps,1)<font></font>

IF This.aps(m.lnPaperSize,2)=m.tnWidth AND This.aps(m.lnPaperSize,3)=m.tnHeight

EXIT<font></font>

ENDIF<font></font>

NEXT<font></font>

RETURN m.lnPaperSize<font></font>

ENDPROC<font></font>

<font></font>

PROCEDURE InitPaperSize()<font></font>

STORE 0 TO This.aps<font></font>

This.aps(1,2) = 85000<font></font>

This.aps(1,3) = 110000<font></font>

This.aps(2,2) = 85000<font></font>

This.aps(2,3) = 110000<font></font>

This.aps(3,2) = 110000<font></font>

This.aps(3,3) = 170000<font></font>

This.aps(4,2) = 170000<font></font>

This.aps(4,3) = 110000<font></font>

This.aps(5,2) = 85000<font></font>

This.aps(5,3) = 140000 <font></font>

This.aps(6,2) = 55000<font></font>

This.aps(6,3) = 85000<font></font>

This.aps(7,2) = 72500<font></font>

This.aps(7,3) = 10500<font></font>

This.aps(8,2) = 116929<font></font>

This.aps(8,3) = 165354<font></font>

This.aps(9,2) = 82677<font></font>
This.aps(9,3) = 116929<font></font>

This.aps(10,2) = 82677<font></font>

This.aps(10,3) = 116929<font></font>

This.aps(11,2) = 58268<font></font>

This.aps(11,3) = 82677<font></font>

This.aps(12,2) = 98425<font></font>

This.aps(12,3) = 139370<font></font>

This.aps(13,2) = 71654<font></font>

This.aps(13,3) = 101181<font></font>

This.aps(14,2) = 85000<font></font>

This.aps(14,3) = 130000<font></font>

This.aps(15,2) = 84646<font></font>

This.aps(15,3) = 108268<font></font>

This.aps(16,2) = 100000<font></font>

This.aps(16,3) = 140000<font></font>

This.aps(17,2) = 110000<font></font>

This.aps(17,3) = 170000<font></font>

This.aps(18,2) = 85000<font></font>

This.aps(18,3) = 110000<font></font>

This.aps(19,2) = 38750<font></font>

This.aps(19,3) = 88750<font></font>

This.aps(20,2) = 41250<font></font>

This.aps(20,3) = 85000<font></font>

This.aps(21,2) = 45000<font></font>

This.aps(21,3) = 103750<font></font>

This.aps(22,2) = 45000<font></font>

This.aps(22,3) = 110000<font></font>

This.aps(23,2) = 50000<font></font>
This.aps(23,3) = 115000<font></font>

This.aps(24,2) = 45000<font></font>

This.aps(24,3) = 103750<font></font>

This.aps(25,2) = 47500<font></font>

This.aps(25,3) = 110000<font></font>

This.aps(26,2) = 50000<font></font>

This.aps(26,3) = 115000<font></font>

This.aps(27,2) = 43307<font></font>

This.aps(27,3) = 86614<font></font>

This.aps(28,2) = 63779<font></font>

This.aps(28,3) = 90157<font></font>

This.aps(29,2) = 127559<font></font>

This.aps(29,3) = 180315<font></font>

This.aps(30,2) = 90157<font></font>

This.aps(30,3) = 127559<font></font>

This.aps(31,2) = 44881<font></font>

This.aps(31,3) = 63779<font></font>

This.aps(32,2) = 44881<font></font>

This.aps(32,3) = 90157<font></font>

This.aps(33,2) = 98425<font></font>

This.aps(33,3) = 138976<font></font>

This.aps(34,2) = 69291<font></font>

This.aps(34,3) = 98425<font></font>

This.aps(35,2) = 69291<font></font>

This.aps(35,3) = 49212<font></font>

This.aps(36,2) = 43307<font></font>

This.aps(36,3) = 90551<font></font>

This.aps(37,2) = 38750<font></font>
This.aps(37,3) = 75000<font></font>

This.aps(38,2) = 36250<font></font>

This.aps(38,3) = 65000<font></font>

This.aps(39,2) = 148750<font></font>

This.aps(39,3) = 110000<font></font>

This.aps(40,2) = 85000<font></font>

This.aps(40,3) = 120000<font></font>

This.aps(41,2) = 85000<font></font>

This.aps(41,3) = 130000<font></font>

<font></font>

This.aps(256, 2) = 104330 && 265 &&270 mm<font></font>

This.aps(256, 3) = 149606 && 380 &&385 mm<font></font>

ENDPROC<font></font>

ENDDEFINE

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX
/
...
/
Tao de XFRX

Cómo exportar texto como imagen a PDF o


cambia otro atributo de fuente

martinajindrova
Modificado por última vez sep 18, 2015
XFRX puede exportar texto como imagen si la fuente no existe, para XFRX 15.6. Pero
puedes cambiar un indicador para una fuente específica.

m.loSession=EVALUATE([xfrx("XFRX#INIT")]) <font></font>
m.lnRetVal = m.loSession.SetParams("test.pdf",,,,,,"PDF") <font></font>
IF m.lnRetVal=0 <font></font>
m.loHACK=CREATEOBJECT("_XFRXHACK",m.loSession) <font></font>
m.loSession.ProcessReport("_reports\basetext") <font></font>
m.loSession.Finalize() <font></font>
RELE m.loHACK <font></font>
END IF<font></font>
<font></font>
DEFINE CLASS _XFRXHACK AS CUSTOM<font></font>
oEDoc=.NULL.<font></font>
cTarget=""<font></font>
nVersion=0<font></font>
<font></font>
PROCEDURE Init(m.loSession)<font></font>
m.loSession=IIF(TYPE("m.loSession.oxfSession")="O",m.loSession.oxfSession,m.loSessi
This.nVersion=VAL(CHRTRAN(m.loSession.GetVersion(),CHRTRAN(m.loSession.GetVersion()
This.cTarget=m.loSession.cTarget<font></font>
IF This.cTarget=="PDF" <font></font>
IF This.nVersion<1570000<font></font>
=BINDEVENT(m.loSession.oDocument,"addFont",This,"addFont156",1)<font></font>
ELSE<font></font>
=BINDEVENT(m.loSession.oDocument,"addFont",This,"addFont",1)<font></font>
ENDIF<font></font>
This.oEDoc=m.loSession.oDocument<font></font>
ENDIF<font></font>
ENDPROC<font></font>
<font></font>
PROCEDURE addFont156(m.tcFontName, m.llBold, m.llItal, m.lnEmbed, m.lnSymbol, m.lnCode
WITH This.oEDoc <font></font>
IF .aFonts(.nFont,7) AND ATC("+MDD-ISO-15223-1",.aFonts(.nFont,1))>0 && font is sym
.aFonts(.nFont,11)=.F. && .F. - Font not exist, .T. - Font exist<font></font>
*.aFonts(.nFont,9)=1252 && Code page from 42 to 1252<font></font>
ELSE<font></font>
.aFonts(.nFont,10)=.F. && .F. - Do not covert to UNICODE, .T. - Convert to UNICO
ENDIF<font></font>
ENDWITH<font></font>
ENDPROC<font></font>
<font></font>
PROCEDURE addFont(m.tcFontName, m.llBold, m.llItal, m.lnEmbed, m.lnCodePage)<font></fo
WITH This.oEDoc <font></font>
IF .aFonts(.nFont,7) AND ATC("+MDD-ISO-15223-1",.aFonts(.nFont,1))>0 && font is sym
.aFonts(.nFont,11)=.F. && .F. - Font not exist, .T. - Font exist<font></font>
*.aFonts(.nFont,9)=1252 && Code page from 42 to 1252<font></font>
ELSE<font></font>
.aFonts(.nFont,10)=.F. && .F. - Do not covert to UNICODE, .T. - Convert to UNICO
ENDIF<font></font>
ENDWITH<font></font>
ENDPROC<font></font>
<font></font>
<font></font>
ENDDEFINE<font></font>

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX

...

Tao de XFRX

Cómo agregar estilo personalizado en el


documento MS Word 2007

martinajindrova

Modificado por última vez sep 23, 2015


 Para VFP 8/9
 Para VFP 5/6/7

Para VFP 8/9


m.loSession=EVALUATE([xfrx("XFRX#INIT")]) <font></font>

m.lnRetVal = m.loSession.SetParams("test.docx",,,,,,"NATIVE_FDOCX")<font></font>
IF m.lnRetVal=0 <font></font>

m.loHACK=CREATEOBJECT("_XFRXHACK",m.loSession)<font></font>

m.loSession.ProcessReport("_reports\basetext")<font></font>

m.loSession.Finalize()<font></font>

RELE m.loHACK<font></font>

END IF <font></font>

<font></font>

DEFINE CLASS _XFRXHACK AS CUSTOM<font></font>

oEWriter=.NULL.<font></font>

cTarget=""<font></font>

nVersion=0<font></font>

<font></font>

PROCEDURE Init(m.loSession)<font></font>

m.loSession=IIF(TYPE("m.loSession.oxfSession")="O",m.loSession.oxfSession,m.loSessi

This.nVersion=VAL(CHRTRAN(m.loSession.GetVersion();<font></font>

,CHRTRAN(m.loSession.GetVersion(),"0123456789",""),""))<font></fon

This.cTarget=m.loSession.cTarget<font></font>

DO CASE<font></font>

CASE This.cTarget=="NATIVE_FDOCX" OR This.cTarget=="NATIVE_DOCX"<font></font>

=BINDEVENT(m.loSession.oDocumentWriter,"Finalize",This,"Finalize",0)<font><

ENDCASE<font></font>

This.oEWriter=m.loSession.oDocumentWriter<font></font>

ENDPROC<font></font>

<font></font>

<font></font>

PROCEDURE Finalize(m.tnHeight, m.tnWidth, m.tnPageNo)<font></font>

LOCAL m.liSele, m.loEWriter, m.lcPom<font></font>

m.liSele=SELECT()<font></font>
m.loEWriter=This.oEWriter<font></font>

WITH m.loEWriter.oOXML<font></font>

* Attention, all text data must be in UTF-8<font></font>

<font></font>

*m.lcBaseStyle, m.lcBaseName, m.lcHeight (line height in twips), m.lcBefore (before

.addParagraphStyle("Normal","YourStyle",.ToTWIP(100),"0","","",.F.)<font></font>

<font></font>

SELECT (.Alias)<font></font>

<font></font>

m.lcPom=;<font></font>

[ <w:rPr>]+CHR(13)+CHR(10)+;<font></font>

[ <w:rFonts w:hAnsi="Courier New" w:ascii="Courier New"/>]+CHR(13)+CHR(10)+;<font></font>

[ <w:lang w:eastAsia="en-US"/>]+CHR(13)+CHR(10)+;<font></font>

[ <w:color w:val="]+.C2RGB(0, 120, 0,1)+["/>]+CHR(13)+CHR(10)+; && Fore color - RGB<font>

[ <w:sz w:val="]+LTRIM(STR(10*2,11))+["/>]+CHR(13)+CHR(10)+; && Fontsize*2<font></font>

[ <w:sz-cs w:val="]+LTRIM(STR(10*2,11))+["/>]+CHR(13)+CHR(10)+; && Fontsize*2 <font></fon

[ <w:strike/>]+CHR(13)+CHR(10)+; && m.llStriked<font></font>

[ <w:b/>]+CHR(13)+CHR(10)+; && m.llBold<font></font>

[ <w:i/>]+CHR(13)+CHR(10)+; && m.llItalics<font></font>

[ <w:u w:val="single"/>]+CHR(13)+CHR(10)+; && m.llUnderline<font></font>

[ </w:rPr>]+CHR(13)+CHR(10)<font></font>

REPLACE XX001 WITH STRTRAN(XX001,"</w:pPr>","</w:pPr>"+CHR(13)+CHR(10)+m.lcPom)<fon

<font></font>

<font></font>

* Change default font for document<font></font>

LOCAL m.liStart, m.liEnd, m.lcPom2, m.lihFile, m.lcPom<font></font>

m.lihFile=.GetFileHandle("word\styles.xml")<font></font>

m.lcPom=""<font></font>
=FSEEK(m.lihFile,0)<font></font>

DO WHILE NOT FEOF(m.lihFile)<font></font>

m.lcPom=m.lcPom+FREAD(m.lihFile,65000)<font></font>

ENDDO<font></font>

<font></font>

** Font name<font></font>

m.liStart=ATC("<w:rFonts",m.lcPom)+10<font></font>

m.lcPom2=SUBSTR(m.lcPom,m.liStart)<font></font>

m.liEnd=m.liStart+ATC("/>",m.lcPom2)-1<font></font>

m.lcPom=STUFF(m.lcPom,m.liStart,m.liEnd-m.liStart,[w:cs="Courier New" w:hAnsi="Cour

<font></font>

** Font Color, strike, bold, italic, underline<font></font>

m.liStart=ATC("<w:sz ",m.lcPom)<font></font>

m.lcPom2=[ <w:color w:val="]+.C2RGB(0, 0, 255,1)+["/>]+CHR(13)+CHR(10)+;<font></fon

[ <w:strike/>]+CHR(13)+CHR(10)+; && m.llStriked<font></font>

[ <w:b/>]+CHR(13)+CHR(10)+; && m.llBold<font></font>

[ <w:i/>]+CHR(13)+CHR(10)+; && m.llItalics<font></font>

[ <w:u w:val="single"/>]+CHR(13)+CHR(10) && m.llUnderline<font></font>

m.lcPom=STUFF(m.lcPom,m.liStart,0,m.lcPom2)<font></font>

<font></font>

** Font size<font></font>

m.liStart=ATC([<w:sz w:val="],m.lcPom)+13<font></font>

m.lcPom2=SUBSTR(m.lcPom,m.liStart)<font></font>

m.liEnd=m.liStart+ATC(["],m.lcPom2)-1<font></font>

m.lcPom=STUFF(m.lcPom,m.liStart,m.liEnd-m.liStart,LTRIM(STR(20*2,11))) && Fontsize*

<font></font>

m.liStart=ATC([<w:szCs w:val="],m.lcPom)+15<font></font>

m.lcPom2=SUBSTR(m.lcPom,m.liStart)<font></font>
m.liEnd=m.liStart+ATC(["],m.lcPom2)-1<font></font>

m.lcPom=STUFF(m.lcPom,m.liStart,m.liEnd-m.liStart,LTRIM(STR(20*2,11))) && Fontsize*

<font></font>

=FSEEK(m.lihFile,0)<font></font>

DO WHILE LEN(m.lcPom)>0<font></font>

=FWRITE(m.lihFile,LEFT(m.lcPom,65000))<font></font>

m.lcPom=SUBSTR(m.lcPom,65001)<font></font>

ENDDO <font></font>

ENDWITH<font></font>

SELECT (m.liSele)<font></font>

ENDPROC <font></font>

ENDDEFINE

Para VFP 5/6/7


m.loSession=EVALUATE([xfrx("XFRX#INIT")]) <font></font>

m.lnRetVal = m.loSession.SetParams("test.docx",,,,,,"NATIVE_FDOCX")<font></font>

IF m.lnRetVal=0 <font></font>

m.loSession.setOtherParams("NEXT_PAGE_NAME_EXPR","_HACKPAGENAME(this)")<font></font>

m.loSession.ProcessReport("_reports\basetext")<font></font>

m.loSession.Finalize()<font></font>

END IF <font></font>

<font></font>

PROCEDURE _HACKPAGENAME(m.loReport)<font></font>

LOCAL m.lcPage, m.liSele, m.lcPom<font></font>

m.liSele=SELECT()<font></font>

<font></font>

WITH loreport.odocumentwriter.ooxml<font></font>
<font></font>

m.lcPage= "Page "+LTRIM(STR(.npageno,11))<font></font>

<font></font>

IF .npageno=1<font></font>

* Attention, all text data must be in UTF-8<font></font>

.cEntityStyle="w:styles"<font></font>

*m.lcBaseStyle, m.lcBaseName, m.lcHeight (line height in twips), m.lcBefore (before

.addParagraphStyle("Normal","YourStyle",.ToTWIP(100),"0","","",.F.)<font></font>

<font></font>

SELECT (.Alias)<font></font>

<font></font>

m.lcPom=;<font></font>

[ <w:rPr>]+CHR(13)+CHR(10)+;<font></font>

[ <w:rFonts w:hAnsi="Courier New" w:ascii="Courier New"/>]+CHR(13)+CHR(10)+;<font></font>

[ <w:lang w:eastAsia="en-US"/>]+CHR(13)+CHR(10)+;<font></font>

[ <w:color w:val="]+.C2RGB(0, 120, 0,1)+["/>]+CHR(13)+CHR(10)+; && Fore color - RGB<font>

[ <w:sz w:val="]+LTRIM(STR(10*2,11))+["/>]+CHR(13)+CHR(10)+; && Fontsize*2<font></font>

[ <w:sz-cs w:val="]+LTRIM(STR(10*2,11))+["/>]+CHR(13)+CHR(10)+; && Fontsize*2 <font></fon

[ <w:strike/>]+CHR(13)+CHR(10)+; && m.llStriked<font></font>

[ <w:b/>]+CHR(13)+CHR(10)+; && m.llBold<font></font>

[ <w:i/>]+CHR(13)+CHR(10)+; && m.llItalics<font></font>

[ <w:u w:val="single"/>]+CHR(13)+CHR(10)+; && m.llUnderline<font></font>

[ </w:rPr>]+CHR(13)+CHR(10)<font></font>

REPLACE XX001 WITH STRTRAN(XX001,"</w:pPr>","</w:pPr>"+CHR(13)+CHR(10)+m.lcPom)<fon

<font></font>

<font></font>

<font></font>

* Change default font for document <font></font>


LOCAL m.liStart, m.liEnd, m.lcPom2, m.lihFile, m.lcPom<font></font>

m.lihFile=.GetFileHandle("word\styles.xml")<font></font>

m.lcPom=""<font></font>

=FSEEK(m.lihFile,0)<font></font>

DO WHILE NOT FEOF(m.lihFile)<font></font>

m.lcPom=m.lcPom+FREAD(m.lihFile,65000)<font></font>

ENDDO<font></font>

<font></font>

** Font name <font></font>

m.liStart=ATC("<w:rFonts",m.lcPom)+10<font></font>

m.lcPom2=SUBSTR(m.lcPom,m.liStart)<font></font>

m.liEnd=m.liStart+ATC("/>",m.lcPom2)-1<font></font>

m.lcPom=STUFF(m.lcPom,m.liStart,m.liEnd-m.liStart,[w:cs="Courier New" w:hAnsi="Cour

<font></font>

** Font Color, strike, bold, italic, underline<font></font>

m.liStart=ATC("<w:sz ",m.lcPom)<font></font>

m.lcPom2=[ <w:color w:val="]+.C2RGB(0, 0, 255,1)+["/>]+CHR(13)+CHR(10)+;<font></fon

[ <w:strike/>]+CHR(13)+CHR(10)+; && m.llStriked<font></font>

[ <w:b/>]+CHR(13)+CHR(10)+; && m.llBold<font></font>

[ <w:i/>]+CHR(13)+CHR(10)+; && m.llItalics<font></font>

[ <w:u w:val="single"/>]+CHR(13)+CHR(10) && m.llUnderline<font></font>

m.lcPom=STUFF(m.lcPom,m.liStart,0,m.lcPom2)<font></font>

<font></font>

** Font size<font></font>

m.liStart=ATC([<w:sz w:val="],m.lcPom)+13<font></font>

m.lcPom2=SUBSTR(m.lcPom,m.liStart)<font></font>

m.liEnd=m.liStart+ATC(["],m.lcPom2)-1<font></font>

m.lcPom=STUFF(m.lcPom,m.liStart,m.liEnd-m.liStart,LTRIM(STR(20*2,11))) && Fontsize*


<font></font>

m.liStart=ATC([<w:szCs w:val="],m.lcPom)+15<font></font>

m.lcPom2=SUBSTR(m.lcPom,m.liStart)<font></font>

m.liEnd=m.liStart+ATC(["],m.lcPom2)-1<font></font>

m.lcPom=STUFF(m.lcPom,m.liStart,m.liEnd-m.liStart,LTRIM(STR(20*2,11))) && Fontsize*

<font></font>

<font></font>

=FSEEK(m.lihFile,0) <font></font>

DO WHILE LEN(m.lcPom)>0 <font></font>

=FWRITE(m.lihFile,LEFT(m.lcPom,65000)) <font></font>

m.lcPom=SUBSTR(m.lcPom,65001) <font></font>

ENDDO<font></font>

ENDIF <font></font>

<font></font>

<font></font>

ENDWITH<font></font>

SELECT (m.liSele)<font></font>

RETURN lcPage<font></font>

ENDPROC <font></font>

 Sin etiquetas

Notificaciones de banderas
Documentación XFRX
/
...
/
Tao de XFRX
metadata.attachments
XFRX # INIT e imágenes / documentos en el
campo General

martinajindrova
Modificado por última vez feb 20, 2018

El soporte completo para campos generales y XFRX # INIT es desde XFRX 16.0.2 / XFRX
16.1. Pero para XFRX 15.7 y XFRX 16.0 es el paquete extendido. Usar es muy simple.

 File extractfromgf.FXP copia en la misma carpeta con XFRX o en cualquier otro lugar (pero
no olvides utilizar SET PROCEDURE TO ... ADDITIVE)
 Copia de archivo xfrxlib.fll a la misma carpeta con XFRX
 Establezca la fuente de control para control consolidado de imagen / ole:
VFP 6.0 VFP 9.0
 Como la salida PDF no admite imágenes con fondo transparente, agregue las siguientes
dos filas en su programa (antes de llamar a XFRX)
PUBLIC m.tnTC<font></font>
m.tnTC=RGB(255,255,255)
XFRX Enlazar

XFRX 15.7 ExtensionPackageXFRX157.zip

XFRX 16.0 ExtensionPackageXFRX160.zip

XFRX 18.0 ExtensionPackageXFRX180.zip

 Sin etiquetas

Notificaciones de banderas

Documentación XFRX

Páginas

/
Obsoleto

Funciones experimentales - Textformat


(HTML)

martinajindrova

Feb 03, 2017

Formato de texto

<TF>
XFRX 15.3

PDF no

DOC2PDF sí

FDOC2PDF sí

XPS no

DOC sí

FDOC sí

NATIVE_DOCX no

NATIVE_FDOCX no

RTF sí

FRTF sí

ODT no
Formato de texto

calzado no

SAO no

PIE no

PFODS no

XLS sí

XLSPLAIN sí

NATIVE_FXLSX no

NATIVE_PFXLSX no

LLANURA -

HTML sí

HTMLPLAIN no

MHT sí

CNT / previewer no

TIFF, BMP, GIF, JPEG, PNG, EMF no

XFF sí

XML sí

Impresión no

1) Página de códigos en el método SetParams () debe ser 'UTF-8' o 65001


Formato de texto (HTML)
Etiquetas compatibles

Etiqueta de Etiqueta final darse cuenta


inicio

Negrita <b> </b>

Itálico <i> </i>

Subrayar <u> </u>

StrikeThr <s> </s>


u

Color <color=> </color> <color=255,0,0></color>


<color=255></color> <color=#FF000
0></color>
<c=> </c>
<color="red"></color>

Color de <higlight= </higlight <higlight=255,0,0></higlight>


fondo > > <higlight=255></higlight> <higlig
ht=#FF0000></higlight>
<higlight="red"></higlight>
<h=> </h>

Nombre <fontname= </fontnam


de la ""> e>
fuente
<fname="" </fname>
>

Tamaño <fontsize= </fontsize


de > >
fuente
<fsize=> </fsize>

Sobrescri <sup> </sup>


to
Subíndic <sub> </sub>
e

CRLF <br>

Apo Neg Itáli Subr Strik C C N Ta So Su C


yo rita co ayar eThr o ol o m br bí R
u l o m añ esc nd L
o r br o rit ic F
r d e d o e
e de e
f la fu
o fu e
n en nt
d te e
o

XFRX si 1)
#
INIT

XFRX si 1)
#
LIST
ENE
R

XFF sí 2)

XML sí 2)

HTM sí sí sí sí sí sí sí sí sí sí sí sí
L

HTM no
LPLA
IN

MHT sí sí sí sí sí sí sí sí sí sí sí sí
DOC sí sí sí sí sí sí sí sí sí sí sí sí

RTD sí sí sí sí sí sí sí sí sí sí sí sí

DOC sí sí sí sí sí sí sí sí sí sí sí sí
X

DOC sí sí sí sí sí sí sí sí sí sí sí sí
2PD
F

PDF no

XLS sí sí sí sí sí sí no sí sí sí sí sí
3)

XLSP sí sí sí sí sí sí no sí sí sí sí sí
LAIN 3)

RTF sí sí sí sí sí sí sí sí sí sí sí sí

FDO sí sí sí sí sí sí sí sí sí sí sí sí
C

FDO sí sí sí sí sí sí sí sí sí sí sí sí
CX

FDO sí sí sí sí sí sí sí sí sí sí sí sí
C2P
DF

FRTF sí sí sí sí sí sí sí sí sí sí sí sí

LLAN no
URA 4)

ODT no
calza no
do

SAO no

PIE no

PFO no
DS

XPS no

NATI no
VE_
DOC
X

NATI no
VE_F
DOC
X

NATI no
VE_F
XLSX

NATI no
VE_P
FXLS
X

Imág no
enes

1) Detecta el formato de texto

2) Guardar información

3) Excel no admite color de fondo para cada palabra

4) Eliminar solo el código de formato


 Sin etiquetas

Notificaciones de banderas

S-ar putea să vă placă și