Преобразование SVG к PNG с помощью [закрытого] C#

Здесь нет ничего особенного в Toast. Вы просто вызываете статический метод, который создает экземпляр (или может повторно использовать существующий) - это деталь реализации). Это шаблон, который вы увидите повсюду - Calendar.getInstance(), например. Иногда вы можете вызвать конструктор вместо этого, иногда вы можете только создать экземпляр с помощью статического метода.

Если что-то не происходит под капотом, вероятно, что где-то в реализации будет вызов конструктора. Вот тривиальный пример:

public final class CreateViaMethod {
    private final String name;

    private CreateViaMethod(String name) {
        this.name = name;
    }

    public static CreateViaMethod newInstance(String name) {
        return new CreateViaMethod(name);
    }
}

Существуют разные причины, по которым разработчик API может сделать это. Например, может быть несколько методов «создания» с одинаковыми типами параметров, но разные имена, например

public static Duration fromSeconds(int seconds)
public static Duration fromMinutes(int minutes)
public static Duration fromHours(int hours)

... у вас не могло быть трех перегруженных конструкторов, но вы можете дать методы разные имена.

93
задан harriyott 20 September 2008 в 10:22
поделиться

3 ответа

Можно назвать версию командной строки inkscape, чтобы сделать это:

http://harriyott.com/2008/05/converting-svg-images-to-png-in-c.aspx

Также существует механизм визуализации C# SVG, прежде всего, разработанный, чтобы позволить файлам SVG использоваться в сети на codeplex, который мог бы удовлетворить Вашим потребностям, если это - Ваша проблема:

Исходный Проект
http://www.codeplex.com/svg

Ветвление с мерами и больше действия: (добавил 7/2013)
https://github.com/vvvv/SVG

67
ответ дан harriyott 5 November 2019 в 13:30
поделиться

Я использую Батик для этого. Полный код 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;
7
ответ дан stevenvh 5 November 2019 в 13:30
поделиться

можно использовать lib altsoft xml2pdf для этого

-2
ответ дан 5 November 2019 в 13:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: