Ghostscript API aneb jak na PDF z Delphi

vložil Radek Červinka 11. srpna 2010 00:56

O vytváření PDF jsem již poznámku utrousil, ale někdy je třeba i opačný přístup. Parsování PDF neumím (komentáře uvítám), ale ghostscript s PDF umí pracovat a převádět do jiných formátů.

ghostscript logo

Ghostscript je pěkný kousek software, ale jeho použití je trochu komplikované, jelikož se většinou používá jako volání jeho exe. Naštěstí to lze i jinak. Veškerý kód je integrován v knihovně gsdll32.dll, která je jen z exe volána, takže stačí jen používat uvedenou knihovnu a patřičně ji zavolat.

Je to už dávno, co rozhraní pro použití gsapi z Delphi publikoval Alessandro Briosi a pořád se povaluje na internetu, ale pokud ho nemůžete najít, je zde lokální kopie gsapi.

Ukázka použití (v podstatě z jednoho dema na internetu), volání spočívá v předání parametrů shodných s exe variantou a trochu inicializace (osobně bych nepoužil StrNew - ale nebudu to upravovat, šlo mi o to ukázat, že to jde i bez exe):

uses
  gsapi ….

function msPdfToJpg(const sPdfFile: string; const sJpgFile:string) : string;
var
  argv:PPAnsiChar;
  code:integer;
  S, OutBuf : Ansistring;
  instance:Pgs_main_instance;

begin
  Result:= '';
  S:= '';
  new(instance);

  code:=gsapi_new_instance(@instance,nil);
  if code<>0 then
    raise Exception.Create('Impossible to open an instance 
        of ghostscript. Error code: '+IntToStr(code));
  OutBuf:= '';

  setlength(argv,9);
  argv[0]:= StrNew(PAnsiChar(AnsiString(ParamStr(0))));
  argv[1]:= '-q';
  argv[2]:= '-dNOPAUSE';
  argv[3]:= '-dBATCH';
  argv[4]:= '-dSAFER';
  argv[5]:= PAnsiChar('-sDEVICE=jpeggray');  
//argv[5]:= PAnsiChar('-sDEVICE=jpeg');
  argv[6]:= StrNew(PAnsiChar(AnsiString('-sOUTPUTFILE=%02d' + sJpgFile)));
  argv[7]:= '-f';
  argv[8]:= StrNew(PAnsiChar(AnsiString(sPdfFile)));

  try
    code:=gsapi_init_with_args(instance,length(argv),argv);

    if code<0 then
     raise Exception.Create('ERROR: init_args: '+IntToStr(code))
    except
    try
      gsapi_exit(instance);
    except

    end;
    try
      gsapi_delete_instance(instance);
    except;
    end;
      raise Exception.Create('ERROR: init_args: Access violation. Something went wrong.');

  end;
  StrDispose(Argv[0]);
  StrDispose(Argv[6]);
  StrDispose(Argv[8]);

  gsapi_exit(instance);
  try
    gsapi_delete_instance(instance);
  except;

  end;
  S:= OutBuf;
  Result:= string(S);
end;

Pokud si prostudujete parametry které program podporuje, zjistíte, že se tak dají např. generovat obrázky z PDF co soubor to stránka, výstupem může být PNG nebo jiný formát atd.

Tagy: , ,

Návody

Komentování ukončeno

Naše nabídka

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy).

love Delphi

O Delphi.cz

Delphi je moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX, Linux a na iPhone a Android.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Poslední komentáře

Comment RSS

Dle měsíců