![]() |
vorhandene PDF verleinern, Optionen Ghostscript gesucht
Moin...:P
Aufgabe: Eine Orderstruktur, mit Unterordnern (ca.4000), die enthaltenen PDF, die von einem Scanner stammen, ohne nennenswerten Qualitätsverlust zu verkleinern. Mit dem PDF Creator geht das perfekt. (aus einer A4 Seite mit 6,2 MB wird ein PDF mit 250 KB - "optisch" identisch :thumb:) Aber da müßte ich jeden Order manuell konvertieren. :? Da der Ghostscript das kann (PDF laden und wieder mit geäderten Optionen speichern) wollte ich das mal probieren. Nur komme ich grad mit dem gefühlt 1000 Optionen nicht klar. :? Ich benötige: 1. Input File 2. Qutput File 3. in der PDF enthaltenes TIFF verleinern GhostScript HowTo: ![]() Könnte mir jemand helfen? Danke.8-) |
AW: vorhandene PDF verleinern, Optionen Ghostscript gesucht
vielleicht hilft Dir dieser Link weiter:
![]() Gruß K-H |
AW: vorhandene PDF verleinern, Optionen Ghostscript gesucht
Der PDFCreator nutzt GhostScript.
Im Verzeichnis "Com Scripts" gibt es einige Beispiele für die Nutzung des PDFCreators aus diversen Programmiersprachen hinaus. Delphi ist leider nicht dabei. Dann gibt es da noch die PDFCreator.COM.tlb im Installationsverzeichnis des PDFCreators. Die kann man in Delphi importieren. Wäre das eventuell auch eine Option? Dann mal nicht in die Ferne schweifen, die DelphiPraxis liegt so nah: ![]() Lektüre zum Thema Delphi und PDFCreator: ![]() |
AW: vorhandene PDF verleinern, Optionen Ghostscript gesucht
Hallöle...:P
Danke für eure Tips...:wink: Inzwischen bin ich schon weiter. Über die Konsole geht das: Zitat:
Danke...:P |
AW: vorhandene PDF verleinern, Optionen Ghostscript gesucht
Hallöle...:P
Ich habe eine Miniklasse daraus gemacht... Bitteschön. 8-)
Delphi-Quellcode:
unit uGhostscript;
interface uses Winapi.Windows, System.Classes, System.SysUtils, System.IOUtils; const conDLLName = 'gsdll32.dll'; conFileNameTempPDF = 'TempPDF.pdf'; type TStdIoFunction = function(CallerHandle: Pointer; Buffer: PAnsiChar; Length: Integer): Integer stdcall; TGsInit = function (I: Pointer; P: Pointer): Integer; stdcall; TGsApiInitWithArgs = function (I: Pointer; L: Integer; A: array of PAnsiChar): Integer; stdcall; TGsApiExit = function (I: Pointer): Integer; stdcall; TGsApiDeleteInstance = function (I: Pointer): Integer; stdcall; TOnErrorEvent = procedure(Sender: TObject; MessageText: string) of object; TGhostscript = class private FDLLPath: string; FDLLHandle: THandle; FGsInit: TGsInit; FGsApiInitWithArgs: TGsApiInitWithArgs; FGsApiExit: TGsApiExit; FGsApiDeleteInstance: TGsApiDeleteInstance; FGsInstance: Pointer; FParameters: array of PAnsiChar; FOnError: TOnErrorEvent; function LoadDLL(PathDLL: string): Boolean; function IsFileInUse(FileName: string): Boolean; public constructor Create(PathDLL: string = ''); destructor Destroy; override; property OnError: TOnErrorEvent read FOnError write FOnError; function PDFShrink(FileName: string): Boolean; end; implementation { TGhostscript } // Initialisation constructor TGhostscript.Create(PathDLL: string); begin FDLLPath := PathDLL; FDLLHandle := 0; end; destructor TSEAMGhostscript.Destroy; begin if FDLLHandle > 0 then begin FreeLibrary(FDLLHandle); end; inherited; end; // Work function TGhostscript.LoadDLL(PathDLL: string): Boolean; var CurrentDLLPath: string; begin if PathDLL = '' then begin CurrentDLLPath := IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))) + conDLLName; end else begin CurrentDLLPath := PathDLL; end; FDLLHandle := LoadLibrary(PChar(CurrentDLLPath)); if FDLLHandle > 0 then begin FGsInit := GetProcAddress(FDLLHandle, 'gsapi_new_instance'); Result := (FGsInit(@FGsInstance, nil) = 0); if Result then begin FGsApiInitWithArgs := GetProcAddress(FDLLHandle, 'gsapi_init_with_args'); FGsApiExit := GetProcAddress(FDLLHandle, 'gsapi_exit'); FGsApiDeleteInstance := GetProcAddress(FDLLHandle, 'gsapi_delete_instance'); end else begin FOnError(Self, 'Die Ghostscript Instanz konnte nicht erzeugt werden.'); Result := False; end; end else begin FOnError(Self, Format('Die Ghostscript DLL %s wurde nicht geladen.', [QuotedStr(CurrentDLLPath)])); Result := False; end; end; function TGhostscript.IsFileInUse(FileName: string): Boolean; var Stream: TFileStream; begin Result := False; Stream := nil; if not FileExists(FileName) then Exit; try Stream := TFileStream.Create(FileName, fmOpenRead); // Alternative: 'or fmShareExclusive' except Result := True; end; Stream.Free; end; function TGhostscript.PDFShrink(FileName: string): Boolean; var TargetFileName: string; begin if FDLLHandle = 0 then begin LoadDLL(FDLLPath); end; try TargetFileName := IncludeTrailingPathDelimiter(ExtractFilePath(FileName)) + conFileNameTempPDF; SetLength(FParameters, 7); FParameters[0] := ''; FParameters[1] := '-dNOPAUSE'; FParameters[2] := '-dBATCH'; FParameters[3] := '-dPDFSETTINGS=/ebook'; FParameters[4] := '-sDEVICE=pdfwrite'; FParameters[5] := PAnsiChar(AnsiString('-sOutputFile=' + TargetFileName)); FParameters[6] := PAnsiChar(AnsiString(FileName)); Result := (FGsApiInitWithArgs(FGsInstance, Length(FParameters), FParameters) = 0); finally FGsApiExit(FGsInstance); end; if Result then begin if not IsFileInUse(FileName) then begin TFile.Delete(FileName); RenameFile(TargetFileName, FileName); end; end end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz