Club Delphi  
    Paypal   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 13-12-2025
LDD LDD is offline
Miembro
 
Registrado: ago 2003
Posts: 57
Poder: 23
LDD Va por buen camino
Imprimir en "Microsoft to PDF" pasando nombre del archivo

Hola, tengo mi propio sistema de impresión que imprime en el canvas de la impresora que se haya elegido.
Necesito generar el PDF de las facturas que imprimo pero sin que windows me pida el archivo de destino, quiero definirlo antes de imprimir.

¿Se puede hacer?
Responder Con Cita
  #2  
Antiguo 13-12-2025
Garada Garada is offline
Miembro
 
Registrado: jul 2004
Posts: 90
Poder: 22
Garada Va por buen camino
En mis notas tengo esto:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
    PrtIndex   : Integer;
    DeviceMode : THandle;
    Device,
    Driver,
    Port       : array [0..255] of Char;
begin
    // Warning: The printer name is case sensitive
    PrtIndex := Printer.Printers.IndexOf('Microsoft Print to PDF');
    if PrtIndex < 0 then
        raise Exception.Create('Printer not found');
    Printer.PrinterIndex := PrtIndex;
    Printer.GetPrinter(Device, Driver, Port, DeviceMode);
    Printer.SetPrinter(Device, Driver, 'C:\Temp\TestPrintToPdf.pdf', 0);
    Printer.BeginDoc;
    Printer.Canvas.TextOut(100, 100, 'Hello World');
    Printer.EndDoc;
end;

Desde //stackoverflow.com/questions/64063302/set-default-folder-when-print-to-a-pdf-file>
Responder Con Cita
  #3  
Antiguo 13-12-2025
LDD LDD is offline
Miembro
 
Registrado: ago 2003
Posts: 57
Poder: 23
LDD Va por buen camino
Perfecto, gracias

Muy bien, muchas gracias. Funciona a la perfección

Sólo he tenido que hacer un ajuste.
Si le paso el nombre del fichero en una variable (vNombrePDF) la he de convertir a pWIDECHAR

Printer.SetPrinter(Device, Driver, pWideChar(vNombrePDF), 0);
Responder Con Cita
  #4  
Antiguo 14-12-2025
Avatar de seccion_31
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 472
Poder: 10
seccion_31 Va por buen camino
Para otras aplicaciones desde Impresoras, conectas el microsoft print pdf a un puerto local, donde indicas la ruta completa y el nombre de un archivo.pdf por ejemplo c:\mispdfs\archivo.pdf y listo.
Responder Con Cita
  #5  
Antiguo 15-12-2025
LDD LDD is offline
Miembro
 
Registrado: ago 2003
Posts: 57
Poder: 23
LDD Va por buen camino
Unhappy Gracias pero...

Muchas gracias, pero ...

Es muy raro . En mi ordenador funciona perfectamente pero al instalar mi programa en otros ordenadores me dice "Printer is not printing"
Responder Con Cita
  #6  
Antiguo 16-12-2025
Garada Garada is offline
Miembro
 
Registrado: jul 2004
Posts: 90
Poder: 22
Garada Va por buen camino
Ni idea.

El código nunca lo había probado, es de esas cosas que me apunto cuando lo veo por si hace falta algún día. 😅

Lo he probado en Delphi 2010, he hecho las mismas adaptaciones que tú (el widechar) y funciona bien en un equipo con W11 y otro con W10.
Revisa en los otros equipos si la impresora está instalada, se llama igual, etc.
Prueba también con un código más simple, como el ejemplo, por si hay algo que cause el error en otra parte del código de tu aplicación.

El código de mi prueba, un form y un botón:
Código Delphi [-]
uses
  Printers, ShellAPI;

procedure TForm1.btn1Click(Sender: TObject);
var
  PrtIndex: Integer;
  DeviceMode: Cardinal;
  Device,
  Driver,
  Port: array [0..255] of WideChar;
  PdfFileName: string;
begin
  PdfFileName := ExtractFilePath(Application.ExeName) + 'p.pdf';

  PrtIndex := Printer.Printers.IndexOf('Microsoft Print to PDF');
  if PrtIndex < 0 then
      raise Exception.Create('Printer not found');

  Printer.PrinterIndex := PrtIndex;
  Printer.GetPrinter(Device, Driver, Port, DeviceMode);
  Printer.SetPrinter(Device, Driver, PWideChar(PdfFileName), 0);
  Printer.BeginDoc;
  Printer.Canvas.TextOut(100, 100, 'Hello World ' + DateTimeToStr(Now));
  Printer.EndDoc;

  ShellExecute(0, 'open', PWideChar(PdfFileName), nil, nil, 0);
end;
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
Microsoft "estaría considerando" una versión nativa de Office para Linux movorack Noticias 43 10-02-2013 07:27:45
"nombre de archivo inválido" Error cuando la ruta es muy larga. JuanErasmo Windows 6 21-04-2008 15:36:45
Acer ataca a Microsoft: "Toda la industria está decepcionada con Windows Vista" marcoszorrilla La Taberna 18 27-07-2007 15:28:48
Microsoft dice: "Investiguen a Google por monopolio" Neftali [Germán.Estévez] Noticias 5 17-04-2007 15:10:24
Microsoft México - invita al evento "Mentes aplicadas" Héctor Randolph Noticias 0 27-11-2006 20:08:23


La franja horaria es GMT +2. Ahora son las 14:14:12.


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