Ver Mensaje Individual
  #6  
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.055
Reputación: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
A mí me sale error porque no tengo impresora, no sé si realmente funcionará.
De todas formas cambia algunas cosas, por probar que no quede:


Código Delphi [-]
unit Unit4;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls, printers,    RichEdit,
  Vcl.OleCtrls, SHDocVw,MSHTML;

type
  TForm4 = class(TForm)
    Button1: TButton;
    RichEdit1: TRichEdit;
    WebBrowser1: TWebBrowser;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form4: TForm4;

implementation

{$R *.dfm}

procedure TForm4.Button1Click(Sender: TObject);
var
  RichEdit: TRichEdit;
  HTMLDocument: IHTMLDocument2;
  PrintRange: TFormatRange;
  PrinterHandle: HDC;
  FileName: string;
  FileStream: TFileStream;
  DPI: Integer;

begin

PrinterHandle := Printer.Canvas.Handle;
 DPI := GetDeviceCaps(PrinterHandle, LOGPIXELSX);

  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 * DPI div 1440,
        Printer.PageHeight * DPI 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;
Responder Con Cita