Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Impresion a PDF (https://www.clubdelphi.com/foros/showthread.php?t=71777)

roman 12-01-2011 19:21:51

Cita:

Empezado por Neftali (Mensaje 387318)
No se si ahora ha quedado más claro... :o

Me parece que sí. Aunque, supongo, sería mejor crear un perfil ad hoc para la aplicación en cuestión y así no afectar la conversión-impresión predeterminada.

// Saludos

Neftali [Germán.Estévez] 13-01-2011 11:04:28

Cita:

Empezado por roman (Mensaje 387341)
Aunque, supongo, sería mejor crear un perfil ad hoc para la aplicación en cuestión y así no afectar la conversión-impresión predeterminada.

Correcto, pero lo que ya no se es cómo enviarías la impresión modificando el perfil PREDETERMINADO. Cuando Desde Delphi haces, por decir algo, un:

Código Delphi [-]
   RichEdit.Print;

No tienes opción de cambiar el perfil. Si cuando trabajas en el otro modo (enviar un fichero ya existente en disco) porque lo haces utilizando línea de comandos.

En este caso una opción sencilla es tener 2 instancias del programa, 2 impresoras. Y utilizar una para generar PDF's; Por ejemplo que siempre se generan en R:\out.pdf.

juanelo 18-01-2011 00:26:55

Agradezco a todos los que amablemente respondieron este hilo, al final les digo que termine usando los filtros de QReport, claro, limitando al formato o diseño del mismo, es decir, no se es permitido usar "shapes" rectangulares, lo cual dicho sea de paso solo representa mas trabajo de construccion del reporte.
No es lo mejor, pero debido al tiempo y el coste del proyecto creo fue la mejor solucion, aunque sigo en busca de un buen componente para hacer la exportacion. El cual si encuentro tengan por seguro que uds seran los segundos en saberlo.
Muchas gracias de nuevo.
Juanelo.

nnebli 07-10-2014 22:19:13

Obtener un archivo en PDF sin que nos pida el nombre del archivo
 
Buenas noches.

Estoy buscando información de como guardar un archivo PDF sin que me pregunte el nombre del archivo, de tal forma que yo se lo pase y lo guarde directamente, o que se cree el PDF con un nombre por defecto y yo lo cambie después.

Actualmente hago lo siguiente:

1) Creo directamente en el Cavas lo que quiero tener en PDF

2) Lo envío en la impresora en PDF que previamente he seleccionado entre las que tengo instaladas

3) Cuando lo va a imprimir en PDF me pide el nombre del archivo y al dar el nombre del archivo y hacer click en guardar ya tengo el documento PDF.


Lo que quiero es que el paso 3) se lo salte porque yo le pase el nombre del archivo o que lo guarde con un nombre por defecto y luego yo lo cambie. Prefiero la primera opción, pero la segunda también me valdría.

Creo que lo que comenta Neftalí es una de las dos opciones que has indicado, pero en mi caso sería imprimiendo el Cavas en PDF.

Me puede alguien decir como obtener el archivo en PDF imprimiendo directamente sobre el Canvas sin que me pida el nombre del archivo.

Disculpad si me repito en lo que habéis explicado, pero no 'controlo' mucho este tema.

Gracias anticipadas a quien me pueda ayudar.

Saludos.

Neftali [Germán.Estévez] 08-10-2014 10:16:45

En mi caso, tal y como he dicho aquí lo he realizado utilizando un perfil personalizado. En ese caso especificas las opciones y no te pide el nombre del archivo.

nnebli 08-10-2014 22:52:57

Buenas noches.

Según comentas, conviertes un fichero de tipo txt a PDF y con la configuración que indicas no hace falta darle el nombre del fichero. En mi caso creo no es lo mismo, yo voy escribiendo en el cavas y una vez que he terminado, al cerrar el documento con 'EndDoc' te pide el nombre del archivo (saliendo por defecto el que lleva como título el documento que se está imprimiendo) y al darle a guardar, se guarda, y ya está creado el documento pdf. Como es natural, tenemos que haber seleccionado previamente que la impresora es la que indica PDF.

Lo que no entiendo de lo que comentas, es como crear lo del perfil personalizado, no se si eso es para PdfCreator o si sirve para cualquier conversor de PDF. En mi caso me pone que se trata de Adobe Acrobat.

Te agradecería tus comentarios.


A continuación pongo un pequeño ejemplo de lo que hago:

Código Delphi [-]
 
Procedure EjemploParaImprimirEnElCanvas;
Begin
 
// trabaja con la Impresora
With Printer Do
Begin
 
Title := 'Titulo del documento';
 
BeginDoc;
 
// trabaja con el Canvas ( la superficie donde se va imprimiendo ) de la Impresora
With Canvas Do
Begin
 
// fija el tipo de letra elegido
Font.Name := 'Courier New'; // TipoDeLetraElegido;
 
// fija las unidades de trabajo a milímetros
SetMapMode(Printer.Handle,MM_LOMETRIC);
 
// imprimimos en el Canvas el texto indicado
TextOut(45,-70,'ESTO ES UNA PRUEBA');
 
End;
// fin de: trabaja con el Canvas ( la superficie donde se va imprimiendo ) de la Impresora
 
// termina el documento
EndDoc
 
End;
// fin de: trabaja con la Impresora
 
End;

newtron 09-10-2014 09:25:01

Cita:

Empezado por nnebli (Mensaje 482670)
guiente:

1) Creo directamente en el Cavas lo que quiero tener en PDF

2) Lo envío en la impresora en PDF que previamente he seleccionado entre las que tengo instaladas

3) Cuando lo va a imprimir en PDF me pide el nombre del archivo y al dar el nombre del archivo y hacer click en guardar ya tengo el documento PDF.

y digo yo.... ya que usas el canvas para generar el impreso ¿por qué no utilizas algún componente pdf y generas directamente el pdf sin tener que usar una impresora virtual?.

Saludos

Neftali [Germán.Estévez] 09-10-2014 10:06:55

La idea de las impresoras virtuales (entre ellas PDFCreator, que es de la que hablábamos), es que sirven para cuialquier cosa que imprimas y de cualquier forma. Da igual que imprimas desde word, desde un generador de reports, o desde canvas directamente. Cuando envía a la impresora PDF, habituamente te sale un cuadro de dialogo para seleccionar algunas opciones; Entre ellas una de la más importante es el nombre de fichero.

Lo que comento de crear un perfil, es que utilizando un fichero de configuración (fichero de perfil) puedes hacer que este cuadro de diálogo no aparezca, de forma que desde el programa sólo tienes que seleccionar la impresora "PDF" y enviar la impresión. Si lo configuras en el perfil se generará el PDF de forma automática sin intervención del usuario.

newtron 09-10-2014 10:36:45

Cita:

Empezado por Neftali (Mensaje 482796)
La idea de las impresoras virtuales (entre ellas PDFCreator, que es de la que hablábamos), es que sirven para cuialquier cosa que imprimas y de cualquier forma. Da igual que imprimas desde word, desde un generador de reports, o desde canvas directamente. Cuando envía a la impresora PDF, habituamente te sale un cuadro de dialogo para seleccionar algunas opciones; Entre ellas una de la más importante es el nombre de fichero.

Lo que comento de crear un perfil, es que utilizando un fichero de configuración (fichero de perfil) puedes hacer que este cuadro de diálogo no aparezca, de forma que desde el programa sólo tienes que seleccionar la impresora "PDF" y enviar la impresión. Si lo configuras en el perfil se generará el PDF de forma automática sin intervención del usuario.

Si todo eso lo entiendo, lo que yo digo es que si imprime en el canvas, con un cambio fácil puede imprimir en el canvas de un componente pdf y se ahorra el instalar impresoras pdfs que es lo que yo hago.

Neftali [Germán.Estévez] 09-10-2014 11:15:48

Cita:

Empezado por newtron (Mensaje 482797)
...lo que yo digo es que si imprime en el canvas, con un cambio fácil puede imprimir en el canvas de un componente pdf y se ahorra el instalar impresoras pdfs que es lo que yo hago.

Totalmente de acuerdo.
Mi comentario iba en referencia a esto que ha comentado él.


Cita:

Empezado por nnebli (Mensaje 482785)
...yo voy escribiendo en el cavas y una vez que he terminado, al cerrar el documento con 'EndDoc' te pide el nombre del archivo (saliendo por defecto el que lleva como título el documento que se está imprimiendo) y al darle a guardar, se guarda, y ya está creado el documento pdf. Como es natural, tenemos que haber seleccionado previamente que la impresora es la que indica PDF.


nnebli 09-10-2014 17:28:45

Newtron comentó:
------------------
y digo yo.... ya que usas el canvas para generar el impreso ¿por qué no utilizas algún componente pdf y generas directamente el pdf sin tener que usar una impresora virtual?.

Saludos

fin comentario de: Newtron
--------------------------


Buenas tardes.

Gracias Newtron por unirte a los comentarios que siempre son de agradecer.

El problema de cambiar lo que hay hecho actualmente, es que el desarrollo ya está hecho y en su día, cuando me propuse que en lugar de salir la información en papel saliese a un archivo tipo PDF, lo desarrollé como lo tengo actualmente. Cambiarlo, aunque pueda parecer sencillo, creo que a primera vista es muy complicado para mí, por dos cosas: La principal que no tengo tiempo ni de rascarme y la segunda es que tendría que volver a realizar algo que posiblemente con algún fichero de configuración inicial o algo parecido, como dice Neftalí, se podría solucionar.

El programa donde está este módulo de impresión, llevo desarrollándolo posiblemente más de 25 años (no se si te sonará el Amstrad de 64 K que tenía una disquetera junto al teclado a la derecha de éste, con ese comenzó el programa y desde entonces se ha ido mejorando y poniendo cosas nuevas. En un determinado momento lo migré de Pascal a Delphi 3.0 y luego a Delphi 7). La unidad que se encarga de imprimir los distintos documentos según un formato concreto que se tienen que imprimir, ocupa más de 32.000 líneas, sólo esta unidad, porque después hay unidades para otras muchas cosas.

Sin ánímo de enrollarme más, , estoy comentando esto para hacer ver lo complicado que me resultaría cambiar todo el tema de la impresión

Lo que estoy buscando es algo sencillo, archivo de configuraicón o algo parecido que permita crear el PDF cogiendo el nombre del archivo que yo le paso por código, amoldándome a lo que ya hay hecho.

Lo que comentas Newtron de no tener que utilizar el cavas parece muy interesante, pero me imagino que tendría que resapar toda esa cantidad de líneas que tengo de código e ir cambiando lo que corresponda. Si es eso así, aunque la idea parece muy buena, en este momento no dispongo del tiempo que se necesitaría para hacer esto.

Hay alguien que se le ocurra algo sencillo que funcione con la forma de trabajar que comenté anteriormente y que me pueda ayudar.

Gracias anticipadas.

newtron 09-10-2014 18:40:47

A ver....

O yo no me entero o tú no entiendes lo que te digo. Intentaré explicarme con un ejemplo. Esto que te pongo a continuación es usando un componente que se llama RolePDF y que se maneja exactamente igual que el objeto printer con lo que todo, o casi todo, tu código te serviría, solo que tendrías que iniciar el canvas con este componente.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
PDF: TrolePDF;
begin
  PDF:=TrolePDF.Create(nil);
  PDF.BeginDoc ;
  PDF.FileName := 'PRUEBA.PDF';
  PDF.AutoLaunch := True;
  PDF.BeginDoc ;

  SetBKMode(PDF.Canvas.Handle, TRANSPARENT);
  PDF.Canvas.Brush.Color := 16777215;
  PDF.Canvas.Brush.Style := bsSolid;
  PDF.Canvas.Pen.Style := psSolid;
  PDF.Canvas.Pen.Width := 1;
  PDF.Canvas.Pen.Color := 0;

  PDF.Canvas.FillRect(Rect(144,114,211,179));
  PDF.Canvas.Rectangle(144,114,211,179);

  PDF.Canvas.Brush.Color := 9868950;
  PDF.Canvas.FillRect(Rect(227,114,294,179));
  PDF.Canvas.Rectangle(227,114,294,179);

  PDF.Canvas.Brush.Color := 16777215;
  PDF.Canvas.FillRect(Rect(310,114,377,179));
  PDF.Canvas.Rectangle(310,114,377,179);

  PDF.EndDoc ;
  PDF.Free;

end;

Este ejemplo lo que hace es crear tres cuadros rellenos y ejecutar el visor de pdf para abrirlo de forma automática.

No sé si esto resuelve tu duda.
Saludos

nnebli 09-10-2014 22:24:54

Gracias Newton por tu respuesta.

El problema, como ya comenté antes, es que mis conocimientos son mucho más reducidos que los vuestros, y entonces hay cosas que comentáis que no sé por donde cogerlas.

Con el ejemplo que has puesto ha quedado todo más claro.

Si además dices que posiblemente no haya que cambiar casi código, mejor todavía.

Intentaré probarlo lo antes posible y si veo que vale la pena, haré los cambios necesarios para trabajar como indicas tú a la hora de crear los PDF.

Gracias y un saludo.


La franja horaria es GMT +2. Ahora son las 03:20:21.

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