Hola Jairo:
Lo hago de la siguiente manera:
Descargo el PDFTK y lo instalo en el directorio donde tengo la aplicación.
Luego con el programa NitroPDF creo el PDF, inserto la imagen que quiero mostrar, luego en el menu Formularios elijo en campos, Campo de Texto y voy colocando uno por uno en donde quiero que aparezca cada campo con información. Haciendo click con el boton derecho elijo las propiedades del campo, (Tamaño y Tipo de Letra, color, si el campo es solo lectura, etc.). Una vez terminado la colocación de _ grabo el archivo PDF y ya en el programa uso ACTIVEX PDF y fusión de datos usando PDFTK.EXE.
A continuación te pongo el codigo fuente con el que muestro el pdf.
Code: Select all
// Sample showing how to manage the printer object
#include "FiveWin.ch"
#include "Utilprn.ch"
#include "hbxml.ch"
#define CLR_GRIS RGB( 226, 226, 226 )
static oWnd
//-------------------------------------------------------------------------------------------
FUNCTION Impri_Info
Local oBrush,oBrush2,oBrush3,oBrush4,oBrushImage,oBrushNubes
Local oUtils,oPrn,oFont,oFontDefault,oFontGrande, oFont08, oFont06
Local oPen,oPen2,oPen3,oPen4
Local nLinea := 0.5 , nFila := 0.5 , x ,z := 0,y, cNumFormu:=Space(10), cTFor:=Space(5), nIdF:=0
Local oXml, n
Local cType, cTag
cBmp :=".\Mapas\Mapa_Sgo.BMP"
oQryDep :=oServer:Query( "SELECT * FROM departamentos ORDER BY nom_dpto ASC" )
oQryDep:GoTop()
oQryDep:GetRow()
nmanejador:=FCREATE(".\Mapas\Mapa_SgoA.XML") //, FC_NORMAL)
bufer:='<?xml version="1.0" encoding="ISO-8859-1" ?>'+CRLF
// <?xml version="1.0" encoding="ISO-8859-1"?><mas xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/1002.xsd">'+CRLF
bufer+='<xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve">'+CRLF
nTexto1 :="45"
nTexto2 :="68"
nTexto3 :="125"
nTexto16 :="89"
nTexto25 :="148"
cTexto1:="INFORME DE PRODUCTOS GANADEROS"
cTexto2:="SEGUNDO TITULO"
bufer+='<fields>'+CRLF
bufer+='<field name="Texto1">'+CRLF
bufer+='<value>'+cTexto1+'</value>'+CRLF
bufer+='</field>'+CRLF
bufer+='<field name="Texto2">'+CRLF
bufer+='<value>'+cTexto2+'</value>'+CRLF
bufer+='</field>'+CRLF
/*
bufer+='<fields>'+CRLF
bufer+='<field name="Texto3">'+CRLF
bufer+='<value>'+"Linea1"+CRLF+;
"Linea2"+CRLF+;
"Linea3"+CRLF+;
"Linea4"+CRLF+'</value>'+CRLF
bufer+='</field>'+CRLF
*/
While !oQryDep:Eof()
oQryDep:GetRow()
bufer+='<field name="'+oQryDep:cod_dpto+'">'+CRLF
bufer+='<value>'+oQryDep:cod_dpto+CRLF+oQryDep:nom_dpto+'</value>'+CRLF
bufer+='</field>'+CRLF
oQryDep:Skip()
Enddo
bufer+='</fields>'+CRLF
bufer+='<f href=".\Mapas\Mapa_SgoA.pdf"/>'+CRLF
bufer+='</xfdf>'+CRLF
FWRITE(nManejador, alltrim(bufer))
FCLOSE(nManejador)
cFicheroXML:= ".\Mapas\Mapa_SgoA.XML"
cSalida:=".\Mapas\Mapa_S.PDF"
cCarga:=".\Mapas\Mapa_SgoA.PDF"
WaitRun("pdftk.exe "+cCarga+" fill_form "+cFicheroXML+" output "+ cSalida,0 )
ShellExecute( ,"open", cSalida,,,0 )
Return Nil
//-------------------------------------------------------------------------------------------
Esto también lo uso para cargar formularios.
Yo empecé guiandome con este post:
http://forums.fivetechsupport.com/viewt ... f=6&t=4897
Espero que te sea de utilidad, un abrazo