Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-08-2015
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 441
Poder: 17
shoulder Va por buen camino
Convertir archivos de imagen BMP al formato de documento PDF

Hola estoy intentando fuera del pdfcreator convertir un bmp a pdf por el codigo que encontre en esta pagina bmp2pdf.pas


http://homepage3.nifty.com/e-papy/bmp2pdf_delphi.htm

pero no encuentro como asociar un archivo dentro del programa, alguien tiene un ejemplo?.

Gracias.
Responder Con Cita
  #2  
Antiguo 15-08-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola shoulder.
Cita:
Empezado por shoulder Ver Mensaje
Hola estoy intentando fuera del pdfcreator convertir un bmp a pdf por el codigo que encontre en esta pagina bmp2pdf.pas


http://homepage3.nifty.com/e-papy/bmp2pdf_delphi.htm

pero no encuentro como asociar un archivo dentro del programa, alguien tiene un ejemplo?.
No sé si te refieres a algo así:
Código Delphi [-]
...
implementation

uses bmp2pdf;

procedure TForm1.ButtonSaveClick(Sender: TObject);
var
  sd: TSaveDialog;
begin
  sd             := SaveDialog1;
  sd.Filter      := 'Adobe Reader file|*.PDF';
  sd.DefaultExt  := 'PDF';
  sd.FilterIndex := 1;
  if sd.Execute then
    BMPtoPDF(Image1.Picture.Bitmap, sd.FileName);
end;
...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 15-08-2015
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Aparte de lo dicho por Daniel, otra posible solución sería usar Synopse PDF engine, un conjunto de unidades para Delphi que permite crear documentos y/o reportes PDF. Para "convertir" un archivo Bitmap a un archivo PDF podría escribirse algo similar a esto:

Código Delphi [-]
{...}

uses
  // SynopsePDF
  mORMotReport;

procedure Bitmap2Pdf(const BitmapPath, OutputPDFPath: string);
var
  BMP: TBitmap;
  PDF: TGDIPages;
begin
  BMP := TBitmap.Create();
  PDF := TGDIPages.Create(nil);
  try
    PDF.BeginDoc();
    BMP.LoadFromFile(BitmapPath);
    PDF.DrawBMP(BMP, 0, BMP.Width div 3);
    PDF.EndDoc();
    PDF.ExportPDF(OutputPDFPath, False, True);
  finally
    BMP.Free();
    PDF.Free();
  end;
end;

{...}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Bitmap2Pdf('sample.bmp', 'sample.pdf');
end;
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 18-08-2015
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 441
Poder: 17
shoulder Va por buen camino
pdf

Gracias funciona perfecto y rapidisimo.
Responder Con Cita
  #5  
Antiguo 18-08-2015
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 441
Poder: 17
shoulder Va por buen camino
bmp2pdf

Hola como dije anteriormente el bmp2pdf funciona perfecto, pero un problema los pdf me los hace todos por arriba de 3 megas aunque los bmp sean de 1 MB, en vez con el pdfcreator me los hace a 200K. Hay un forma dentro del bmp2pdf.pas de tocar la resolucion?. Porque es mucho mas rapido que los demas pero esto no me lo permite usar con 50 hojas me voy a mas de 100 MB.
Gracias,
Responder Con Cita
  #6  
Antiguo 18-08-2015
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Si te decides por usar Synopse PDF engine, tal vez puedas convertir los archivos BMP a otro formato como JPG, puesto que este último permite establecer el nivel de compresión de los archivos. Echa un vistazo a este hilo de los foros de Synopse.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #7  
Antiguo 18-08-2015
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 441
Poder: 17
shoulder Va por buen camino
bmp2pdf

Gracias primero por responderme el tema es que me agranda el PDF porque me lo hace al 145% en vez el Pdfcreator puedo comprimirlo, veo en synopse me comprime el Jpeg (por lo que entiendo) y estoy usando BMP me lo hace por defecto el programa que scanea, hay forma que pueda comprimir en el PDF?.
Gracias
Responder Con Cita
  #8  
Antiguo 18-08-2015
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 441
Poder: 17
shoulder Va por buen camino
bmp

Hola dec, estoy probando tu codigo me comprime pero me corta la pagina , me hace 2 paginas en el PDF la primera en blanco y la segunda se ve por la mitad. Lo estoy copiando tal cual como lo pusiste. Probe con autosize pero tampoco.
Gracias.
Responder Con Cita
  #9  
Antiguo 18-08-2015
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Si no me equivoco he leído que Synopse PDF comprime los archivos BMP al incorporarlos al PDF. Pero, dado que estas imágenes suelen ser pesadas, tal vez podrías convertirlas a JPG para lograr archivos PDF de menor tamaño. Si puedes acceder a los archivos BMP, entonces puedes convertirlos a JPG, antes de añadirlos al archivo PDF.

Respecto de que una imagen te ocupe dos páginas seguramente sea por el tamaño de la imagen. No tengo muy claro cómo se maneja el tamaño de las imágenes, creo que es "aproximado" o "porcentual", de modo que prueba a dividir el mismo al añadir las imágenes al PDF, o sea, en lugar de esto:

Código Delphi [-]
PDF.DrawBMP(BMP, 0, BMP.Width div 3);

Prueba con algo como esto:

Código Delphi [-]
PDF.DrawBMP(BMP, 0, BMP.Width div 4);
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #10  
Antiguo 19-08-2015
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 441
Poder: 17
shoulder Va por buen camino
pdf

Gracias quedo bien asi!!, lo hice div 5 sino me separaba de hoja y autosize..

Código Delphi [-]

procedure Bitmap2Pdf(const BitmapPath, OutputPDFPath: string);
var
  BMP: TBitmap;
  PDF: TGDIPages;
begin
  BMP := TBitmap.Create();
  PDF := TGDIPages.Create(nil);
  try
    PDF.BeginDoc();
    BMP.LoadFromFile(BitmapPath);
    PDF.DrawBMP(BMP, 0, BMP.Width div 5);
    Pdf.AutoSize := True;
    PDF.ExportPDFForceJPEGCompression := 80;
    PDF.EndDoc();
    PDF.ExportPDF(OutputPDFPath,False, False);
  finally
    BMP.Free();
    PDF.Free();
  end;
end;
Responder Con Cita
  #11  
Antiguo 19-08-2015
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 441
Poder: 17
shoulder Va por buen camino
Pdf

Hola sigo sin encontrar solucion pensa que lo habia arreglado pero con el synopse hay veces que la hoja se hace en dos aunque arregle los parametrps como marque en el mensaje de arriba y el que me envio ecfisa si bien funciona muy bien no comprime. Ya no se que probar.
Gracias.
Responder Con Cita
  #12  
Antiguo 19-08-2015
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.488
Poder: 20
MAXIUM Va camino a la fama
¿Y si conviertes el BMP a JPG previamente? Quizás sea una chapusada, ya que el convertor a PDF debiera manejar la compresión, pero si te vale...

También puedes usar un auxiliar para pasar los JPG a PDF por línea de comando sin tener que instalar un impresora virtual http://sourceforge.net/projects/jpeg2pdf
Responder Con Cita
  #13  
Antiguo 19-08-2015
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 441
Poder: 17
shoulder Va por buen camino
Pdf

Lo probe Maxium, habia hecho el programa que haga todo por impresora virtual con PDFCreator, pero ponen 30 hojas en el scanner, el ciclo es graba BMP o Jpeg y a continuacion los pdf, pero SINO meto un showmessage entre medio hay veces que no me graba un archivo PDF, es como que el programa va mas rapido que la grabacion en windows, de ahi me vino todo el error probe con la funcion sleep pero tampoco funciona.

Código Delphi [-]
Image.SaveToFile('test-1.bmp');

quickreport1.print;

Antes en la registry escribo el nombre del archivo en el pdfcreator que seria el mismo del BMP Tes-1, test-2...
Responder Con Cita
  #14  
Antiguo 19-08-2015
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.488
Poder: 20
MAXIUM Va camino a la fama
Claro comprendo. Como son dos programas a parte, no hay coordinación entre ellos.

Me refiero a tu proyecto original, donde en algunos casos, se creaban los archivos bmp o jpg después de haberlos enviado a imprimir y ahí fallaba todo. Por eso usabas sleep.

El problema con esto de usar sleep, es que toma un tiempo indeterminado en el que se crean los archivos. Lo mejor sería usar un código que espere o asegure que el proceso haya sido finalizado antes de mandarlos a la impresora virtual. Ese código lo puedes buscar dentro del foro.

Hay muchas alternativas, pero no se que tanto te urge, en el sentido de resolver pronto el problema por X motivo o darte el tiempo de estudiar las librerías como la anterior o sinapsys hasta encontrar lo que necesitas e integrar todo a tu programa sin dependencias.

No tengo mucha experiencia en esto, por eso estoy teorizando. Así que perdón por esto.

Solo por curiosidad, ¿esos BMP los necesitas como archivos, los cargas previamente o pueden ser creados solo en memoria? ¿Los PDF constan de varias hojas o es una por cada BMP?
Responder Con Cita
  #15  
Antiguo 20-08-2015
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Una posibilidad es pedir ayuda en los foros de Synopse: me consta que el autor responde a las preguntas y consultas de sus usuarios.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #16  
Antiguo 20-08-2015
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 441
Poder: 17
shoulder Va por buen camino
pdf

Primero gracias a todos, el programa mediante la herramienta Twain scannea de a 20 hojas y muestra en una lista de imagenes los scaneos y mediante un boton graba el bmp y hace los 20 PDFs. Como explique con Pdfcreator cambio el nombre del archivo en la la registry grabo el bmp e imprimo en impresora virtual, pero en algunos momentos se desincronisa, sino escribo un showmessage en el medio. La rutina que me dio ecfisa funciona pero no comprime y hace pdfs muy grande y la de dec funciona pero no me hace el autosize vienen hojas A4 o A5 me hace hojas en blanco dentro del PDF o con el div 4... me hace muy chica la imagen. Te hare caso Dec voy a escribir al foro de synapsis veamos que me responden. Por ahora estan trabajando con los sleep y un showmessage entre la grabacion del write de la registry del nombre del archivo y cuando graba el bmp, y un sleep (1000) cuando imprime virtual el pdf, pero les molesta dar 20 enters y si das los enters muy rapido se desincronisa-
Responder Con Cita
  #17  
Antiguo 20-08-2015
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 441
Poder: 17
shoulder Va por buen camino
Pdf

Hola comparto la solucion. Gracias.


Código Delphi [-]
uses  SynPdf
.....

Procedure..
Var

    vpdf : TPdfDocumentGDI;
    pagemeta : TMetafile;
    p : integer;
....

vpdf := TPdfDocumentGDI.Create(true, 1252,false);
vpdf.CompressionMethod := cmNone;



   QuickReport1:=TQuickReport1.Create(self);


   Quickreport1.QRImage1.Picture.LoadFromFile('c:\carpeta\hola.bmp');
 
   QuickReport1.prepare;
   Quickreport1.QRImage1.Repaint;
   for p := 1 to QuickReport1.QRPrinter.PageCount do
   begin
      vpdf.AddPage;
      pagemeta := quickreport1.QRPrinter.GetPage(p);
      vpdf.VCLCanvas.Draw(0,0,pagemeta);
    end;
    vpdf.ForceJPEGCompression := 96;
    vpdf.SaveToFile('c:\carpeta\hola.pdf');
    vpdf.free;
   QuickReport1.Free;
   QuickReport1 := nil;
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
Crear documento con formato nitoman C++ Builder 2 24-09-2008 15:29:56
como convertir una imagen jpeg a formato THM kurono Varios 0 06-08-2008 06:40:14
Capturar el formato del texto de un documento Word Roky Servers 2 04-01-2008 07:51:26
convertir formato imagen cualquiera a ico kapullok_2006 Gráficos 2 01-12-2007 18:56:15
Convertir archivos de imagen. alfredosg19 Varios 4 15-06-2005 10:26:44


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


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
Copyright 1996-2007 Club Delphi