In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

crear documento PDF

Foro público de Xailer en español
Responder
Avatar de Usuario
XeviCOMAS
Mensajes: 586
Registrado: Sab Mar 12, 2011 8:16 pm

crear documento PDF

Mensaje por XeviCOMAS »

Hasta windows Xp me funcionava un Script que con PDFCretor generava un fichero PDF en modo "silencioso", vaya, que no se veia el documento ni salia ningun mensaje donde interactuar el usuario.

Bien, no se a que se pueda deber, pero ya no me funciona en Windows 10.

Hay alguna forma, alguna clase, algun OCX que genere un PDF sin tener que hacer una vista preliminar.
O, se me ocurre... que la clase de Xailer que hace este cometido cuando se pulsa en el Preview el boton PDF... sería posible???


Gracias.

Un Saludo,
Xevi.
Un Saludo,
Xevi.
Avatar de Usuario
bingen
Mensajes: 565
Registrado: Lun Jul 07, 2014 8:17 pm
Ubicación: Bilbao
Contactar:

Re: crear documento PDF

Mensaje por bingen »

Hombre Fast Report para Xailer lo hace de maravilla pero para eso tienes que tener el FR primero.

Si es así te cuento como.
BiSoft Desarrollo de software profesional
http://www.bisoft.es
Avatar de Usuario
XeviCOMAS
Mensajes: 586
Registrado: Sab Mar 12, 2011 8:16 pm

Re: crear documento PDF

Mensaje por XeviCOMAS »

Bingen, tengo Xailer Enterprise y me peleé con FR unos dias, pero no lo utilizo. Soy duro de mollera!!!
Ya con MySQL MariaDB me está costando hacer el cambio de DBFs (sigo con la aplicación central en DBFs) aunque si hago algo nuevo... MariaDB, por supuesto.

Con Fast Reports, me pasará lo mismo... sigo con mis listados e impresiones co TPrinter TCanvas.

Tengo que hacer cambios en mis aplicaciones, pero como funcionan "Si funciona, NO TOQUES" jejeje
Un Saludo,
Xevi.
Avatar de Usuario
ramonzea
Mensajes: 130
Registrado: Mar Sep 15, 2015 6:42 am
Ubicación: México
Contactar:

Re: crear documento PDF

Mensaje por ramonzea »

Yo compre una DLL llamada Image2PDF y me ha funcionado casi bien, en algunas impresoras no me acepta el centrado de texto, pero, pues le ajusto el formato al cliente y como lo manejo por medio de un archivo externo, lo ajusto y listo.

Saludos.
Cassiano de Oliveira
Mensajes: 475
Registrado: Mar Jul 24, 2012 10:21 pm

Re: crear documento PDF

Mensaje por Cassiano de Oliveira »

HARU PDF não resolveria??

Segue exemplo:

Código: Seleccionar todo

//----------------------------------------------------------------------//
//                              HaruPdf.prg
//                  Pritpal Bedi <pritpal@vouchcac.com>
//----------------------------------------------------------------------//

#include 'harupdf.ch'

********************************************************************************
function GERA_PDF(cArqPDF, lAbrePDF, cNomePDF)
********************************************************************************
	local cText  := MEMOREAD( cArqPDF ),;
	   	nLines := MLCOUNT( cText, 255 ),;
			vAUTOR := '', ;
			nA,;
			nFileHandle,;
			cLinha,;
			nLINE_TEMP:=0 ,;
		   nLargura  := VeLargLinArq( cArqPDF ),; && Pega a Largura maxima do arq contida nas primeiras 100 linhas
		   cNomeRel  :='RELATORIO ' + TRANSF(DATE(), '@E 99/99/99') + ' as ' + STRTRAN(TIME(), ':', '_')

	private i, oPage, height, tw,  samp_text, lLandScape, lCondensa :=.F., vCont:=0

	if ISNIL(cNomePDF)
		cNomePDF   := 'PDF_' + STRTRAN(TRANSF(DATE(),'@E 99/99/99'), '/', '') + '_' + STRTRAN(TIME(), ':', '') + '.PDF'
	else
		cNomePDF   := substr(cNomePDF, 1, len(cNomePDF) - 4) +;
		              '_' + STRTRAN(Dt2Dig(Date()), '/', '') + STRTRAN(TIME(), ':', '') + '.PDF'
	endif

	DEFAULT lAbrePDF   TO .F.
	DEFAULT lLandScape TO nLargura > 136

	cNomePDF := 'PDF\' + cNomePDF                 	
	
	PRIVATE oPDF := HPDF_New(), FontNormal, FontBold, FontItalic, FontBoldItalic
	
	if ISNIL(oPDF)
	   MsgAlert( 'Erro ao tentar gerar o Arquivo PDF, Favor Tentar novamente')
	   return nil
	endif
	
   FontNormal     := HPDF_GetFont( oPDF, 'Courier',             NIL )
   FontBold       := HPDF_GetFont( oPDF, 'Courier-Bold',        NIL )
   FontItalic     := HPDF_GetFont( oPDF, 'Courier-Oblique',     NIL )
   FontBoldItalic := HPDF_GetFont( oPDF, 'Courier-BoldOblique', NIL )
	
	//- HPDF_SetPassword(pdf, 'senha','minhasenha' )  // colocar senha no PDF
	
	HPDF_SetCompressionMode( oPDF, HPDF_COMP_ALL )
	
	PDF_NovaPagina()
	
	FOR nA :=1 TO nLines

		cLinha     := MEMOLINE( cText, 255, nA, 1, .F. )
		cChar      := SUBSTR( cLinha, 1, 1)
		nTamLinha  := LEN( cLinha )
		nTamBlk    := IF( nA>1, nTamBlk, IF( cChar=CHR(15), 7, IF( cChar=CHR(14), 14, 10))    ) // 7=Condesado, 10=Normal, 14=Grande
		nTamAtu    := IF( nA>1, nTamAtu, nTamBlk)                                               // 7=Condesado, 10=Normal, 14=Grande
		lBold      := IF( nA>1, lBold,   .F.)
		lItalic    := IF( nA>1, lItalic, .F.)
		lMudou     := .F.
		
		HPDF_Page_SetFontAndSize( oPage, IF( lBold, FontBold, FontNormal), nTamAtu )

		FOR i:=1 TO nTamLinha
			cChar  := SUBSTR( cLinha, I, 1)
			cChar2 := SUBSTR( cLinha, I, 2)
			PDF_DefTameBold()
			HPDF_Page_ShowText( oPage, HB_OEMTOANSI( TiraCaracESCPOS(cChar) ))
		NEXT

	   HPDF_Page_MoveTextPos( oPage, 0, -10 )

	   vCONT++
	   if vCONT == IF( lLandScape, 58, 80)  //-- Nova P gina
			PDF_NovaPagina()
	   endif
	NEXT
	
	HPDF_Page_EndText( oPage )
	HPDF_SaveToFile( oPDF, cNomePDF )
	HPDF_Free( oPDF )

	if lAbrePDF
	   Executa( CurDirSys()+cNomePDF )
	endif
return nil



********************************************************************************
static procedure PDF_DefTAMeBold()
	lMudou := .T.
	if cChar = CHR(12)
		PDF_NovaPagina()
      i++
	elseif cChar = CHR(14) && Abre Bloco Letra Grande
		nTamAtu := 14
	elseif cChar = CHR(15) && Abre Bloco Condensado
		nTamAtu := 7
	elseif cChar = CHR(18) && Fecha Bloco Letra Grande
		nTamAtu := nTamBlk
	elseif cChar = CHR(20) && Fecha Bloco Letra Grande
		nTamAtu := 10
	elseif cChar2 = CHR(27)+'M' && Grande
		nTamAtu := 12
		i++
	elseif cChar2 = CHR(27)+'P' && Normal
		nTamAtu := 10
		i++
	elseif cChar2 = CHR(27)+'4' && Italico Ini
		lItalic := .T.
		i++
	elseif cChar2 = CHR(27)+'5' && Italico Fim
		lItalic := .F.
		i++
	elseif cChar2 = CHR(27)+'E' && Negrito Ini
		lBold := .T.
		i++
	elseif cChar2 = CHR(27)+'F' && Negrito Fim
		lBold := .F.
		i++
	else
		lMudou := .F.
	endif

	if lMudou
		HPDF_Page_SetFontAndSize( oPage, IF( lBold, IF( lItalic, FontBoldItalic, FontBold), IF(lItalic, FontItalic, FontNormal)), nTamAtu )
	endif

return

********************************************************************************
static procedure PDF_NovaPagina()
	oPage := HPDF_AddPage(oPDF)
	
   if lLandScape
		HPDF_Page_SetSize(oPage, HPDF_PAGE_SIZE_A4, HPDF_PAGE_LANDSCAPE)
	endif
	
	//--> Cabe‡alho com LogoMarca
	height   := HPDF_Page_GetHeight(oPage)
	* width    := HPDF_Page_GetWidth(oPage)
	
   if LogoCabecalho()
	   image := HPDF_LoadJpegImageFromFile(oPdf, 'cabecalho.jpg')   //   image := HPDF_LoadPngImageFromFile( oPdf, cImage)
	   iw    := HPDF_Image_GetWidth(  image )
	   ih    := HPDF_Image_GetHeight( image )
	   HPDF_Page_DrawImage(oPage, image, 010, 735, 475, 080) // aki fica pela metade. // HPDF_Page_DrawImage(oPage, image, x, y, width, height)
 	else
 		iw := 0
 		ih := 0
	endif
	
	HPDF_Page_SetLineWidth( oPage, 1)  //--> Essa Linha aki nÆo tinha qdo pagina inicial mas vou manter e ver o efeito
   HPDF_Page_BeginText(    oPage   )
	HPDF_Page_MoveTextPos(  oPage, 10, height - IF( LogoCabecalho(), 110, 10 ) )  // Come‡a a imprimir depois da imagem caso ela exista

   vCONT     := 0

return



//--------------------------- RETORNA SE EXISTE ARQUIVO DE LOGO DE CABECALHO

function LogoCabecalho()
  return ( file( 'cabecalho.bmp') .or. file( 'cabecalho.jpg' )  )  



*********************************************************************************
function VeLargLinArq( cArq )
   local cText := MemoRead( cArq ),;
   		cLine, nA, nLargMax, nLines

	nLines := mlcount( cText, 255 )
   nLargMax := 0

	for nA := 1 to 100 //nLines
      cLine    := memoline( cText, 255, nA, 1, .F. )		
   	cLine    := TiraCaracESCPOS(cLine)
		nLargMax := IF( Len(alltrim(cLine)) > nLargMax, Len(Alltrim(cLine)), nLargMax)
	next

return nLargMax


//-------------------------------- Tira caracteres ESC/POS das Strings

function TiraCaracESCPOS( cLine )

	cLine := STRTRAN( cLine, chr(27)+'E', '')
	cLine := STRTRAN( cLine, chr(27)+'F', '')
	cLine := STRTRAN( cLine, chr(27)+'4', '')
	cLine := STRTRAN( cLine, chr(27)+'5', '')
	cLine := STRTRAN( cLine, chr(27)+chr(18), '')
	cLine := STRTRAN( cLine, chr(27)+chr(15), '')
	cLine := STRTRAN( cLine, chr(27)+chr(14), '')
	cLine := STRTRAN( cLine, chr(27)+chr(20), '')

	*-- Esta parte estava a mais
	cLine := STRTRAN( cLine, chr(14), '')
	cLine := STRTRAN( cLine, chr(20), '')
	cLine := STRTRAN( cLine, chr(18), '')
	cLine := STRTRAN( cLine, chr(15), '')
	cLine := STRTRAN( cLine, chr(27)+'O', '')

return cLine


Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5707
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Re: crear documento PDF

Mensaje por jfgimenez »

Cassiano,

sí, Haru sería una buena opción. Ahora bien, lo ideal sería poder convertir directamente de metafile (EMF) a PDF, tal y como hace (hacía) Image2PDF, que por desgracia ya no está a la venta.

En el caso de Haru, me temo que hay que usar sus propias primitivas de dibujo (que son en realidad comandos postscript) para crear el PDF. Y la única manera de usarla de forma transparente sería crear una clase TCanvas alternativa, que "convirtiera" los comandos de TCanvas en comandos de Haru. Si alguien se anima... ;-)
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Avatar de Usuario
gabo1
Mensajes: 127
Registrado: Lun Oct 13, 2014 9:42 am

Re: crear documento PDF

Mensaje por gabo1 »

EL amigo TheFull dejo en el otro foro una clase que usa harbour haru para imprimir y funciona perfectamente en xailer
https://www.dropbox.com/s/eavr5wc4vj1z ... e.7z?dl=0
Saludos!
Responder