Я использую Батик для этого. Полный код Delphi:
procedure ExecNewProcess(ProgramName : String; Wait: Boolean);
var
StartInfo : TStartupInfo;
ProcInfo : TProcessInformation;
CreateOK : Boolean;
begin
FillChar(StartInfo, SizeOf(TStartupInfo), #0);
FillChar(ProcInfo, SizeOf(TProcessInformation), #0);
StartInfo.cb := SizeOf(TStartupInfo);
CreateOK := CreateProcess(nil, PChar(ProgramName), nil, nil, False,
CREATE_NEW_PROCESS_GROUP + NORMAL_PRIORITY_CLASS,
nil, nil, StartInfo, ProcInfo);
if CreateOK then begin
//may or may not be needed. Usually wait for child processes
if Wait then
WaitForSingleObject(ProcInfo.hProcess, INFINITE);
end else
ShowMessage('Unable to run ' + ProgramName);
CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
end;
procedure ConvertSVGtoPNG(aFilename: String);
const
ExecLine = 'c:\windows\system32\java.exe -jar C:\Apps\batik-1.7\batik-rasterizer.jar ';
begin
ExecNewProcess(ExecLine + aFilename, True);
end;
Компоненты каркаса Zend намеренно разработаны таким образом, чтобы они были слабо связаны с самим каркасом.
Компонентная структура Zend Фреймворк в чем-то уникален; каждый компонент разработан с несколькими зависимости от других компонентов. Эта слабосвязанная архитектура позволяет разработчикам использовать компоненты индивидуально. Мы часто называем это дизайн "по желанию". [ отсюда ]
Это инструмент для извлечения определенных компонентов и их зависимостей для использования в вашем приложении.
Я только что взял весь пакет Zend и использовал его части. Всегда кажется, что с течением времени я использую все больше, поэтому я держу его в актуальном состоянии, даже если я не использую некоторые элементы MVC в том или ином проекте. Удержание всего этого позволяет вам не беспокоиться о зависимостях (и о том, как они могут измениться в будущем).