Сообщество программистов Autodesk в СНГ

ADN Club => Другие продукты Autodesk => Тема начата: VetalBY от 16-03-2017, 18:25:41

Название: API для чтения DWF и DWFx
Отправлено: VetalBY от 16-03-2017, 18:25:41
Есть ли в свободном доступе API для чтения DWF и DWFx?
DWF Toolkit скачать не могу, чтобы посмотреть http://www.autodesk.ru/adsk/servlet/autoindex?siteID=123112&id=823765
Или нужно что-то другое?
Название: Re: API для чтения DWF и DWFx
Отправлено: Александр Ривилис от 16-03-2017, 18:33:45
Нужно именно оно: http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=5522878
Но там они как обычно всё испортили (ссылки не работают).
Так что бери прямые ссылки:
http://download.autodesk.com/esdr/dwftoolkit/DWFToolkit-7.7-bin-x64.zip
http://download.autodesk.com/esdr/dwftoolkit/DWFToolkit-7.7-bin-win32.zip
http://download.autodesk.com/esdr/dwftoolkit/DWFToolkit-7.7-src.zip
Название: Re: API для чтения DWF и DWFx
Отправлено: VetalBY от 17-03-2017, 11:20:23
Спасибо! Скачал, буду смотреть.
Александр, работали ли Вы с этим API и если появятся вопросы, можно их задавать здесь? :)
Пока задача простая: достать текст и работа с пометками.
Название: Re: API для чтения DWF и DWFx
Отправлено: Александр Ривилис от 17-03-2017, 13:43:59
Александр, работали ли Вы с этим API и если появятся вопросы, можно их задавать здесь? :)
Если честно, то я лет десять назад что-то с ним делал, но сейчас даже исходников не нашёл.
Название: Re: API для чтения DWF и DWFx
Отправлено: Владимир Шу от 05-02-2019, 11:12:06
На горизонте замаячила необходимость иногда смотреть на ремарки в dwfx файлах, но как оказалось информации по этому поводу маловато... нашел вот такую страницу https://dwf.blogs.com/beyond_the_paper/2006/11/c_collections_o.html а от нее страничку с примерами кода https://dwf.blogs.com/beyond_the_paper/2006/02/dwf_programming.html
но скачать с нее ничего не дают.
Есть ли у кого ни будь возможность скачать от туда примеры и поделиться?
Название: Re: API для чтения DWF и DWFx
Отправлено: VetalBY от 05-02-2019, 11:36:50
С примерами не помогу, но приходилось сталкиваться немного с dwfx (не путать с dwf) и поделюсь информацией, может будет полезно:
1. DWFX это по сути майкрософтоский XPS, для которого есть API на .NET. Правда, мне это не помогло, так как DWFX - это, скажем так, расширенный XPS и не все читается с помощью его API
2. DWFX (он же XPS) по сути своей есть zip архив. Поэтому можно изменить расширение на zip и просмотреть его. Изучив его структуру, можно попытаться всё, что нужно, вычитать с помощью .NET без проблем. Именно этим вариантом я и воспользовался.
Название: Re: API для чтения DWF и DWFx
Отправлено: Владимир Шу от 05-02-2019, 13:40:22
DWFX (он же XPS) по сути своей есть zip архив. Поэтому можно изменить расширение на zip и просмотреть его. Изучив его структуру, можно попытаться всё, что нужно, вычитать с помощью .NET без проблем. Именно этим вариантом я и воспользовался.
да это то понятно, по структуре он напоминает xlsx и подобные форматы и распарсить его не сложно... но вдруг есть нормальный инструмент... если нет, то придется делать самому =(
Название: Re: API для чтения DWF и DWFx
Отправлено: Александр Ривилис от 05-02-2019, 14:26:28
Владимир Шу,
В DWFToolkit есть примеры. И достаточно много. Но они все на С++.
Название: Re: API для чтения DWF и DWFx
Отправлено: Владимир Шу от 05-02-2019, 15:08:42
Но они все на С++
Да, именно по этому я и спрашивал, может ли кто ни будь скачать пример на С#, который есть по ссылке.

ЗЫ.
Лано, для моих целей пока вполне достаточно разархивировать файл и из файла DWFDocumentSequence.dwfseq который в корне архива взять ссылку на файл манифеста, ну а там понятно: перебираешь dwf:Section , смотришь что за файл dwg и  что там за пометки в файле по ссылке в поле "markup object definition" ... для моих скромных потребностей пока достаточно...
Название: Re: API для чтения DWF и DWFx
Отправлено: VetalBY от 05-02-2019, 16:12:39
Вот примерный код по извлечению листов из dwfx и их свойств на c#

Код - C# [Выбрать]
  1.         private static void ProcessDwfx(string dwfxPath)
  2.         {
  3.             var pageListUri = new List<string>();
  4.             var container = Package.Open(dwfxPath, FileMode.Open);
  5.  
  6.             try
  7.             {
  8.                 foreach (var part in container.GetParts())
  9.                 {
  10.                     if (part.Uri.ToString().EndsWith(".fpage"))
  11.                     {
  12.                         pageListUri.Add(part.Uri.ToString());
  13.                     }
  14.                 }
  15.  
  16.                 foreach (var pageUri in pageListUri)
  17.                 {
  18.                     var xDoc = new XmlDocument();
  19.  
  20.                     int nF = pageUri.LastIndexOf("/", StringComparison.InvariantCulture);
  21.                     var descriptorUri = pageUri.Substring(0, nF + 1) + "descriptor.xml";
  22.                     PackagePart part = container.GetPart(new Uri(descriptorUri, UriKind.Relative));
  23.                     Stream stream = part.GetStream(FileMode.Open, FileAccess.Read);
  24.                     StreamReader reader = new StreamReader(stream);
  25.                     string text = reader.ReadToEnd();
  26.  
  27.                     nF = text.IndexOf(" ", StringComparison.InvariantCulture);
  28.                     text = text.Substring(0, nF + 1) + "xmlns:native=\"http://www.autodesk.com/global/dwf/ePlot.xsd\"" + text.Substring(nF);
  29.  
  30.                     xDoc.PreserveWhitespace = true;
  31.                     xDoc.LoadXml(text);
  32.  
  33.                     //парсим xDoc и достаем свойства листов
  34.                 }
  35.  
  36.             }
  37.             finally
  38.             {
  39.                 container.Close();
  40.             }
  41.         }