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
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 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 !