![]() |
Crear Pdf con pulsar un botón
He seguido (creo) todos y cada uno de los hilos relacionados en el foro con el tema de creación de archivos pdf de manera transparente al usuario.
Veo que algunos son del 2004 y de esa antigüedad. La verdad es que he visto el PDFCreator, pero este trabaja desde un fichero precreado que crea despues el pdf y desde una llamada tipo prompt. He leido también que existen componentes de pago, pero no es ese el caso. He probado también con la configuración de Adobe Acrobat 9 Standard, consiguiendo imprimir a un directorio por defecto siempre, con una sóla ventana de muestra del progreso, pero no acierto a darle nombre al fichero pdf que me crea y me lo guarda con el nombre ".pdf", además de dejarme una ventana molestamente abierta con una barra de progreso que nunca acaba de completarse a pesar de que la operación termina. ¿Alguien me puede ayudar y decirme como puedo imprimir a pdf dándole nombre al fichero y ruta de destino desde programa de manera que el usuario pulse un botón, vea una barra de progreso y punto?. Un ejemplo, una configuración, un componente gratis milagroso, algo. En fin, gracias por vuestra ayuda. :o |
Hola, no se con que trabajas, con rave report se puede hacer lo que pretendes, es gratis, te deja introducir la ruta, el nombre y todo lo que pides, no se si te trastoca mucho los planes, ya me contarás.
Saludos. |
Cita:
Pero lo hago a escapre y sobre marmol si es así como se puede hacer.:D ¿Lo debo pasar a Rave Report? ¿Que se instala en las palateas de los componetes de Delphi?. Gracias. |
Hola
Se puede usar PDFCreator que lo que hace es hacer una impresora virtual. Una vez que la instalas tienes dos opciones: 1- Antes de imprimir el reporte buscar esta impresora (en el previw) e imprimir. 2- Hacer que el programa busque la impresora, imprima y coloque la que tenia otra vez. Saludos |
Cita:
Ahora ya me marcho a mi casa a jugar con mi niño que no lo he visto desde las 8:00 AM, mañana seguiré perdiendo el tiempo trabajando. :D Iré por la línea de investigación del Rave Report que me indicó el compañero Dioni, a ver que saco. Con lo que tenga lo publico como siempre. |
Hola
Imprime directamente del QReport. Aqui esta el link del PDFCreator, instalalo y lo veras, es muy sencillo. Saludos |
Yo uso este código con Builder 5 y QuickReport 3:
Código:
TQRPDFDocumentFilter *filtro = new TQRPDFDocumentFilter(cInforme); |
Hola,
conforme lo que te dice Caral de una impresora virtual en PDF (yo utilizo DoPdf) podrías utilizar el siguiente código.
Saludos. |
Ya se que no viene a cuento, ya que lo gratis es lo que buscamos todos. Pero el Quick Report, por pocos euros/dolares (si lo registras), además de proporcionarte los fuentes, te proporciona también un montón de units de exportación, entre las que se ecuentra la exportación a PDF.
Un saludo |
Cita:
En diners torrons!!! diuen al meu poble :D:D Con dinero, turrones!!! dicen en mi pueblo. :D:D Bueno hoy no he podido trabajar mucho, pero lo poco que he hecho es alrededor de lo que me indica Caral. Hasta ahora ya he capturado la impresora por defecto y asignado el PDFCreator en el momento de la creación del pdf para después volver a reponer la impresora por defecto tal como estaba. Estoy ahora en como configurar el PDFCreator con lenguaje Delphi para ponerlo con Autosalvado a directorio automáticamente en formato pdf y asignándole nombre al fichero desde programa. Tan pronto lo tenga, lo publicaré con todo lujo de detalles y explicado, para como siempre este hilo sea: inicio: problema, desarrollo: evolución + estudio, y por último resolución: código que soluciona el problema inicial. :rolleyes: |
Uff, bueno estoy con esto y no me crea los pdf en el directorio que deseo.
Creo que el fallo estriba en mi desconocimiento alrededor de los comando del OLEObjeto creado para el PDFCreator. ¿Me podrías, quien controle, revisar a ver si me olvido de algo?. Gracias.
Gracias. :p |
Estoy encontrando código, aunque en VB, que trata este mismo tema y veo que intercalan líneas de código en algunos puntos que hacen sleep al sistema.
¿Será que debo esperar un determinado tiempo antes de hacer algo y después de hacer algún paso?. Por ejemplo encuentro que después de limpiar caches, capturar impresora,..... Lo he probado, pero aún así no me imprime, ni crea pdf alguno. Si me funciona si establezco los controles desde las opciones de menú del PDFCreator (aunque no le puedo dar el nombre de fichero deseado, ya que me pone la fecha como nombre con un formato de yyyymmddhhmmss.pdf), pero establecerlas desde código, sigo igual de atascado. |
A mi tu código me funciona bien si quito la línea:
que, según la documentación, lo que hace es precisamente impedir que se procesen los documentos: Cita:
// Saludos |
Cita:
Gracias Roman. |
Desgraciadamente no lo había entendido mal.
Lo que proporciona la ejecución de la instrucción: es la NO ejecución del PDFCreator mostrando la ventana para la introducción de datos del propio programa, lo cual es lo que intentamos evitar. Intentamos o intento precisamente hacer esa configuración desde código sin mostrar ventana alguna. Aún así gracias Roman. |
A mi la ventana me aparece de todas formas, pero el caso es que yo he podido imprimir tal como tú quieres, es decir, generando el archivo sin intervención del usuario, con tu mismo código, omitiendo la línea en cuestión.
// Saludos |
Trabajo con Delphi 6, y el S.O: Windows 7 Profesional de 32 bits.
¿Te importaría enviarme el código completo de tu prueba?. No consigo hacerlo funcionar. ES para comprobar carga de las uses, etc y ver si me faltase alguna respecto de tí, aunque no me de error de compilación, quizá no funcione el OLEObject que se crea, porque viendo la cola de impresión del PDFCreator, no se ve aparecer tampoco en ningún momento trabajo alguno. |
Hola,
Observando con más detalle, veo que me he equivocado. Veamos, no hay que quitar la línea que comento sino sólo su parámetro. Si no se llama al método cStart, el PdfCreator no hace nada de nada. Aquí un ejemplo de código que me ha funcionado:
Observa que no es necesario guardar las opciones anteriores y restablecerlas después ya que no uso el método cSaveOptions. // Saludos |
Gracias Román. No me quito el sombrero porque no llebo.
Simple, sencillo, eficaz y eficiente. Al final lo hemos conseguido, tal como lo deseamos. No tengo ni que poner una sóla coma a tu código. Sólo faltaría "almibararlo". Después de estar varios días lidiando con el código, probando cosas "a palos de ciego", visitar mil webs con casi siempre el mismo ejemplo Cute/Paste, preguntar en este foro, atender a todos los que me habéis ayudado, al final lo hemos conseguido. He de confesar que pensé en dejarlo. Gracias sobre todo a Román, ElKurgan, Eldioni, Caral y a todos aquellos que habéis podido aportar para solucionar este tema, que entre otras cosas aún no estaba expuesto en este inestimable foro de ayuda y compartición del conocimiento, ni tampoco en la página de Trucomania. Hasta la próxima, que seguro será otro reto quizá más complicado e inóspito. Lo que echo de menos es un lugar donde encontrar documentación sobre los métodos del OleObject creado con nombre PDFCreator. :D Cerramos hilo. |
Me queda una cosa por depurar, que al no controlar los métodos de que dispone el OLEObject "PDFCreator", no se controlar.
Al parecer, al crear el primer informe en formato pdf con el anterior código visto en las anteriores respuestas, se crea el objeto PDFCReator y se lanza el proceso llamado del mismo nombre (el cual veo en los procesos desde el administrador de tareas del sistema operativo). La primera creación del pdf se realiza perfectamente, pero veo que la instrucción ... ... no elimina o mata el proceso, por lo que al intentar crear otro informe en pdf, no funciona. Si salgo de la aplicación (con lo que se mata el proceso PdfCReator), o bien mato al proceso manualmente sin salir de la aplicación, siempre funciona la creación de informes en pdf. He probado con la instrucción: Que aunque compila, al ejecutarla dá error. ¿Alguien me puede decir como matar al proceso del PDFCreator desde código? Pienso que debe ser un método del objeto del tipo PDFCReator.CKill, o PDFCReator.CQuit, pero no acierto a matar ese proceso sin cerrar el programa. Gracias. :o |
La franja horaria es GMT +2. Ahora son las 12:37:03. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi