Forum > Spanish
[Resuelto] Márgenes en componente TRichmemo
(1/1)
rretamar:
Hola colegas usuarios de Lazarus.
Tengo la siguiente cuestión con el componente TRichmemo: cuando quiero guardar el contenido a un archivo .rtf el documento tiene un margen alrededor de 1 pulgada, que es demasiado, pero no encuentro la manera dentro del componente de configurar los márgenes. Se que el formato lo admite, porque si abro ese documento o creo uno nuevo con el todopoderoso LibreOffice, puedo configurar los márgenes (inferior, superior, derecho, izquierdo) sin problemas.
Si no puedo resolverlo con alguna propiedad, la única opción que me quedaría es insertar dentro del documento los tags de rtf con los valores de los márgenes antes de guardar a un archivo.
Saludos.
skalogryz:
--- Quote from: rretamar on October 05, 2023, 07:05:53 pm ---Si no puedo resolverlo con alguna propiedad, la única opción que me quedaría es insertar dentro del documento los tags de rtf con los valores de los márgenes antes de guardar a un archivo.
--- End quote ---
RichMemo no ofrece muchas posibilidades para formatear el texto para el diseño en papel.
Entonces usted tiene que insertar los tags.
Tal vez quiere a probar https://wiki.freepascal.org/KControls (KMemo) tambien.
rretamar:
Gracias por la respuesta. Estuve revisando el componente TKmemo pero a la hora de mostrar los RTF (que tienen cierta complejidad en el contenido, no son sólo texto) tengo ciertos elementos que no se ven correctamente y en el Richmemo sí. Al final lo solucioné agregando las marcas con los valores de los márgenes dentro del contenido del rtf ants de guardar el documento, y funcionó perfecto, por ejemplo un valor de 300 "twips" para los 4 márgenes lo hago insertando estas marcas:
\margl300\margr300\margt300\margb300
Me ayudó mucho el libro online "The RTF Cookbook":
https://metacpan.org/dist/RTF-Writer/view/lib/RTF/Cookbook.pod#Document_Formatting
Ya voy a armar un post explicando cómo convertir ese RTF em PDF usando LibreOffice desde la línea de comandos.
Saludos y gracias.
paweld:
Una vez que necesité convertir a PDF, lo resolví de la siguiente manera:
--- Code: Pascal [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---uses Process, LCLIntf; procedure TForm1.Button1Click(Sender: TObject);var pkon: TProcess; lopath: String;begin if not OpenDialog1.Execute then exit; lopath := 'C:\Program Files\LibreOffice\program\soffice.exe'; if not FileExists(lopath) then begin ShowMessage('Enter the path to LibreOffice executable (soffice.exe)'); exit; end; if (LowerCase(ExtractFileExt(Opendialog1.FileName)) <> '.rtf') and (LowerCase(ExtractFileExt(Opendialog1.FileName)) <> '.doc') and (LowerCase(ExtractFileExt(Opendialog1.FileName)) <> '.odt') then begin ShowMessage('Select correct file type'); exit; end; if FileExists(ChangeFileExt(Opendialog1.FileName, '.pdf')) then begin ShowMessage('PDF file with that name already exists!'); exit; end; pkon := TProcess.Create(nil); pkon.Options := pkon.Options + [poWaitOnExit]; pkon.Executable := lopath; //path to LO pkon.Parameters.Add('--convert-to'); pkon.Parameters.Add('pdf'); pkon.Parameters.Add('--outdir'); pkon.Parameters.Add(ExcludeTrailingPathDelimiter(ExtractFilePath(OpenDialog1.FileName))); //path to save pdf pkon.Parameters.Add(Opendialog1.FileName); pkon.Execute; pkon.Free; if FileExists(ChangeFileExt(Opendialog1.FileName, '.pdf')) then OpenDocument(ChangeFileExt(Opendialog1.FileName, '.pdf')) else ShowMessage('Failed to convert file');end;
rretamar:
Gracias colega, mi código es muy similar, "sucio y desprolijo" :)
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 := 'C:\Program Files\LibreOffice\program\soffice.exe';
//
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;
Saludos !
Navigation
[0] Message Index