Modo de Usar:
Código: Selecionar todos
PdfDrawPageDOSNew( cArquivo, cNamePdf, 5, 1, lLandScape )
Código: Selecionar todos
FUNCTION PDFDRAWPAGEDOSNew( cPRN, cPDFName,nMargem,nMargemTop,lLandScape )
LOCAL cBuffer := Space(2052), poz := 2052, cLinha, nLinha, nColuna
LOCAL hFile, nI, nII, cPRNMem
LOCAL oPdf, oPage
oPdf := HPDF_New()
HPDF_SetCompressionMode( oPdf, HPDF_COMP_ALL )
*** setando fontes
oCourier := HPDF_GetFont( oPdf, "Courier", "CP1252" )
oCourierBold := HPDF_GetFont( oPdf, "Courier-Bold", "CP1252" )
*** tirar o ultimo eject para não gerar uma pagina em branco
cPRNMem := MEMOREAD( cPRN )
IF SUBS(cPRNMem,Len(cPRNMem)-2,1)==CHR(12)
cPRNMem := SUBS(cPRNMem,1,Len(cPRNMem)-3)
MEMOWRIT( cPRN, cPRNMem )
ENDIF
hFile := FOPEN( cPRN, 0 + 64 )
IF hFile <> - 1
tamanho=FSeek(hFile,0,2)
FSeek(hFile,0)
oPage := HPDF_AddPage(opdf)
HPDF_Page_SetSize(oPage, HPDF_PAGE_SIZE_A4, IF(lLandscape=.T.,HPDF_PAGE_LANDSCAPE,HPDF_PAGE_PORTRAIT) )
nAltura := HPDF_Page_GetHeight( oPage )
nLargura := HPDF_Page_GetWidth( oPage )
nLinha := nAltura
lFirst = .T.
* default
l8lp := .F.
lComprimido = .F.
lExpandido = .F.
lNegrito = .F.
DO WHILE .T.
cLinha := RDSTR( hFile,@cBuffer,@poz,2052 )
IF lFirst = .T. && tirando primeiro caracter que sempre vem um epsço em branco a mais
lFirst := .F.
cLinha = SUBS(cLinha,2)
ENDIF
IF LEN( cLinha ) = 0
EXIT
ENDIF
nColuna = nMargem
FOR nI=1 TO Len(cLinha)
cCaracter := SUBS(cLinha,nI,1)
// Codes of EPSON - Codigos EPSON
nII = nI
IF SUBS(cLinha,nI,3)==CHR(27)+"W"+CHR(1)
lExpandido := .T.
nI += 3
ELSEIF SUBS(cLinha,nI,3)==CHR(27)+"W"+CHR(0)
lExpandido := .F.
nI += 3
ENDIF
IF SUBS(cLinha,nI,2)==CHR(27)+"G"
lNegrito := .T.
nI += 2
ELSEIF SUBS(cLinha,nI,2)==CHR(27)+"H"
lNegrito := .F.
nI += 2
ENDIF
IF SUBS(cLinha,nI,1)==CHR(15)
lComprimido := .T.
nI ++
ELSEIF SUBS(cLinha,nI,1)==CHR(18)
lComprimido := .F.
nI ++
ENDIF
// 8 linhas por polegada
IF SUBS(cLinha,nI,2)==CHR(27)+"0"
l8lp := .T.
nI += 2
ELSEIF SUBS(cLinha,nI,2)==CHR(27)+"2"
// 6 linhas por polegada
l8lp := .F.
nI += 2
ENDIF
IF nII<>nI
nI --
LOOP
ENDIF
// Eject
IF cCaracter=CHR(12)
oPage := HPDF_AddPage(opdf)
HPDF_Page_SetSize(oPage, HPDF_PAGE_SIZE_A4, IF(lLandscape=.T.,HPDF_PAGE_LANDSCAPE,HPDF_PAGE_PORTRAIT) )
nAltura := HPDF_Page_GetHeight( oPage )
nLargura := HPDF_Page_GetWidth( oPage )
nLinha := nAltura
EXIT
ENDIF
* padrao de colunas retrato 80 normal, 134 comprimido
* paisagem 113 normal, 192 comprimido
nTamanho := 11
nEspacamento := 7.43 &&(595/80) proporcao usada
IF lComprimido = .T.
nTamanho := nTamanho / 1.72
nEspacamento := 4.30 &&(595/134)
IF lExpandido = .T.
nTamanho := 11
nEspacamento := 7.43 &&(595/80)
ENDIF
ELSE
IF lExpandido = .T.
nTamanho := nTamanho * 2
nEspacamento := 14.87 &&(595/40)
ENDIF
ENDIF
IF l8lp = .T.
nEspLinha = 9.5
ELSE
nEspLinha = 12
ENDIF
HPDF_Page_BeginText( oPage )
IF lNegrito = .T.
HPDF_Page_SetFontAndSize( oPage, oCourierBold, nTamanho )
ELSE
HPDF_Page_SetFontAndSize( oPage, oCourier, nTamanho )
ENDIF
HPDF_Page_TextRect(oPage, nColuna, nLinha,nColuna+nTamanho, nLinha-nEspLinha, cCaracter, HPDF_TALIGN_LEFT, NIL)
HPDF_Page_EndText( oPage )
nColuna += nEspacamento
NEXT
nLinha -= nEspLinha
ENDDO
TRY
HPDF_SaveToFile( oPdf, cPDFName )
CATCH
msgInfo("Problemas ao gerar o PDF, tente novamente.","Aviso !")
END
Fclose( hFile )
ELSE
Return .F.
ENDIF
RETURN(.T.)
[]s
Fernando

