TQRPDFDocumentFilter trava o sistema no Windows 10

26/12/2017

0

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

Responder

Post mais votado

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

Flávio

Flávio
Responder

Mais Posts

23/05/2018

Ariel Barattucci

Encontraste solución??
Responder

05/07/2018

Anderson Aquino

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.
Responder

14/08/2018

Renan Santos

O mesmo problema aqui, alguém já conseguiu solucionar?
Responder

14/08/2018

Flávio

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.
Responder

24/08/2018

Marco Filho

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
Responder

10/03/2020

Andre

Funcionou perfeitamente. Eu tava desesperado com esse BUG, mas agora tô feliz para caramba! OBRIGADO!!!
Responder

02/06/2020

João Paulo

Olá, resolveu para mim também.
Obrigado!
Responder

11/09/2020

Sandro Dias

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.


Responder

06/07/2021

Sergio

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.
Responder

06/07/2021

Flávio

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

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar