Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Impresión
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-10-2023
Avatar de rretamar
[rretamar] rretamar is offline
Miembro Premium
 
Registrado: ago 2006
Ubicación: San Francisco, Córdoba, Argentina
Posts: 1.168
Poder: 21
rretamar Va camino a la famarretamar Va camino a la fama
Exclamation Tip: Convertir .doc o .rtf a pdf GRATIS

Hola gente.
Hace un tiempo tuve la necesidad de convertir un archivo RTF a PDF....¿ sabían que se puede hacer muy fácilmente desde nuestra aplicación usando el todopoderoso LibreOffice, que se puede controlar desde línea de comandos ? La conversión es muy rápida e incluso a través de distintos parámetros podemos ajustar el nivel de compresión, agregarle una firma digital basada en certificado y mucho más. Y también sirve para otros formatos, como .doc de MS Word.

Este es el código "sucio y desprolijo" que usé en Lazarus.

En la prueba le especifico el trayecto del ejecutable en un campo TEdit con la cadena 'C:\Program Files\LibreOffice\program\soffice.exe' aunque puede ser mejorado con una función que lo detecte automáticamente, a través de la lectura de una entrada del registro.

La función devuelve el trayecto+nombre del archivo PDF generado, si no se pudo generar devuelve un valor nulo. Por seguridad si existiera un archivo pdf con el mismo nombre este se elimina antes de ser creado.

Código Delphi [-]
Function Rtf_a_PDF( Origen: String): String;
Var
  Ejecutable_LibreOffice, Archivo_PDF: String;
  Proceso: TProcess;
Begin
  // "C:\Program Files\LibreOffice\program\soffice.exe" --headless --invisible --norestore --convert-to pdf c:\estudios\informe.rtf
  Result := '';
  If Not fileExists( Origen ) Then Exit;
  //
  Ejecutable_LibreOffice := Form1.Edit1.Text;
  If Not FileExists( Ejecutable_LibreOffice, False) Then Exit;
  //
  Archivo_PDF := ExtractFilePath( ParamStr(0)) + ChangeFileExt( ExtractFileName( Origen),'.pdf');
  //
  If FileExists( Archivo_PDF ) Then                // Eliminar PDF temporal
    If Not DeleteFile( Archivo_PDF ) Then
      Begin
        MessageDlg('No se pudo eliminar el archivo PDF antes de crearlo:' + Archivo_PDF, mtError, [mbOK, mbCancel], 0);
        Exit;
      end;
  //
  Screen.Cursor := crHourGlass;
  //
  Proceso := TProcess.Create(nil);
  Proceso.CommandLine := Ejecutable_LibreOffice + ' --headless --invisible --norestore --convert-to pdf ' + Origen;
  Proceso.Options := Proceso.Options + [poWaitOnExit];;
  Proceso.Execute;
  Proceso.Free;
  //
  Screen.Cursor := CrDefault;
  //
  If FileExists( Archivo_PDF ) Then result := Archivo_PDF;
end;

El código funciona, aunque sí, es muy mejorable. Lo bueno es que sólo necesitamos tener LibreOFfice instalado y nada más. Aquí hay más parámetros de línea de comandos para personalizar más aún la conversión:

https://help.libreoffice.org/latest/...df_params.html

Saludos !
__________________
Lazarus Codetyphon : Desarrollo de aplicaciones Object Pascal, libre y multiplataforma.
Responder Con Cita
  #2  
Antiguo 06-10-2023
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 1.237
Poder: 20
ElKurgan Va camino a la fama
Thumbs up

Interesante. Gracias por compartir la solución

Saludos
Responder Con Cita
  #3  
Antiguo 06-10-2023
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Puedes ponerlo en el foro de Trucos.
Gracias por compartirlo.
Responder Con Cita
  #4  
Antiguo 06-10-2023
Avatar de rretamar
[rretamar] rretamar is offline
Miembro Premium
 
Registrado: ago 2006
Ubicación: San Francisco, Córdoba, Argentina
Posts: 1.168
Poder: 21
rretamar Va camino a la famarretamar Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Puedes ponerlo en el foro de Trucos.
Gracias por compartirlo.
Así lo haré, gracias.
__________________
Lazarus Codetyphon : Desarrollo de aplicaciones Object Pascal, libre y multiplataforma.
Responder Con Cita
  #5  
Antiguo 06-10-2023
Avatar de rretamar
[rretamar] rretamar is offline
Miembro Premium
 
Registrado: ago 2006
Ubicación: San Francisco, Córdoba, Argentina
Posts: 1.168
Poder: 21
rretamar Va camino a la famarretamar Va camino a la fama
Casimiro, creo que cometí un error, copié y pegué el codigo fuente pero se copió sin los saltos de línea, y no puedo editar el post de la parte de trucos para corregirlo.
__________________
Lazarus Codetyphon : Desarrollo de aplicaciones Object Pascal, libre y multiplataforma.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
FeedDemon gratis! mamcx Noticias 1 10-01-2008 17:40:37
SMS Gratis - CallWare ArdiIIa La Taberna 0 13-03-2007 22:49:53
¿ Internet Gratis ? el_barto Noticias 2 02-09-2005 16:34:21
RDBMS gratis?? amadis Conexión con bases de datos 1 18-07-2005 17:40:27
TopGrid gratis ? Capo Conexión con bases de datos 2 09-08-2004 21:56:24


La franja horaria es GMT +2. Ahora son las 01:01:24.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi