Página 1 de 1

crear documento PDF

Publicado: Jue Ene 14, 2016 10:47 pm
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.

Re: crear documento PDF

Publicado: Vie Ene 15, 2016 3:20 pm
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.

Re: crear documento PDF

Publicado: Vie Ene 15, 2016 9:33 pm
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

Re: crear documento PDF

Publicado: Dom Ene 17, 2016 5:17 am
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.

Re: crear documento PDF

Publicado: Lun Ene 18, 2016 3:51 pm
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



Re: crear documento PDF

Publicado: Mar Ene 19, 2016 9:43 am
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... ;-)

Re: crear documento PDF

Publicado: Vie Ene 29, 2016 1:39 pm
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!