TQRPDFDocumentFilter trava o sistema no Windows 10
Boa tarde,
Em algumas máquinas (apenas algumas) com windows 10 ao salvar o pdf usando TQRPDFDocumentFilter o sistema trava e fecha.
Código:
procedure TWReportPreview2.SaveToPdfPrint(Filename : string; UseDocFilter: Boolean);
PdfPrintDocumentFilter : TQRPDFDocumentFilter;
begin
PdfPrintDocumentFilter := TQRPDFDocumentFilter.Create(Filename);
PdfPrintDocumentFilter.AddFontMap( ''''''''WebDings:ZapfDingBats'''''''' );
PdfPrintDocumentFilter.TextOnTop := true;
PdfPrintDocumentFilter.LeftMargin := 0;
PdfPrintDocumentFilter.topMargin := 0;
PdfPrintDocumentFilter.CompressionOn := false;
PdfPrintDocumentFilter.Concatenating := true;
QRPreview.QRPrinter.ExportToFilter(PdfPrintDocumentFilter);
PdfPrintDocumentFilter.EndConcat;
PdfPrintDocumentFilter.Free;
end;
Alguém pode auxiliar? Utilizo delphi 2007 e QuickReport 4
Em algumas máquinas (apenas algumas) com windows 10 ao salvar o pdf usando TQRPDFDocumentFilter o sistema trava e fecha.
Código:
procedure TWReportPreview2.SaveToPdfPrint(Filename : string; UseDocFilter: Boolean);
PdfPrintDocumentFilter : TQRPDFDocumentFilter;
begin
PdfPrintDocumentFilter := TQRPDFDocumentFilter.Create(Filename);
PdfPrintDocumentFilter.AddFontMap( ''''''''WebDings:ZapfDingBats'''''''' );
PdfPrintDocumentFilter.TextOnTop := true;
PdfPrintDocumentFilter.LeftMargin := 0;
PdfPrintDocumentFilter.topMargin := 0;
PdfPrintDocumentFilter.CompressionOn := false;
PdfPrintDocumentFilter.Concatenating := true;
QRPreview.QRPrinter.ExportToFilter(PdfPrintDocumentFilter);
PdfPrintDocumentFilter.EndConcat;
PdfPrintDocumentFilter.Free;
end;
Alguém pode auxiliar? Utilizo delphi 2007 e QuickReport 4

Flávio
Curtidas 0
Melhor post

Flávio
24/08/2018
Complementando a resposta...
NA UNIT QRPDFFILT.PAS, FAZER AS SEGUINTES ALTERAÇÕES
Junto com:
function cvtInt(Buf: array of byte; P: Integer) : Integer;
Criar:
function QRcvtInt(Buf: array of byte; P: Integer) : Integer;
var
pp, bb : integer;
begin
pp := p+1;
bb := (256*Buf[P]);
Result:= (Buf[pp]) + bb;
end;
Em
MakeTTFont
Criar
P: Integer;
Substituir
PDFFont.Metrics[K]:=cvtInt(Buff, Offset+(K*4));
por
PDFFont.Metrics[K] := qrcvtInt (Buff, Offset + (K * 4));//PDFFont.Metrics[K]:=cvtInt(Buff, Offset+(K*4));
Substituir
ntabs:=cvtInt(Buff, 4);
por
ntabs:= 256*Byte(Buff[P])+Byte(Buff[P+1]);//ntabs:=cvtInt(Buff, 4);
Substituir
toff:=cvtDWord(Buff, Offset+8);
tlen:=cvtDWord(Buff, Offset+12);
por
P := Offset+8;
toff:=256*256*256*Byte(Buff[P])+256*256*Byte(Buff[P+1])+256*Byte(Buff[P+2])+Byte(Buff[P+3]);//toff:=cvtDWord(Buff, Offset+8);
P := Offset+12;
tlen:=256*256*256*Byte(Buff[P])+256*256*Byte(Buff[P+1])+256*Byte(Buff[P+2])+Byte(Buff[P+3]);//tlen:=cvtDWord(Buff, Offset+12);
Substituir
PDFFont.NumMetrics:=cvtInt(Buff, toff+tlen-2);
por
PDFFont.NumMetrics:=cvtInt(Buff, toff+tlen-2);
NA UNIT QRPDFFILT.PAS, FAZER AS SEGUINTES ALTERAÇÕES
Junto com:
function cvtInt(Buf: array of byte; P: Integer) : Integer;
Criar:
function QRcvtInt(Buf: array of byte; P: Integer) : Integer;
var
pp, bb : integer;
begin
pp := p+1;
bb := (256*Buf[P]);
Result:= (Buf[pp]) + bb;
end;
Em
MakeTTFont
Criar
P: Integer;
Substituir
PDFFont.Metrics[K]:=cvtInt(Buff, Offset+(K*4));
por
PDFFont.Metrics[K] := qrcvtInt (Buff, Offset + (K * 4));//PDFFont.Metrics[K]:=cvtInt(Buff, Offset+(K*4));
Substituir
ntabs:=cvtInt(Buff, 4);
por
ntabs:= 256*Byte(Buff[P])+Byte(Buff[P+1]);//ntabs:=cvtInt(Buff, 4);
Substituir
toff:=cvtDWord(Buff, Offset+8);
tlen:=cvtDWord(Buff, Offset+12);
por
P := Offset+8;
toff:=256*256*256*Byte(Buff[P])+256*256*Byte(Buff[P+1])+256*Byte(Buff[P+2])+Byte(Buff[P+3]);//toff:=cvtDWord(Buff, Offset+8);
P := Offset+12;
tlen:=256*256*256*Byte(Buff[P])+256*256*Byte(Buff[P+1])+256*Byte(Buff[P+2])+Byte(Buff[P+3]);//tlen:=cvtDWord(Buff, Offset+12);
Substituir
PDFFont.NumMetrics:=cvtInt(Buff, toff+tlen-2);
por
PDFFont.NumMetrics:=cvtInt(Buff, toff+tlen-2);
GOSTEI 2
Mais Respostas

Ariel Barattucci
26/12/2017
Encontraste solución??
GOSTEI 0

Anderson Aquino
26/12/2017
Estou com o mesmo problema em minhas aplicações, conforme verifiquei esse problema ocorre nos Windows 10 versão 1803 em versões anteriores o problema não ocorre.
Caso tenham conseguido alguma solução favor compartilhar.
Caso tenham conseguido alguma solução favor compartilhar.
GOSTEI 0

Renan Santos
26/12/2017
O mesmo problema aqui, alguém já conseguiu solucionar?
GOSTEI 0

Flávio
26/12/2017
A correção deve ser feita no arquivo qrpdffilt.pas
Fonte: http://forum.quickreport.co.uk/default.aspx?g=posts&t=41
Não estou conseguindo acessar meu fonte agora, quando conseguir posto para verificarem as diferenças.
Fonte: http://forum.quickreport.co.uk/default.aspx?g=posts&t=41
Não estou conseguindo acessar meu fonte agora, quando conseguir posto para verificarem as diferenças.
GOSTEI 1

Marco Filho
26/12/2017
Para facilitar a todos, segue a solução:
Alterar no arquivo QRPDFFilt.pas as seguintes assinaturas :
De :
function cvtDWord(Buf: array of byte; P: Integer) : DWORD;
Para:
function cvtDWord(const Buf: array of byte; P: Integer): DWORD;
De :
function cvtInt(Buf: array of byte; P: Integer) : Integer;
Para:
function cvtInt(const Buf: array of byte; P: Integer): Integer;
Abs
Alterar no arquivo QRPDFFilt.pas as seguintes assinaturas :
De :
function cvtDWord(Buf: array of byte; P: Integer) : DWORD;
Para:
function cvtDWord(const Buf: array of byte; P: Integer): DWORD;
De :
function cvtInt(Buf: array of byte; P: Integer) : Integer;
Para:
function cvtInt(const Buf: array of byte; P: Integer): Integer;
Abs
GOSTEI 0

Andre
26/12/2017
Funcionou perfeitamente. Eu tava desesperado com esse BUG, mas agora tô feliz para caramba! OBRIGADO!!!
GOSTEI 0

João Paulo
26/12/2017
Olá, resolveu para mim também.
Obrigado!
Obrigado!
GOSTEI 0

Sandro Dias
26/12/2017
Olá Pessoal,
Tudo bem?
Faz tempo que deixei de programar. Mas agora preciso resolver esse problema em um sistema.
Fiz as alterações na Unit. Abri o PacKage QR4RunD7.dpk e compilei. Porem não resolveu o problema.
Como faz tempo eu não lembro se estou esquecendo de alguma coisa. É apenas esse procedimento de compilação ou preciso fazer mais algum processo?
Desde ja agradeço.
Tudo bem?
Faz tempo que deixei de programar. Mas agora preciso resolver esse problema em um sistema.
Fiz as alterações na Unit. Abri o PacKage QR4RunD7.dpk e compilei. Porem não resolveu o problema.
Como faz tempo eu não lembro se estou esquecendo de alguma coisa. É apenas esse procedimento de compilação ou preciso fazer mais algum processo?
Desde ja agradeço.
GOSTEI 0

Sergio
26/12/2017
Eu fiz questão de criar o cadastro na plataforma pra agradecer ao Flávio.
Flávio, você não faz ideia de quanto isso tá me ajudando. Ainda tenho um legado em Delphi 7.
Tá funcionando perfeitamente!
Muito obrigado.
Flávio, você não faz ideia de quanto isso tá me ajudando. Ainda tenho um legado em Delphi 7.
Tá funcionando perfeitamente!
Muito obrigado.
GOSTEI 1

Flávio
26/12/2017
É isso aí Sérgio, estamos aí pra se ajudar. E obrigado pelo feedback.
GOSTEI 0