TQRPDFDocumentFilter trava o sistema no Windows 10

Delphi

26/12/2017

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
Flávio

Flávio

Curtidas 0

Melhor post

Flávio

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);
GOSTEI 2

Mais Respostas

Ariel Barattucci

Ariel Barattucci

26/12/2017

Encontraste solución??
GOSTEI 0
Anderson Aquino

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.
GOSTEI 0
Renan Santos

Renan Santos

26/12/2017

O mesmo problema aqui, alguém já conseguiu solucionar?
GOSTEI 0
Flávio

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.
GOSTEI 1
Marco Filho

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
GOSTEI 0
Andre

Andre

26/12/2017

Funcionou perfeitamente. Eu tava desesperado com esse BUG, mas agora tô feliz para caramba! OBRIGADO!!!
GOSTEI 0
João Paulo

João Paulo

26/12/2017

Olá, resolveu para mim também.
Obrigado!
GOSTEI 0
Sandro Dias

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.


GOSTEI 0
Sergio

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.
GOSTEI 1
Flávio

Flávio

26/12/2017

É isso aí Sérgio, estamos aí pra se ajudar. E obrigado pelo feedback.
GOSTEI 0
POSTAR