Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Crear PDFs (https://www.clubdelphi.com/foros/showthread.php?t=74389)

cslbcn 16-06-2011 10:10:32

Crear PDFs
 
Hola. He estado buscando por google como crear un PDF en Delphi. Me he bajado el PDF Creator Pilot (http://www.colorpilot.com/pdflibrary.html) y funciona perfectamente.

He creado un PDF con texto, imagenes, etc. Lo malo es que la librería es una demo y en cada PDF creado sale una marca de agua muy molesta... La licencia es muy cara y me preguntaba si conocéis de otras librería gratuitas para poder imprimir documentos en PDF.

Gracias y saludos.

Casimiro Notevi 16-06-2011 10:57:10

Usa pdfcreator, es libre, y no tendrás esas molestias.

newtron 16-06-2011 13:51:39

Hola.

Si no me equivoco el pdfcreator es una impresora virtual para generar pdfs pero no lo puedes usar con delphi.

Hace un tiempo yo estuve con este tema y probé unos cuantos componentes para delphi para generar pdfs y ninguno funcionaba correctamente. Al final me decanté por comprar un componente que se llama edocengine que es relativamente barato y bastante completo.

http://www.gnostice.com/eDocEngine_V...show=downloads

Si de todas formas quieres probar con algunos componentes gratuitos aquí tienes un par de ellos pero aunque aparentemente funcionan de forma correcta tienen fallos que me hicieron desestimarlos en su momento.

http://www.linares.net/wxpdfcom/
http://www.roledata.com/rolepdf.htm

Saludos

Casimiro Notevi 16-06-2011 15:19:03

Cita:

Empezado por newtron (Mensaje 403939)
Si no me equivoco el pdfcreator es una impresora virtual para generar pdfs pero no lo puedes usar con delphi.

Sí, tiene opción a llamar a un ejecutable con parámetros para poder crearlos.
Por ejemplo, en este hilo se habló de ese tema.
Aquí también se habló bastante sobre eso.
Incluso se puede crear un pdf de un .doc tal y como explican en http://coding.derkeiler.com
.

newtron 16-06-2011 16:24:05

¡Vaya! ¿y ahora me lo dices? :D:D

Le he estado echando un vistazo a los posts pero me resulta demasiado complicado todo aparte de tener que ir instalando el pdfcreator en las máquinas de los clientes.

El componente que os comento vale 199$ (no es demasiado) y aparte de exportar a pdf puedes hacerlo a un montón de formatos más, word, excel, jpg... etc, pero eso si, tienes que imprimir "a pelo" en el canvas de la impresora, cosa que a mi no me ha venido de grande porque ya lo hago de forma normal para imprimir listados y formularios con nuestro reporteador particular.

Saludos

oesqueda 16-06-2011 16:26:12

Tengo una pregunta mas bien, que usas para mandar imprimir, algun reporteador o lo mandas directamente a la impresora.

Porque si usas un reporteador:

1. Guarda el nombre de la impresora PDF
2. Cuando vayas a imprimir le indicas al reporteador la impresora PDF
3. Mandas la impresion

Si lo mandas tu:

1. Guarda el nombre de la impresora PDF
2. Cambias la impresora por default
3. Mandas la impresion

para cambiar la impresora por defualt en codigo:

http://www.swissdelphicenter.ch/torr...ode.php?id=660
http://delphi.about.com/cs/adptips20...ltip1001_5.htm

Si lo que necesitas es tu especificar el nombre esa es otra historia, creo que necesitas ser mas preciso en tu pregunta y darnos mas informacion

Te paso otro url donde vienen componentes para mandar a PDF

http://www.torry.net/pages.php?id=1334

roman 16-06-2011 16:27:04

Cita:

Empezado por Casimiro Notevi (Mensaje 403941)
Incluso se puede crear un pdf de un .doc

Para comodidad de los lectores, copio y pego aquí el código con indentación y resaltado :):

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ActiveX, ComObj;

type
TForm1 = class(TForm)
  Edit1: TEdit;
  Button1: TButton;
  procedure Button1Click(Sender: TObject);
private
  { Private declarations }
  PDFCreator, MSWord: OleVariant;

  optUseAutosave, optUseAutoSaveDirectory, optAutosaveFormat,
  optPDFColorsColorModel: Integer;
  optAutosaveDirectory, optAutosaveFilename: String;

  // Security Options
  optPDFUseSecurity, optPDFHighEncryption, optPDFOwnerPass: Integer;
  optPDFDisallowCopy, optPDFDisallowModifyAnnotations,
  optPDFDisallowModifyContents, optPDFDisallowPrinting: Integer;
  optPDFAllowAssembly, optPDFAllowDegradedPrinting, optPDFAllowFillIn,
  optPDFAllowScreenReaders: Integer;
  optPDFOwnerPasswordString: String;

  procedure StorePDFOptions;
  procedure SetPDFOptions(const filename, ownerpass: String);
  procedure RestorePDFOptions;
public
  { Public declarations }
end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
const
  output_filename: String = 'D:\tmp\test.pdf';
  owner_password: String = 'ownerpass';
var
  c, printJobCount: Integer;
  optPrintBackground: Boolean;
begin
  PDFCreator := CreateOLEObject('PDFCreator.clsPDFCreator');

  PDFCreator.cStart('/NoProcessingAtStartup');

  StorePDFOptions;
  SetPDFOptions(output_filename, owner_password);

  MSWord := CreateOleObject('Word.Application');
  try
    MSWord.DisplayAlerts := 0;

    MSword.Documents.Open(Edit1.Text);

    MSWord.ActiveDocument.TrackRevisions := false;
    optPrintBackground := MSWord.Options.PrintBackground;
    if not optPrintBackground then
      MSWord.Options.PrintBackground := True;

    MSWord.ActiveWindow.View.ShowRevisionsAndComments := False;
    MSWord.Options.WarnBeforeSavingPrintingSendingMarkup := false;

    printJobCount := PDFCreator.cCountOfPrintJobs;
    /// ------------------------------------------
    /// Have PDFCreator wait for pages
    PDFCreator.cPrinterStop := true;

    MSWord.ActiveDocument.PrintoutOld;

    /// we don't want to continue on right after telling word to print,
    because it can cause problems
    while MSWord.BackgroundPrintingStatus <> 0 do
    begin
      Sleep(10);
      Application.ProcessMessages;
    end;

    /// Tell PDFCreator we're done printing pages.
    PDFCreator.cPrinterStop := false;
    /// ------------------------------------------

    /// now wait for PDFCreator to finish
    c := PDFCreator.cCountOfPrintJobs;
    while c > printJobCount do
    begin
      Sleep(10);
      Application.ProcessMessages;
      c := PDFCreator.cCountOfPrintJobs;
    end;

    MSword.ActiveDocument.Close(SaveChanges := 0);
  finally
    VarClear(MSWord);
  end;

  RestorePDFOptions;
  VarClear(PDFCreator);
end;

procedure TForm1.StorePDFOptions;
begin
  // save the current options to put back when we're finished.
  optUseAutosave := PDFCreator.cOption['UseAutosave'];
  optUseAutosaveDirectory := PDFCreator.cOption['UseAutosaveDirectory'];
  optAutosaveDirectory := PDFCreator.cOption['AutosaveDirectory'];
  optAutosaveFilename := PDFCreator.cOption['AutosaveFilename'];
  optAutosaveFormat := PDFCreator.cOption['AutosaveFormat'];
  optPDFColorsColorModel := PDFCreator.cOption['PDFColorsColorModel'];

  // security options
  optPDFUseSecurity := PDFCreator.cOption['PDFUseSecurity'];
  optPDFHighEncryption := PDFCreator.cOption['PDFHighEncryption'];
  optPDFOwnerPass := PDFCreator.cOption['PDFOwnerPass'];
  optPDFOwnerPasswordString :=
  PDFCreator.cOption['PDFOwnerPasswordString'];
  optPDFDisallowCopy := PDFCreator.cOption['PDFDisallowCopy'];
  optPDFDisallowModifyAnnotations :=
  PDFCreator.cOption['PDFDisallowModifyAnnotations'];
  optPDFDisallowModifyContents :=
  PDFCreator.cOption['PDFDisallowModifyContents'];
  optPDFDisallowPrinting := PDFCreator.cOption['PDFDisallowPrinting'];
  optPDFAllowAssembly := PDFCreator.cOption['PDFAllowAssembly'];
  optPDFAllowDegradedPrinting :=
  PDFCreator.cOption['PDFAllowDegradedPrinting'];
  optPDFAllowFillIn := PDFCreator.cOption['PDFAllowFillIn'];
  optPDFAllowScreenReaders := PDFCreator.cOption['PDFAllowScreenReaders'];
end;

procedure TForm1.SetPDFOptions(const filename, ownerpass: String);
begin
  // set the options we want, auto-save PDF with specific filename
  PDFCreator.cOption('UseAutosave') := 1;
  PDFCreator.cOption('UseAutosaveDirectory') := 1;
  PDFCreator.cOption('AutosaveDirectory') := ExtractFilePath(filename);
  PDFCreator.cOption('AutosaveFilename') := ExtractFileName(filename);
  PDFCreator.cOption('AutosaveFormat') := 0; // PDF format
  PDFCreator.cOption('PDFColorsColorModel') := 0; // RGB format

  if Trim(ownerpass) <> '' then
  begin
    PDFCreator.cOption('PDFUseSecurity') := 1;
    PDFCreator.cOption('PDFHighEncryption') := 1;
    PDFCreator.cOption('PDFOwnerPass') := 1;
    PDFCreator.cOption('PDFOwnerPasswordString') := ownerpass;
    PDFCreator.cOption('PDFDisallowCopy') := 0;
    PDFCreator.cOption('PDFDisallowModifyAnnotations') := 1;
    PDFCreator.cOption('PDFDisallowModifyContents') := 1;
    PDFCreator.cOption('PDFDisallowPrinting') := 0;
    PDFCreator.cOption('PDFAllowAssembly') := 0;
    PDFCreator.cOption('PDFAllowDegradedPrinting') := 0;
    PDFCreator.cOption('PDFAllowFillIn') := 0;
    PDFCreator.cOption('PDFAllowScreenReaders') := 0;
  end;

  PDFCreator.cSaveOptions;
end;

procedure TForm1.RestorePDFOptions;
begin
  // reset user's options
  PDFCreator.cOption('UseAutosave') := optUseAutosave;
  PDFCreator.cOption('UseAutosaveDirectory') := optUseAutosaveDirectory;
  PDFCreator.cOption('AutosaveDirectory') := optAutosaveDirectory;
  PDFCreator.cOption('AutosaveFilename') := optAutosaveFilename;
  PDFCreator.cOption('AutosaveFormat') := optAutosaveFormat;
  PDFCreator.cOption('PDFColorsColorModel') := optPDFColorsColorModel;

  // security options
  PDFCreator.cOption('PDFUseSecurity') := optPDFUseSecurity;
  PDFCreator.cOption('PDFHighEncryption') := optPDFHighEncryption;
  PDFCreator.cOption('PDFOwnerPass') := optPDFOwnerPass;
  PDFCreator.cOption('PDFOwnerPasswordString') :=
  optPDFOwnerPasswordString;
  PDFCreator.cOption('PDFDisallowCopy') := optPDFDisallowCopy;
  PDFCreator.cOption('PDFDisallowModifyAnnotations') :=
  optPDFDisallowModifyAnnotations;
  PDFCreator.cOption('PDFDisallowModifyContents') :=
  optPDFDisallowModifyContents;
  PDFCreator.cOption('PDFDisallowPrinting') := optPDFDisallowPrinting;
  PDFCreator.cOption('PDFAllowAssembly') := optPDFAllowAssembly;
  PDFCreator.cOption('PDFAllowDegradedPrinting') :=
  optPDFAllowDegradedPrinting;
  PDFCreator.cOption('PDFAllowFillIn') := optPDFAllowFillIn;
  PDFCreator.cOption('PDFAllowScreenReaders') := optPDFAllowScreenReaders;

  PDFCreator.cSaveOptions;

  Sleep(100);
end;

end.

Cowky 24-06-2011 19:31:11

mas sencillo, bajate una impresora virtual,

y la podes usas desde cualquier programa.

pd: yo uso la Bullzip PDF Printer


La franja horaria es GMT +2. Ahora son las 19:17:46.

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