01.Blogs :
mauriciogonzatto  
.NET, C#, Oracle, Web, tecnologia em geral e diversidades.

Convertendo HTML em PDF

Finalmente, depois de muito suar a camisa, nessa batalha com o pré-histórico Delphi 5, consegui algo q me satisfez.

O Componente chama-se Document Creator e pode ser utilizado para outras linguagens além do Delphi. Como fazer o processo?

-Instale o componente, o executável, atente que ele deve estar instalado nas máquinas em que o software que irá fazer a conversão. Pois ele emula uma impressora q imprime em arquivo.

- Após instalado, no diretório padrão da intalação C:/Arquivos de Programas/Neevia.com/document creator vai ser descarregada uma dll docCreator.dll.
Abra o Delphi 5, vá no menu Project/Instal type library e instale a dll;

- Adicione o componente ao formulário, ou faça a referência.

- Como o .exe deve estar instalado em todas as máquinas que fazem uso da funcionalidade, devemos jogar o arquivo cr.exe em algum lugar da rede que possa ser acessado. a partir daí tem que ver como executar o programa sem q o usuário perceba ou o mais muquiado possível;

- No Delphi para executar outro programa, temos a função ShellExecute, adicione na cláusula USES a seguinte API, shellapi.

var
Erro : Integer;

...

Erro := ShellExecute( Application.Handle, 'open', PChar ( ExtractFileDir(Application.ExeName) + '\cr.exe' ),PChar( '/VERYSILENT /user="MAURICIO" /company="ROBERTO" /serial="B1A86829A183JA31DH"' ), Nil, SW_NORMAL);

Essa instalação está com os parâmetros de execução para que a instalação não seja vista pelo usuário, e os parâmetros de licença já foram devidamente crackeados...hehehehe  ;-)

function ConverteHtmlPdf(Arquivo, NUPED:string):string;
var
  DC,
  IE            : Variant;
  RVal          : Integer;
  docToConvert,
  resultado,
  defPrinter    : String;
begin
   // Documento a ser convertido
   docToConvert := Arquivo;

   try
      DC := CreateOleObject('docCreator.docCreatorClass');
      DC.DocumentOutputFormat:= 'PDF';
      DC.DocumentResolution:= 300;
      // Nome do documento de saída
      DC.DocumentOutputName:= 'P' + NUPED;
      // Endereço de saída
      DC.DocumentOutputFolder:= RelInfo.Localtmp;
      RVal:= DC.StartPrinting;

      defPrinter:= DC.GetDefaultPrinter;
      If (RVal <> 0) Then
      begin
         ShowMessage('Erro na chamada do método StartPrinting!!!');
         exit
      end;

      try
         IE:= CreateOleObject('InternetExplorer.Application');
         DC.doSleep(100);
         IE.Visible:=false;
         IE.navigate2(docToConvert);

         While (IE.ReadyState<>4) or (IE.Busy) do
         begin
            DC.doSleep(100);
            Application.ProcessMessages;
         end;

         DC.SetDefaultPrinter(DC.NewPrinterName);
         IE.ExecWB(6,2,emptyparam,emptyparam);

         RVal := DC.Create; // Cria documento de saída
         IE.Quit; // finaliza InternetExplorer

         If (RVal <> 0) Then
            ShowMessage('Erro ao criar documento!!! Código: ' + IntToStr(RVal) )

         else
            //ShowMessage('Documento html convertido para pdf!!!');
            DC.SetDefaultPrinter(defPrinter);
            resultado := RelInfo.Localtmp + 'P216739' + '.pdf';
         except
            on E: Exception do
               ShowMessage(E.Message);
         end
         finally
            RVal:= DC.StopPrinting;

         //if (RVal <> 0) Then ShowMessage('Erro ao chamar o método StopPrinting!!');

         DC:= Unassigned;
         IE:= Unassigned;
   end;
   Result := resultado;
end;


Basicamente isso aí hehehe, o mais difícil foi achar o componente e legalizar... :) e viva o SoftwareLivre!

Mas como eu já tinha dito em post anterior, isso é responsabilidade da ADOBE, ela deveria ter uma API pra conversão...como não tem, um abraço!

[]'s

posted on Monday, July 24, 2006 7:11 AM by mauriciogonzatto


 
03.UPDATE CALENDAR :
<July 2006>
SunMonTueWedThuFriSat
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

05.MY LINKS :

07.Subscriptions :

Subscriptions


© Copyright 2005 Microsoft Corporation. All Rights Reserved.
Terms of Use | Privacy Statement | Code of Conduct | Hosted by MaximumASP for Microsoft
WHO-BAR