Ver Mensaje Individual
  #2  
Antiguo 05-07-2023
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Reputación: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Puede servir algo así?
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  RichEdit: TRichEdit;
  HTMLDocument: IHTMLDocument2;
  PrintRange: TFormatRange;
  PrinterHandle: HDC;
  FileName: string;
  FileStream: TFileStream;
begin
  RichEdit := TRichEdit.Create(Self);
  try
    RichEdit.Visible := False;
    RichEdit.Parent := Self; // Puedes ajustar esto según tu formulario o diseño.

    // Obtener el documento HTML del WebBrowser.
    HTMLDocument := (WebBrowser1.Document as IHTMLDocument2);

    // Copiar el contenido del documento HTML al RichEdit.
    RichEdit.PlainText := True;
    RichEdit.Lines.Text := HTMLDocument.body.innerHTML;

    // Imprimir el contenido del RichEdit en un archivo PDF.
    FileName := 'C:\ruta\archivo.pdf';
    FileStream := TFileStream.Create(FileName, fmCreate);
    try
      Printer.PrinterIndex := Printer.PrinterIndex; // Configurar la impresora actual.
      Printer.Title := FileName;
      Printer.BeginDoc;

      PrinterHandle := Printer.Canvas.Handle;
      FillChar(PrintRange, SizeOf(PrintRange), 0);
      PrintRange.hdc := PrinterHandle;
      PrintRange.hdcTarget := PrinterHandle;
      PrintRange.rc := Rect(0, 0,
        Printer.PageWidth * Printer.PixelsPerInch div 1440,
        Printer.PageHeight * Printer.PixelsPerInch div 1440);
      PrintRange.rcPage := PrintRange.rc;
      PrintRange.chrg.cpMax := -1;

      SendMessage(RichEdit.Handle, EM_FORMATRANGE, 1, Longint(@PrintRange));
      SendMessage(RichEdit.Handle, EM_FORMATRANGE, 0, 0);

      Printer.EndDoc;
    finally
      FileStream.Free;
    end;
  finally
    RichEdit.Free;
  end;
end;
Responder Con Cita