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):

    1uses
    2  gsapi ….
    3
    4function msPdfToJpg(const sPdfFile: string; const sJpgFile:string) : string;
    5var
    6  argv:PPAnsiChar;
    7  code:integer;
    8  S, OutBuf : Ansistring;
    9  instance:Pgs_main_instance;
   10
   11begin
   12  Result:= '';
   13  S:= '';
   14  new(instance);
   15
   16  code:=gsapi_new_instance(@instance,nil);
   17  if code<>0 then
   18    raise Exception.Create('Impossible to open an instance 
   19        of ghostscript. Error code: '+IntToStr(code));
   20  OutBuf:= '';
   21
   22  setlength(argv,9);
   23  argv[0]:= StrNew(PAnsiChar(AnsiString(ParamStr(0))));
   24  argv[1]:= '-q';
   25  argv[2]:= '-dNOPAUSE';
   26  argv[3]:= '-dBATCH';
   27  argv[4]:= '-dSAFER';
   28  argv[5]:= PAnsiChar('-sDEVICE=jpeggray');  
   29//argv[5]:= PAnsiChar('-sDEVICE=jpeg');
   30  argv[6]:= StrNew(PAnsiChar(AnsiString('-sOUTPUTFILE=%02d' + sJpgFile)));
   31  argv[7]:= '-f';
   32  argv[8]:= StrNew(PAnsiChar(AnsiString(sPdfFile)));
   33
   34  try
   35    code:=gsapi_init_with_args(instance,length(argv),argv);
   36
   37    if code<0 then
   38     raise Exception.Create('ERROR: init_args: '+IntToStr(code))
   39    except
   40    try
   41      gsapi_exit(instance);
   42    except
   43
   44    end;
   45    try
   46      gsapi_delete_instance(instance);
   47    except;
   48    end;
   49      raise Exception.Create('ERROR: init_args: Access violation. Something went wrong.');
   50
   51  end;
   52  StrDispose(Argv[0]);
   53  StrDispose(Argv[6]);
   54  StrDispose(Argv[8]);
   55
   56  gsapi_exit(instance);
   57  try
   58    gsapi_delete_instance(instance);
   59  except;
   60
   61  end;
   62  S:= OutBuf;
   63  Result:= string(S);
   64end;

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.


Nabízíme Delphi školení na různá témata, primárně ve Vaší firmě.

Tagy: , ,

Návody

Komentování ukončeno

Naše nabídka

Partial English version.

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 nebo burzy práce).

Pokud chcete podpořit tento server libovolnou částkou, můžete použít PayPal. Moc děkuji.

Delphi Certified Developer

O Delphi.cz

Delphi je jediný moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64 , Mac OSX a na iPhone a Android (s výhledem na další platformy díky FireMonkey) na současném trhu (včetně Windows 8.1).

V současnosti je světová komunita přes dva miliónů vývojářů.

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.

Anketa

Poslední komentáře

Comment RSS