Como converter um .DOC para .PDF

Delphi

23/07/2006

Ola pessoal, ja baixei uma série de componentes na NET e nenhum resolvel o meu problema, encontrei Drivers virtuais, OCXs, e DLLs e componentes, e nada, o que eu realmente quero é pegar um arquivo do Word que foi criada pela minha aplicação um .DOC normal e converter para o formato PDF.

Alguem pode me indicar um componente ao qualquer coisa pra resolver isso.


Desde agradecço a qualquer ajuda.


Ataidesg

Ataidesg

Curtidas 0

Respostas

Cabelo

Cabelo

23/07/2006

Colega...

talvez este tópico possa ajudar...

http://forum.devmedia.com.br/viewtopic.php?t=75490&start=0&postdays=0&postorder=asc&highlight=&sid=13e6ab074427dbefc98a5624c6a45e45

OBS : lembre-se... antes de postar um novo tópico, realize uma pesquisa para ter certeza que o assunto já não foi discutido aqui no fórum..

um abraço


GOSTEI 0
Ataidesg

Ataidesg

23/07/2006

Colega... talvez este tópico possa ajudar... http://forum.devmedia.com.br/viewtopic.php?t=75490&start=0&postdays=0&postorder=asc&highlight=&sid=13e6ab074427dbefc98a5624c6a45e45 OBS : lembre-se... antes de postar um novo tópico, realize uma pesquisa para ter certeza que o assunto já não foi discutido aqui no fórum.. um abraço



Com certeza meu caro colega Cabelo, mas ja havia garimpado tudo a respeito, inclusive este seu link antes de fazer o questionamento, mas como nenhuma solução era a princípio muito boa resolvi questionar novamente, eu tenho o quickreport e uso ele, inclusive envio e-mail com PDF e JPG, mas imaginei existir uma outra solução para este problema, mas me diz uma coisa tem como me mandar um passo a passo de como resolvel isso, mas não quero dar preview, queria montar uma solução dentro da aplicação que me convertesse este .DOC em .PDF, se puder em emplicar ou enviar alguma coisa no meu e-mail eu agradeceria muito.

:wink:


GOSTEI 0
Cabelo

Cabelo

23/07/2006

Colega...

Na verdade vc não prcisa dar um preview... vc pode montar tudo em RUN - Time, e depois mandar converter para PDF sem dar um preview...

eu criei um componente para .CLX que faz esta operação sem precisar de abrir o relatório na tela..

mas só funciona em .CLX :lol: :oops:

não sei ainda o motivo, só sei que em .VCL não funciona..

para gerar o .PDF fiz assim :

primeiro carrego em um Stream o conteudo do .DOC.
carrego o .DOC num QRReport.
Sem dar um preview, uso o componente QRPDFFilter para gerar o .PDF.
Sem dar nenhum preview, funciona..

qualquer dúvida posta aê...

um abraço.


GOSTEI 0
Ataidesg

Ataidesg

23/07/2006

Colega... Na verdade vc não prcisa dar um preview... vc pode montar tudo em RUN - Time, e depois mandar converter para PDF sem dar um preview... eu criei um componente para .CLX que faz esta operação sem precisar de abrir o relatório na tela.. mas só funciona em .CLX :lol: :oops: não sei ainda o motivo, só sei que em .VCL não funciona.. para gerar o .PDF fiz assim : primeiro carrego em um Stream o conteudo do .DOC. carrego o .DOC num QRReport. Sem dar um preview, uso o componente QRPDFFilter para gerar o .PDF. Sem dar nenhum preview, funciona.. qualquer dúvida posta aê... um abraço.




Ok, caro colega Cabelo, eu vou tentar fazer a mesma coisa, e te falo se deu certo, muito grato pela dica.


GOSTEI 0
Ataidesg

Ataidesg

23/07/2006

Não estou conseguindo aqui o que eu faço com o Strem exatamente, não entendi .




Colega... Na verdade vc não prcisa dar um preview... vc pode montar tudo em RUN - Time, e depois mandar converter para PDF sem dar um preview... eu criei um componente para .CLX que faz esta operação sem precisar de abrir o relatório na tela.. mas só funciona em .CLX :lol: :oops: não sei ainda o motivo, só sei que em .VCL não funciona.. para gerar o .PDF fiz assim : primeiro carrego em um Stream o conteudo do .DOC. carrego o .DOC num QRReport. Sem dar um preview, uso o componente QRPDFFilter para gerar o .PDF. Sem dar nenhum preview, funciona.. qualquer dúvida posta aê... um abraço.



GOSTEI 0
Cabelo

Cabelo

23/07/2006

Bom vamos lá...

Para realizar esta procedure o clientdataset deve estar ponteirado no resgistro que vc deseja tranformar em PDF...

Um arquivo gravado no BD como Blob.

var v_stream : TStream;
v_caminho, v_nome_arquivo : string;
begin
   v_caminho := ´C:\´;
   v_nome_arquivo := ´TESTE´;
   v_stream := clientdataset.createblobstream(clientdataset.fieldbyname(´campo blob´), bmread);
   QRRich.LoadFromStream(v_stream);
   QRReport.ExportToFilter(TQRPDFDocumentFilter.Create(v_caminho+v_nome_arquivo+´.PDF´));


se vc deseja procurar um arquivo no HD..

var v_caminho, v_nome_arquivo : string;
begin
   v_caminho := ´C:\´;
   v_nome_arquivo := ´TESTE´;
   QRRich.LoadFromFile(caminho do arquivo no HD);
   QRReport.ExportToFilter(TQRPDFDocumentFilter.Create(v_caminho+v_nome_arquivo+´.PDF´));


sendo que

Estes componentes podem ser criados em RUN - Time ou serem inseridos em um form... vc é que decide..

QRRich = TQRRichText;
QRReport = TQuickRep;
TQRPDFDocumentFilter = TQRPDFFilter;

como vc pode ver... sem nenhum preview, e seu PDF estará no caminho indicado...

C:\TESTE.PDF

um abraço


GOSTEI 0
Ataidesg

Ataidesg

23/07/2006

Agora sim amigo deu pra entender bem, vou testar e te falo, valeu mesmo pela mão.


Bom vamos lá... Para realizar esta procedure o clientdataset deve estar ponteirado no resgistro que vc deseja tranformar em PDF... Um arquivo gravado no BD como Blob.
var v_stream : TStream;
v_caminho, v_nome_arquivo : string;
begin
   v_caminho := ´C:\´;
   v_nome_arquivo := ´TESTE´;
   v_stream := clientdataset.createblobstream(clientdataset.fieldbyname(´campo blob´), bmread);
   QRRich.LoadFromStream(v_stream);
   QRReport.ExportToFilter(TQRPDFDocumentFilter.Create(v_caminho+v_nome_arquivo+´.PDF´));
se vc deseja procurar um arquivo no HD..
var v_caminho, v_nome_arquivo : string;
begin
   v_caminho := ´C:\´;
   v_nome_arquivo := ´TESTE´;
   QRRich.LoadFromFile(caminho do arquivo no HD);
   QRReport.ExportToFilter(TQRPDFDocumentFilter.Create(v_caminho+v_nome_arquivo+´.PDF´));
sendo que Estes componentes podem ser criados em RUN - Time ou serem inseridos em um form... vc é que decide.. QRRich = TQRRichText; QRReport = TQuickRep; TQRPDFDocumentFilter = TQRPDFFilter; como vc pode ver... sem nenhum preview, e seu PDF estará no caminho indicado... C:\TESTE.PDF um abraço



GOSTEI 0
Ataidesg

Ataidesg

23/07/2006

Opa fala amigo vim so pra comunicar que infelizmente a solução não funcionou, na verdade infelizmente não atendeu, tenho um contrato um arquivo .DOC que tem imagem, e convertendo para .RTF a imagem não vem, e dando um load direto no .DOC não funciona, somente como RTF, sendo assim infelizmente voltei a estaca zero, se algum puder ajudar agradeço.

E muito obrigado mesmo assim amigo cabelo.


Bom vamos lá... Para realizar esta procedure o clientdataset deve estar ponteirado no resgistro que vc deseja tranformar em PDF... Um arquivo gravado no BD como Blob.
var v_stream : TStream;
v_caminho, v_nome_arquivo : string;
begin
   v_caminho := ´C:\´;
   v_nome_arquivo := ´TESTE´;
   v_stream := clientdataset.createblobstream(clientdataset.fieldbyname(´campo blob´), bmread);
   QRRich.LoadFromStream(v_stream);
   QRReport.ExportToFilter(TQRPDFDocumentFilter.Create(v_caminho+v_nome_arquivo+´.PDF´));
se vc deseja procurar um arquivo no HD..
var v_caminho, v_nome_arquivo : string;
begin
   v_caminho := ´C:\´;
   v_nome_arquivo := ´TESTE´;
   QRRich.LoadFromFile(caminho do arquivo no HD);
   QRReport.ExportToFilter(TQRPDFDocumentFilter.Create(v_caminho+v_nome_arquivo+´.PDF´));
sendo que Estes componentes podem ser criados em RUN - Time ou serem inseridos em um form... vc é que decide.. QRRich = TQRRichText; QRReport = TQuickRep; TQRPDFDocumentFilter = TQRPDFFilter; como vc pode ver... sem nenhum preview, e seu PDF estará no caminho indicado... C:\TESTE.PDF um abraço



GOSTEI 0
Cabelo

Cabelo

23/07/2006

Colega..

Eu uso .DOC, carrego no report... tenho um logotipo no cabeçalho de todas as folhas... então o que eu fiz.. coloquei uma band de cabeçalho e adicionei os dados lá... o que vc pode fazer, como vc possui imagens, pode ler o .doc e as imagens vc pode adicionar as bands de acordo com sua necessidade... tudo isso em RUN - TIME... se quiser uma exemplo posso te mandar..

tenho um contrato uqe tem a imagem no cabeçalho e tenho um LAUDO que possui muitas fotos e faço exatamente assim... e funciona perfeitamente..

um abraço..


GOSTEI 0
Ataidesg

Ataidesg

23/07/2006

Eu agradeceria bastante se pudesse citar aqui o exemplo caro amigo, e por gentileza quanto ao carregar o .DOC eu não entendi pois estou usando um QRRichText para dar o Load do arquivo que se encontra no HD e ele me carrega caracteres estranhos ao invés do contúdo do arquivo do Word, será que foi assim mesmo que você fez pra carregar o seu .DOC ? se sim qual versão do QuickReport esta usando.

Fico grato pela sua ajuda.


Colega.. Eu uso .DOC, carrego no report... tenho um logotipo no cabeçalho de todas as folhas... então o que eu fiz.. coloquei uma band de cabeçalho e adicionei os dados lá... o que vc pode fazer, como vc possui imagens, pode ler o .doc e as imagens vc pode adicionar as bands de acordo com sua necessidade... tudo isso em RUN - TIME... se quiser uma exemplo posso te mandar.. tenho um contrato uqe tem a imagem no cabeçalho e tenho um LAUDO que possui muitas fotos e faço exatamente assim... e funciona perfeitamente.. um abraço..



GOSTEI 0
Cabelo

Cabelo

23/07/2006

Bom... segue abaixo o código de um dos meus contratos..

procedure TfrmCO21011.P_Imprime_Contrato(l_cod_proposta : string);
var v_sql : string;
v_report : TQuickRep;
v_rich : TQRRichText;
v_arquivo : boolean;
v_label_proposta, v_label_num_proposta, v_label_contrato, v_label_num_contrato, 
v_label_pagina : TQRLabel;
v_num_pagina : TQRSysData;
begin
v_sql := ´select C_CONTRATO_PROPOSTA, C_COD_PROPOSTA from PO0100 ´+
´where C_COD_PROPOSTA = ´´´+l_cod_proposta+´´´´;
F_Query(QCONTRATO, cdsContrato, v_sql, ´O´);
v_sql := ´select C_COD_OBRA from OB0100 where C_COD_PROPOSTA = ´´´+l_cod_proposta+´´´´;
F_Query(QOB0100, cdsOB0100, v_sql, ´O´);
cdsContratoC_CONTRATO_PROPOSTA.SaveToFile(´C:\´+ StringReplace(
cdsOB0100.fieldbyname(´C_COD_OBRA´).AsString, ´/´, ´-´, [rfReplaceAll])+ ´.DOC´);
v_report := TQuickRep.Create(self);
v_report.DataSet := cdsContrato;
v_report.Bands.HasDetail := True;
v_report.Bands.HasPageHeader := True;
v_report.Bands.HasPageFooter := True;
v_report.Bands.PageHeaderBand.Width := 740;
v_report.Bands.PageHeaderBand.Height := 49;
v_label_proposta := TQRLabel.Create(self);
with v_label_proposta do
begin
Caption := ´Proposta :´;
Height := 17;
Left := 544;
Top := 8;
Width := 61;
Parent := v_report.Bands.PageHeaderBand;
end;
v_label_num_proposta := TQRLabel.Create(self);
with v_label_num_proposta do
begin
Caption := cdsContratoC_COD_PROPOSTA.AsString;
Height := 17;
Left := 616;
Top := 8;
Width := 95;
Parent := v_report.Bands.PageHeaderBand;
end;
v_label_contrato := TQRLabel.Create(self);
with v_label_contrato do
begin
Caption := ´Contrato  :´;
Height := 17;
Left := 544;
Top := 26;
Width := 61;
Parent := v_report.Bands.PageHeaderBand;
end;
v_label_num_contrato := TQRLabel.Create(self);
with v_label_num_contrato do
begin
Caption := cdsOB0100.fieldbyname(´C_COD_OBRA´).AsString;
Height := 17;
Left := 616;
Top := 26;
Width := 95;
Parent := v_report.Bands.PageHeaderBand;
end;
v_report.Bands.PageFooterBand.Width := 740;
v_report.Bands.PageFooterBand.Height := 32;
v_label_pagina := TQRLabel.Create(self);
with v_label_pagina do
begin
Caption := ´Página - ´;
Height := 17;
Left := 319;
Top := 8;
Width := 53;
Parent := v_report.Bands.PageFooterBand;
end;
v_num_pagina := TQRSysData.Create(self);
with v_num_pagina do
begin
Data := qrsPageNumber;
Height := 17;
Left := 375;
Top := 8;
AutoSize := True;
Parent := v_report.Bands.PageFooterBand;
end;
v_report.Bands.DetailBand.Width := 740;
v_report.Bands.DetailBand.Height := 897;
v_report.Bands.DetailBand.ForceNewPage := True;
v_report.ShowProgress := False;
v_rich := TQRRichText.Create(Self);
v_rich.Parent := v_report.Bands.DetailBand;
v_rich.AutoStretch := True;
v_rich.Width := 740;
v_rich.Height := 897;
v_rich.Lines.LoadFromFile(´C:\´+ StringReplace(
cdsOB0100.fieldbyname(´C_COD_OBRA´).AsString, ´/´, ´-´, [rfReplaceAll])+ ´.DOC´);
v_report.ExportToFilter(TQRPDFDocumentFilter.Create(´C:\´+ StringReplace(
cdsOB0100.fieldbyname(´C_COD_OBRA´).AsString, ´/´, ´-´, [rfReplaceAll])+ ´.PDF´));
Application.CreateForm(TfrmCO21014, frmCO21014);
frmCO21014.ShowModal;
s_caminho := frmCO21014.dtvCaminho.Directory + 
Trim(frmCO21014.lblNomeArquivo.Caption);
frmCO21014.Release;
v_arquivo := True;
while v_arquivo do
begin
if ´C:\´+ StringReplace(
cdsOB0100.fieldbyname(´C_COD_OBRA´).AsString, ´/´, ´-´, [rfReplaceAll])+ ´.PDF´ = 
s_caminho then
begin
MessageDlg(´É necessário selecionar outro caminho para o arquivo .PDF´,
mterror, [mbOk], 0);
Application.CreateForm(TfrmCO21014, frmCO21014);
frmCO21014.ShowModal;
s_caminho := frmCO21014.dtvCaminho.Directory;
frmCO21014.Release;
end
else
begin
v_arquivo := False;
end;
end;
v_rich.Free;
v_label_proposta.Free;
v_label_num_proposta.Free;
v_label_contrato.Free;
v_label_num_contrato.Free;
v_label_pagina.Free;
v_num_pagina.Free;
v_report.Free;
DeleteFile(´C:\´+ StringReplace(
cdsOB0100.fieldbyname(´C_COD_OBRA´).AsString, ´/´, ´-´, [rfReplaceAll])+ ´.DOC´);
DeleteFile(´C:\´+ StringReplace(
cdsOB0100.fieldbyname(´C_COD_OBRA´).AsString, ´/´, ´-´, [rfReplaceAll])+ ´.PDF´);
F_Abre_Aplicativo(s_caminho);
end;


Um abraço..


GOSTEI 0
Ataidesg

Ataidesg

23/07/2006

Grato por sua prestatividade.



Bom... segue abaixo o código de um dos meus contratos..
procedure TfrmCO21011.P_Imprime_Contrato(l_cod_proposta : string);
var v_sql : string;
v_report : TQuickRep;
v_rich : TQRRichText;
v_arquivo : boolean;
v_label_proposta, v_label_num_proposta, v_label_contrato, v_label_num_contrato, 
v_label_pagina : TQRLabel;
v_num_pagina : TQRSysData;
begin
v_sql := ´select C_CONTRATO_PROPOSTA, C_COD_PROPOSTA from PO0100 ´+
´where C_COD_PROPOSTA = ´´´+l_cod_proposta+´´´´;
F_Query(QCONTRATO, cdsContrato, v_sql, ´O´);
v_sql := ´select C_COD_OBRA from OB0100 where C_COD_PROPOSTA = ´´´+l_cod_proposta+´´´´;
F_Query(QOB0100, cdsOB0100, v_sql, ´O´);
cdsContratoC_CONTRATO_PROPOSTA.SaveToFile(´C:\´+ StringReplace(
cdsOB0100.fieldbyname(´C_COD_OBRA´).AsString, ´/´, ´-´, [rfReplaceAll])+ ´.DOC´);
v_report := TQuickRep.Create(self);
v_report.DataSet := cdsContrato;
v_report.Bands.HasDetail := True;
v_report.Bands.HasPageHeader := True;
v_report.Bands.HasPageFooter := True;
v_report.Bands.PageHeaderBand.Width := 740;
v_report.Bands.PageHeaderBand.Height := 49;
v_label_proposta := TQRLabel.Create(self);
with v_label_proposta do
begin
Caption := ´Proposta :´;
Height := 17;
Left := 544;
Top := 8;
Width := 61;
Parent := v_report.Bands.PageHeaderBand;
end;
v_label_num_proposta := TQRLabel.Create(self);
with v_label_num_proposta do
begin
Caption := cdsContratoC_COD_PROPOSTA.AsString;
Height := 17;
Left := 616;
Top := 8;
Width := 95;
Parent := v_report.Bands.PageHeaderBand;
end;
v_label_contrato := TQRLabel.Create(self);
with v_label_contrato do
begin
Caption := ´Contrato  :´;
Height := 17;
Left := 544;
Top := 26;
Width := 61;
Parent := v_report.Bands.PageHeaderBand;
end;
v_label_num_contrato := TQRLabel.Create(self);
with v_label_num_contrato do
begin
Caption := cdsOB0100.fieldbyname(´C_COD_OBRA´).AsString;
Height := 17;
Left := 616;
Top := 26;
Width := 95;
Parent := v_report.Bands.PageHeaderBand;
end;
v_report.Bands.PageFooterBand.Width := 740;
v_report.Bands.PageFooterBand.Height := 32;
v_label_pagina := TQRLabel.Create(self);
with v_label_pagina do
begin
Caption := ´Página - ´;
Height := 17;
Left := 319;
Top := 8;
Width := 53;
Parent := v_report.Bands.PageFooterBand;
end;
v_num_pagina := TQRSysData.Create(self);
with v_num_pagina do
begin
Data := qrsPageNumber;
Height := 17;
Left := 375;
Top := 8;
AutoSize := True;
Parent := v_report.Bands.PageFooterBand;
end;
v_report.Bands.DetailBand.Width := 740;
v_report.Bands.DetailBand.Height := 897;
v_report.Bands.DetailBand.ForceNewPage := True;
v_report.ShowProgress := False;
v_rich := TQRRichText.Create(Self);
v_rich.Parent := v_report.Bands.DetailBand;
v_rich.AutoStretch := True;
v_rich.Width := 740;
v_rich.Height := 897;
v_rich.Lines.LoadFromFile(´C:\´+ StringReplace(
cdsOB0100.fieldbyname(´C_COD_OBRA´).AsString, ´/´, ´-´, [rfReplaceAll])+ ´.DOC´);
v_report.ExportToFilter(TQRPDFDocumentFilter.Create(´C:\´+ StringReplace(
cdsOB0100.fieldbyname(´C_COD_OBRA´).AsString, ´/´, ´-´, [rfReplaceAll])+ ´.PDF´));
Application.CreateForm(TfrmCO21014, frmCO21014);
frmCO21014.ShowModal;
s_caminho := frmCO21014.dtvCaminho.Directory + 
Trim(frmCO21014.lblNomeArquivo.Caption);
frmCO21014.Release;
v_arquivo := True;
while v_arquivo do
begin
if ´C:\´+ StringReplace(
cdsOB0100.fieldbyname(´C_COD_OBRA´).AsString, ´/´, ´-´, [rfReplaceAll])+ ´.PDF´ = 
s_caminho then
begin
MessageDlg(´É necessário selecionar outro caminho para o arquivo .PDF´,
mterror, [mbOk], 0);
Application.CreateForm(TfrmCO21014, frmCO21014);
frmCO21014.ShowModal;
s_caminho := frmCO21014.dtvCaminho.Directory;
frmCO21014.Release;
end
else
begin
v_arquivo := False;
end;
end;
v_rich.Free;
v_label_proposta.Free;
v_label_num_proposta.Free;
v_label_contrato.Free;
v_label_num_contrato.Free;
v_label_pagina.Free;
v_num_pagina.Free;
v_report.Free;
DeleteFile(´C:\´+ StringReplace(
cdsOB0100.fieldbyname(´C_COD_OBRA´).AsString, ´/´, ´-´, [rfReplaceAll])+ ´.DOC´);
DeleteFile(´C:\´+ StringReplace(
cdsOB0100.fieldbyname(´C_COD_OBRA´).AsString, ´/´, ´-´, [rfReplaceAll])+ ´.PDF´);
F_Abre_Aplicativo(s_caminho);
end;
Um abraço..



GOSTEI 0
Cabelo

Cabelo

23/07/2006

Sempre que precisar... pode contar..

se eu puder te ajudar... o farei...

um abraço.


GOSTEI 0
POSTAR