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
Antwort Antwort
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
Kalfany

Registriert seit: 28. Feb 2008
Ort: München
153 Beiträge
 
Delphi 2007 Professional
 
#2

Re: in Delphi PDF-Dateien komprimieren

  Alt 22. Sep 2008, 12:40
Zitat:
[edit=Phoenix]Delphi-Tags eingefügt. Das nächste mal bitte selber machen. Mfg, Phoenix[/edit]
hilft aber nix wenn der BBCode aus ist

btw. von PDFCreator gibts sein 2-3 Tagen eine 0.9.6
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.606 Beiträge
 
#3

Re: in Delphi PDF-Dateien komprimieren

  Alt 22. Sep 2008, 13:59
Jupp. .schon geändert
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
hoffkmann

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

Re: in Delphi PDF-Dateien komprimieren

  Alt 25. Sep 2008, 08:09
Hallo!
Habe neue Version installiert und getestet. Hat mich leider nicht weitergebracht. Trotzdem Danke für den Tipp.
Gruß hoffkmann
  Mit Zitat antworten Zitat
Kalfany

Registriert seit: 28. Feb 2008
Ort: München
153 Beiträge
 
Delphi 2007 Professional
 
#5

Re: in Delphi PDF-Dateien komprimieren

  Alt 25. Sep 2008, 08:23
Zitat von hoffkmann:
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?
meinst du damit das wenn der pdf creator fertig ist er die datei öffnet? das sollte man eig. abstellen können.
  Mit Zitat antworten Zitat
hoffkmann

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

Re: in Delphi PDF-Dateien komprimieren

  Alt 25. Sep 2008, 08:38
Nicht ganz. Wenn ich die Einstellung AutosaveStartStandardProgram (entspricht der Checkbox bei den Einstellungen des automatischen Speicherns: Nach dem automatischen Speichern das Dokument mit dem Standardprogramm öffnen.) auf 0 setzte wird zwar die Datei selbst nicht angezeigt, aber trotzdem die leere Anwendung des Adobe Readers geöffnet. Die Anwendung öffnet sich bereits wenn ich die Datei an den PDFCreator übergebe, bevor sie überhaupt gedruckt wird. Um das abzustellen habe ich leider keine brauchbare Einstellung gefunden.
  Mit Zitat antworten Zitat
Kalfany

Registriert seit: 28. Feb 2008
Ort: München
153 Beiträge
 
Delphi 2007 Professional
 
#7

Re: in Delphi PDF-Dateien komprimieren

  Alt 25. Sep 2008, 08:48
also bei mir kommt da nix (grad frisch installiert [normal, nicht als Server]) ...

hab eig. nur AutosaveStartStandardProgram aus und UseAutosave angemacht mir ist aber aufgefallen das es noch die einstellung RunProgramBeforeSaving gibt.

ansonsten würd ichs mal auf einem anderen system mit einer frischen installation testen
  Mit Zitat antworten Zitat
hoffkmann

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

Re: in Delphi PDF-Dateien komprimieren

  Alt 25. Sep 2008, 10:30
Ich hab das ganze jetzt bei einem Kollegen ausprobiert - dort ist es genauso. Mein Befehl für die Kommandozeile:
Zitat:
C:\Programme\PDFCreator\PDFCreator.exe /NoStart /PF"Filename.pdf"
Vorher habe ich automatisches Speichern eingestellt, inklusive eines Dateinamens sowie einer Pfadangabe, und in der Registry alle Einstellungen die das Öffnen des Standardprogramms beeinflussen könnten gesetzt. Vielleicht mal den Aufruf über Kommandozeile testen. Wenn der Adobe Reader zuvor geschlossen war, wird er beim Drucken geöffnet.
  Mit Zitat antworten Zitat
Antwort Antwort


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 12:11 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