Problema na impressao com PDFCREATOR
Moderador: Moderadores
Problema na impressao com PDFCREATOR
Mudei o programa NODOSIMP pelo PDFCREATOR que tem mais possibilidades, mas estou com problema na impressão quando preciso fazer quebra de pagina. Ele parece que não reconhece o comando do oPrinter:NewPage() pois, apos pular a pagina ele perde umas tres linhas do cabeçalho da pagina seguinte.
Alguem pode me esclarecer.
Alguem pode me esclarecer.
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Re: Problema na impressao com PDFCREATOR
Eu tenho usado aqui tranqulamente, post como você esta usando para imprimir com a WIN32PRN
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
-
Hasse
- Usuário Nível 4

- Mensagens: 820
- Registrado em: 19 Out 2004 10:30
- Localização: Jaraguá do Sul - SC
Re: Problema na impressao com PDFCREATOR
Bom dia colegas.
Também já tive este problema, e para contornar, simplesmente adiciono, antes da primeira linha a ser impressa, algumas linhas em branco:
Outra opção seria configurar a margem superior de tal forma a contornar o problema.
Me parece que este problema está liga a algumas impressoras, pois não acontece em todas.
Eu ainda não usei nem testei, mas parace-me que há uma forma de setar os valores SELF das métricas das páginas:
O Leonardo possivelmente possa ajudar a implementar este recurso.
Também já tive este problema, e para contornar, simplesmente adiciono, antes da primeira linha a ser impressa, algumas linhas em branco:
Código: Selecionar todos
oPrinter:NewLine()Me parece que este problema está liga a algumas impressoras, pois não acontece em todas.
Eu ainda não usei nem testei, mas parace-me que há uma forma de setar os valores SELF das métricas das páginas:
Código: Selecionar todos
::PageWidth := GetDeviceCaps(::hPrinterDC,PHYSICALWIDTH)
::PageHeight := GetDeviceCaps(::hPrinterDC,PHYSICALHEIGHT)
::LeftMargin := GetDeviceCaps(::hPrinterDC,PHYSICALOFFSETX)
::RightMargin := (::PageWidth - ::LeftMargin)+1
::PixelsPerInchY := GetDeviceCaps(::hPrinterDC,LOGPIXELSY)
::PixelsPerInchX := GetDeviceCaps(::hPrinterDC,LOGPIXELSX)
::LineHeight := INT(::PixelsPerInchY / 6) // Default 6 lines per inch == # of pixels per line
::TopMargin := GetDeviceCaps(::hPrinterDC,PHYSICALOFFSETY)
::BottomMargin := (::PageHeight - ::TopMargin)+1Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Re: Problema na impressao com PDFCREATOR
Pessoal eu coloquei no programa os comandos abaixo para tentar ver se controlava os tamanhos de pagina e margens, e o sistema me retornou numeros que não entendi.
Ver numeros:
oPrinter:topmargin() = 0
oPrinter:bottommargin() = 7018
oPrinter:lineheight() = 100
oPrinter:pagewidth = 4958
oPrinter:pageheight = 7017
A impressora padrão é a Epson Lx-300
Vocês tem como me explicar?
Ver numeros:
oPrinter:topmargin() = 0
oPrinter:bottommargin() = 7018
oPrinter:lineheight() = 100
oPrinter:pagewidth = 4958
oPrinter:pageheight = 7017
A impressora padrão é a Epson Lx-300
Vocês tem como me explicar?
-
Hasse
- Usuário Nível 4

- Mensagens: 820
- Registrado em: 19 Out 2004 10:30
- Localização: Jaraguá do Sul - SC
Re: Problema na impressao com PDFCREATOR
Boa tarde Locio.
Estes valores são em PIXELS, para a impressora em uso, para a qualidade setada.
Estes valores costumam mudar quando você troca de impressora ou quando você troca de qualidade de impressão.
Estes valores são em PIXELS, para a impressora em uso, para a qualidade setada.
Estes valores costumam mudar quando você troca de impressora ou quando você troca de qualidade de impressão.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Re: Problema na impressao com PDFCREATOR
Prezado Hasse,
Segue abaixo rotina que utilizo para imprimir. Inicialmente eu crio um arquivo txt eno final eu dou um comando para uma rotina imprime.
Você observe que na rotina eu posso imprimir via printfileraw, isso está legal.
Quando eu coloco para imprimir via pdfcreator tenho problema, inclusive se a pagina não fica completa e eu pulo para outra pagina ele imprime ainda na pagina anterior.
Por favor veja qual é a besteira que eu estou fazendo,
Locio
Segue abaixo rotina que utilizo para imprimir. Inicialmente eu crio um arquivo txt eno final eu dou um comando para uma rotina imprime.
Você observe que na rotina eu posso imprimir via printfileraw, isso está legal.
Quando eu coloco para imprimir via pdfcreator tenho problema, inclusive se a pagina não fica completa e eu pulo para outra pagina ele imprime ainda na pagina anterior.
Código: Selecionar todos
FUNCTION Imprime( cPrinter, cArq, tamrel, ver, tampag )
////////////////////////////////////////////////////////////////////////////////
local cTexto, nLinhas, nA, cLinha, nB // oPrinter := win32prn():New(cPrinter)
LOCAL oPrinter := win32prn():new(getdefaultprinter())
local Prn
local nPrn:=1
local aPrn:= GetPrinters()
oPrinter:Landscape := .F.
oPrinter:FormType := 9
oprinter:SetPrintQuality(-1) // qualidade da impressão
oPrinter:Copies := 1
if tampag = nil
tampag := 58
endif
if cPrinter = "printfileraw"
Prn:=getdefaultprinter()
ret:=printfileraw(Prn,cArq)
@ maxrow()-8,10 say 'retorno printfileraw: ' + str(ret) + ' ' + PRN + ' ' + carq
return
endif
if empty(aPrn)
mens(cor5,"NÆo encontrou impressoras instaladas....Favor Verificar a Impressora !!!")
return NIL
endif
if ver
fAbreJanela("Seleciona Impressora",18,15,25,85)
do while !empty(nprn)
// cls
// @ 0,0 say 'Teste de classe Win32Prn(). Escolha a impressora. ESC p/sair'
// @ 1,0 to maxrow(), maxcol()
nPrn := achoice(19,16,24,84,aPrn)
if lastkey() = 27
fFechaJanela()
return
endif
if !empty(nprn)
oPrinter := win32prn():new(aPrn[nPrn])
exit
endif
enddo
fFechaJanela()
endif
IF !oPrinter:Create()
mens(cor5,"Atenção !!! O Sistema encontrou um Problema ao Tentar Executar Create().")
return NIL
endif
IF ! oPrinter:StartDoc(cArq)
mens(cor5,"Atenção !!! O Sistema encontrou um Problema ao Tentar executar StartDoc()")
return NIL
endif
oPrinter:SetDefaultFont()
if tamrel > 80
// oPrinter:setfont('Courier New',,17,,,,255)
oPrinter:setfont(,,17,,,,255)
else
// oPrinter:setfont('Courier New',,11,,,,255)
oPrinter:setfont(,,11,,,,255)
endif
oPrinter:TextOut( space(tamrel), .T. )
cTexto := memoread( cArq )
nLinhas := mlcount( cTexto, tamrel, 1, .F. )
nConta := 0
for nA := 1 to nLinhas
cLinha := memoline( cTexto, tamrel, nA, 1, .F. )
IF nCONTA = tampag
oPrinter:NewPage()
oPrinter:Newline()
oPrinter:Newline()
oPrinter:Newline()
nConta := 0
else
oPrinter:TextOut( cLinha, .T. )
endif
nConta=nConta+1
next
oPrinter:EndDoc()
oPrinter:Destroy()
RETURN NIL
Locio
Re: Problema na impressao com PDFCREATOR
Você pode tentar com CutePDF ao invés de PDFCREATOR
Instruções estão abaixo:
É simples: vá no site do superdownloads e baixe um programa chamado cutepdf. É uma impressora virtual que imprime em PDF. Se preferir baixe direto do site do fabricante:
http://www.cutepdf.com/download/cutewriter.exe
Vc vai precisar de um outro programa chamado converter.exe que vc encontra em:
http://www.cutepdf.com/download/converter.exe
Agora é simples, instale os dois programas em sua máquina. ambos são FREEWARE. Pronto! Vc tem uma impressora virtual chamada CUTEPDF WRITER e tudo o que mandar pra ela é salvo em um arquivo PDF, obedecendo toda a formatação do relatório original, inclusive com imagens e gráficos.
O seu software só terá que ter a opção de escolher a impressora antes de imprimir o relatório. O resto fica igual, nem uma linha de comando precisa ser alterada. Como a saída gerada é um arquivo PDF a impressora virtual abre uma janela onde vc pode indicar a pasta e o nome do arquivo a ser salvo. A impressão do PDF não atrapalha o seu programa funcionar e a janela é fechada após o arquivo ser gerado.
--------------------------------------------------------------------
Bem, naturalmente como vc gera um txt é preciso ver qual é o caracter que permite a mudança de página. Você deve incluí-lo no final de cada página para a impressora virtual entender o momento da mudança.
É isto aí, espero ter ajudado.
Instruções estão abaixo:
É simples: vá no site do superdownloads e baixe um programa chamado cutepdf. É uma impressora virtual que imprime em PDF. Se preferir baixe direto do site do fabricante:
http://www.cutepdf.com/download/cutewriter.exe
Vc vai precisar de um outro programa chamado converter.exe que vc encontra em:
http://www.cutepdf.com/download/converter.exe
Agora é simples, instale os dois programas em sua máquina. ambos são FREEWARE. Pronto! Vc tem uma impressora virtual chamada CUTEPDF WRITER e tudo o que mandar pra ela é salvo em um arquivo PDF, obedecendo toda a formatação do relatório original, inclusive com imagens e gráficos.
O seu software só terá que ter a opção de escolher a impressora antes de imprimir o relatório. O resto fica igual, nem uma linha de comando precisa ser alterada. Como a saída gerada é um arquivo PDF a impressora virtual abre uma janela onde vc pode indicar a pasta e o nome do arquivo a ser salvo. A impressão do PDF não atrapalha o seu programa funcionar e a janela é fechada após o arquivo ser gerado.
--------------------------------------------------------------------
Bem, naturalmente como vc gera um txt é preciso ver qual é o caracter que permite a mudança de página. Você deve incluí-lo no final de cada página para a impressora virtual entender o momento da mudança.
É isto aí, espero ter ajudado.
-
Hasse
- Usuário Nível 4

- Mensagens: 820
- Registrado em: 19 Out 2004 10:30
- Localização: Jaraguá do Sul - SC
Re: Problema na impressao com PDFCREATOR
Boa noite colegas.
Realmente o CutePDF é uma outra opção, que eu uso somente quando estou tratando com textos que contenham caracteres especiais. Para o feijão com arroz do dia a dia, ainda prefiro o PDFCreator que possui mais recursos.
O problema do colega Locio é de programação, ou melhor, de tempo para se adaptar e entender o funcionamento da Classe Win32prn().
Fiz algumas alterações, e comentei do porquê... Testei e está funcionando. Veja.
Espero que tenha ficado claro. Boa sorte.
Realmente o CutePDF é uma outra opção, que eu uso somente quando estou tratando com textos que contenham caracteres especiais. Para o feijão com arroz do dia a dia, ainda prefiro o PDFCreator que possui mais recursos.
O problema do colega Locio é de programação, ou melhor, de tempo para se adaptar e entender o funcionamento da Classe Win32prn().
Fiz algumas alterações, e comentei do porquê... Testei e está funcionando. Veja.
Código: Selecionar todos
Function MAIN()
Imprime( "PDFCreator", "Teste.txt", 80, .f., 58 )
RETURN(.T.)
*
*
FUNCTION Imprime( cPrinter, cArq, tamrel, ver, tampag )
////////////////////////////////////////////////////////////////////////////////
local cTexto, nLinhas, nA, cLinha, nB // oPrinter := win32prn():New(cPrinter)
*--------------------------------------
LOCAL oPrinter:= WIN32PRN():New(cPrinter), aFonts, x, nColFixed, nColTTF, ;
nColCharSet, aForms
// Abre o objeto oPrinter. As variáveis que não estiverem declaradas são
// automaticamente assumidas como default pela Win32prn().
*--------------------------------------
// LOCAL oPrinter := win32prn():new(getdefaultprinter())
// lembre-se que oPrinter é o objeto do documento da classe Win32prn() e você
// não pode usar esta variável para arquivar o namo da impressora.
// Alterei para cPrt e comentei pois usei só o PDFCreator.
// LOCAL cPrt := win32prn():new(getdefaultprinter())
*--------------------------------------
local Prn
// local nPrn:=1 // não usada.
local aPrn:= GetPrinters()
oPrinter:Landscape := .F.
oPrinter:FormType := 9
oprinter:SetPrintQuality(-1) // qualidade da impressão
oPrinter:Copies := 1
if tampag = nil
tampag := 58
endif
if cPrinter = "printfileraw"
Prn:=getdefaultprinter()
ret:=printfileraw(Prn,cArq)
@ maxrow()-8,10 say 'retorno printfileraw: ' + str(ret) + ' ' + PRN + ' ' + carq
return
endif
if empty(aPrn)
mens("NÆo encontrou impressoras instaladas....Favor Verificar a Impressora !!!")
return NIL
endif
IF ! oPrinter:Create()
mens(cor5,"Atenção !!! O Sistema encontrou um Problema ao Tentar Executar Create().")
return NIL
endif
*--------------------------------------
// Abaixo a variável cArq deve conter o nome do arquivo que deve ser gravado, e não o
// nome do arquivo texto que se deseja imprimir. Portanto vamos dar o nome de "Teste_11".
// O sufixo "pdf" será assumnido como default.
IF ! oPrinter:StartDoc( "Teste_11" )
mens("Atenção !!! O Sistema encontrou um Problema ao Tentar executar StartDoc()")
return NIL
endif
oPrinter:SetDefaultFont()
if tamrel > 80
// oPrinter:setfont('Courier New',,17,,,,255)
oPrinter:setfont(,,17,,,,255)
else
// oPrinter:setfont('Courier New',,11,,,,255)
oPrinter:setfont(,,11,,,,255)
endif
// oPrinter:TextOut( space(tamrel), .T. )
// Não entendi a finalidade da linha acima. Ela só vai imprimir em branco.
cTexto := memoread( cArq )
// nLinhas := mlcount( cTexto, tamrel, 1, .F. )
nLinhas := mlcount( cTexto, tamrel, 1, .F. )
//nConta := 0 // não é mais necessária.
for nA := 1 to nLinhas
cLinha := memoline( cTexto, tamrel, nA, 1, .F. )
// IF nCONTA = tampag
IF oPrinter:prow() >= tampag // eu prefiro assim. Usar os recurso da Classe.
oPrinter:NewPage()
oPrinter:Newline()
oPrinter:Newline()
oPrinter:Newline()
// nConta := 0
oPrinter:TextOut( cLinha, .T. ) // faltou esta linha.
else
oPrinter:TextOut( cLinha, .T. )
endif
// nConta=nConta+1
next
oPrinter:EndDoc()
oPrinter:Destroy()
RETURN NILHasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Re: Problema na impressao com PDFCREATOR
Fiz um pequeno ajuste no seu codigo, veja se resolve.
Código: Selecionar todos
FUNCTION Imprime( cPrinter, cArq, tamrel, ver, tampag )
////////////////////////////////////////////////////////////////////////////////
local cTexto, nLinhas, nA, cLinha, nB // oPrinter := win32prn():New(cPrinter)
LOCAL oPrinter := win32prn():new(getdefaultprinter())
local Prn
local nPrn:=1
local aPrn:= GetPrinters()
oPrinter:Landscape := .F.
oPrinter:FormType := 9
oprinter:SetPrintQuality(-1) // qualidade da impressão
oPrinter:Copies := 1
if tampag = nil
tampag := 58
endif
if cPrinter = "printfileraw"
Prn:=getdefaultprinter()
ret:=printfileraw(Prn,cArq)
@ maxrow()-8,10 say 'retorno printfileraw: ' + str(ret) + ' ' + PRN + ' ' + carq
return
endif
if empty(aPrn)
mens(cor5,"NÆo encontrou impressoras instaladas....Favor Verificar a Impressora !!!")
return NIL
endif
if ver
fAbreJanela("Seleciona Impressora",18,15,25,85)
do while !empty(nprn)
// cls
// @ 0,0 say 'Teste de classe Win32Prn(). Escolha a impressora. ESC p/sair'
// @ 1,0 to maxrow(), maxcol()
nPrn := achoice(19,16,24,84,aPrn)
if lastkey() = 27
fFechaJanela()
return
endif
if !empty(nprn)
oPrinter := win32prn():new(aPrn[nPrn])
exit
endif
enddo
fFechaJanela()
endif
IF !oPrinter:Create()
mens(cor5,"Atenção !!! O Sistema encontrou um Problema ao Tentar Executar Create().")
return NIL
endif
IF ! oPrinter:StartDoc(cArq)
mens(cor5,"Atenção !!! O Sistema encontrou um Problema ao Tentar executar StartDoc()")
return NIL
endif
oPrinter:SetDefaultFont()
if tamrel > 80
// oPrinter:setfont('Courier New',,17,,,,255)
oPrinter:setfont(,,17,,,,255)
else
// oPrinter:setfont('Courier New',,11,,,,255)
oPrinter:setfont(,,11,,,,255)
endif
oPrinter:TextOut( space(tamrel), .T. )
cTexto := memoread( cArq )
nLinhas := mlcount( cTexto, tamrel, 1, .F. )
nConta := 0
for nA := 1 to nLinhas
cLinha := memoline( cTexto, tamrel, nA, 1, .F. )
if (oPrinter:MaxRow()-2 ) <= oPrinter:Prow()
oPrinter:NewPage()
FOR TT=1 TO 2
oPrinter:newline()
NEXT
nConta := 0
endif
IF nCONTA = tampag
oPrinter:NewPage()
oPrinter:Newline()
oPrinter:Newline()
oPrinter:Newline()
nConta := 0
else
oPrinter:TextOut( cLinha, .T. )
endif
nConta=nConta+1
next
oPrinter:EndDoc()
oPrinter:Destroy()
RETURN NIL
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
