AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

in Delphi PDF-Dateien komprimieren

Ein Thema von hoffkmann · begonnen am 22. Sep 2008 · letzter Beitrag vom 25. Sep 2008
 
hoffkmann

Registriert seit: 19. Sep 2008
4 Beiträge
 
#1

in Delphi PDF-Dateien komprimieren

  Alt 22. Sep 2008, 11:41
Hallo,

seit Kurzem besteht in unserem Haus die Anforderung xls-Dateien in PDF-Dateien umzuwandeln und bereits erstellte PDF-Dateien nochmals zu komprimieren. Dafür hätten wir gerne das Tool PDF Creator Version 0.9.5 verwenden, welches uns bereits zur Verfügung steht.
Die Ausgangsdateien werden aus einer eigens mit Delphi 6 programmierten Anwendung automatisch erzeugt. Die Excel-Dateien erstellen wir mit Hilfe von ActiveX-Komponenten, die PDF-Dateien werden mit Hilfe von WPDF erzeugt.
Direkt im Anschluss sollen diese Dateien, ebenfalls automatisch und ohne manuelles Eingreifen, umgewandelt oder komprimiert werden. Unser erster Versuch bestand darin, die PDFCreator.exe über Kom-mandozeile und den in der PDF Creator Hilfe beschriebenen COM-Parametern aufzurufen und über die Einstellungen des automatischen Speicherns (dazu Registry überschreiben) die gewünschten Files zu erstellen.

WinExec(PChar('C:\Programme\PDFCreator\PDFCreator.exe /NoStart /PF"'Filename'"'),SW_MINIMIZE); Im zweiten Versuch installierten wir die Typbibliothek des PDFCreators und verwendeten die Klasse TclsPDFCreator:

Delphi-Quellcode:
PDFCreator:=TclsPDFCreator.Create(nil);

if not PDFCreator.cStart('''',False) then
begin
   Fehlertext:='PDFCreator konnte nicht geöffnet werden.';
end else
begin

  // *** Anzahl der Druckjobs prüfen

  printJobCount:=PDFCreator.cCountOfPrintJobs;

  // *** Einstellungen des PDFCreators schreiben

PDFCreator_Einstellungen_neu(PDFCreator, DefaultPrinter, Fehlertext, RGC_KA_PATH, Fn_neu,anzeigen);


  // *** Nachfragen, ob Dokument "druckfertig" ist

  if not PDFCreator.cIsPrintable(temppath+Dir+'\'+Fn+'.'+Endung) then
  begin
    Fehlertext:='Die Datei kann mit PDFCreator nicht gedruckt werden.';
  end else
  begin

    // *** Datei drucken

    PDFCreator.cPrintFile(temppath+Dir+'\'+Fn+'.'+Endung);

    PDFCreator.cPrinterStop:=False;

    // warten bis komprimierte Datei erzeugt wurde
    // nach 2 min trotzdem Abbrechen
    z:=0;
    while not FileExists(temppath+Dir+'\'+Fn_neu+'.pdf') do
    begin
      Sleep(100);
        z:=z+100;
        if (z>=120000) then // aus while-Schleife springen wenn RGSoft beendet wird
        begin
          break;
        end;
    end;

    // *** PDFCreator erst schließen, wenn Druckjob wirklich fertig ist

    z:=PDFCreator.cCountOfPrintJobs;
    while (z>printJobCount) do
    begin
      Sleep(100);
      Application.ProcessMessages;
      z:=PDFCreator.cCountOfPrintJobs;
    end;

    Sleep(1000);

  end;
end;

procedure PDFCreator_Einstellungen_neu(APDFCreator:TclsPDFCreator; var DefaultPrinter:WideString; var AFehlertext:String; ADir,AFileName:String; Aanzeigen:Boolean);
var
  Opt_neu:clsPDFCreatorOptions;
begin

  try

    // Einstellungen des PDFCreators überschreiben

    Opt_neu:=APDFCreator.cOptions;

    // damit man das PDF gleich mit ursprünglichem Standarddrucker drucken kann
    DefaultPrinter:=APDFCreator.cDefaultPrinter;
    Opt_neu.PrintAfterSavingPrinter:=DefaultPrinter;

    Opt_neu.NoConfirmMessageSwitchingDefaultprinter:=1;
    Opt_neu.UseAutosave:=1;
    Opt_neu.UseAutosaveDirectory:=1;
    Opt_neu.AutosaveDirectory:=temppath+ADir+'\';
    Opt_neu.AutosaveFormat:=0;
    Opt_neu.AutosaveFilename:=AFileName;
    Opt_neu.AutosaveStartStandardProgram:=1;

    APDFCreator.cOptions:=Opt_neu;

    APDFCreator.cClearCache;
    APDFCreator.cDefaultPrinter:='PDFCreator';
  except
    on e:exception do
    begin
      AFehlertext:='Beim Komprimieren ist ein Fehler aufgetreten.'+CRLF+e.Message;
    end;
  end;
end;
Die zweite Version des Aufrufs funktioniert leider nicht für PDF-Dateien, obwohl ich diese direkt im PDF Creator und auch mit dem Aufruf über Kommandozeile drucken und komprimieren kann. Es liefert bereits die Funktion PDFCreator.cIsPrintable(temppath+Dir+'\'+Fn+'.'+En dung)=FALSE zurück. Hat hier irgendjemand eine Idee, wo der Fehler liegen könnte? Xls-Dateien können hingegen einwandfrei in PDF-Dateien umgewandelt werden.

Zusätzlich scheiterten momentan beide Möglichkeiten an ein und demselben Phänomen:
Sobald man die Ausgangsdatei an den PDF Creator übergibt öffnet dieser kurz deren Standardprogramm, sei es EXCEL XP oder den ADOBE READER. Da wir zum Teil auch mehrere Dateien gleichzeitig (Massendruck bis zu 200 Dateien) im Hintergrund erstellen und dem Anwender dabei ein Weiterarbeiten gestattet werden muss, ist es nicht zumutbar, wenn 200 Mal der ADOBE READER öffnet und wieder schließt. Gibt es eine Möglichkeit diesen Vorgang zu unterbinden?

Generell wären wir auch einer ganz anderen Lösung nicht abgeneigt. Vielleicht hat jemand Erfahrungen mit einem weiteren Tool, das in Delphi eingebunden werden kann und bei der Komprimierung von PDF-Dateien in Qualität und Dateigröße ähnlich gute Ergebnisse erzielt wie der PDF Creator. Für Tipps und Hinweise wäre ich sehr dankbar.

Gruß hoffkmann

[edit=Phoenix]Delphi-Tags eingefügt. Das nächste mal bitte selber machen. Mfg, Phoenix[/edit]
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz