API для чтения DWF и DWFx

Автор Тема: API для чтения DWF и DWFx  (Прочитано 17270 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн VetalBYАвтор темы

  • ADN Club
  • Сообщений: 44
  • Карма: 3
API для чтения DWF и DWFx
« : 16-03-2017, 18:25:41 »
Есть ли в свободном доступе API для чтения DWF и DWFx?
DWF Toolkit скачать не могу, чтобы посмотреть http://www.autodesk.ru/adsk/servlet/autoindex?siteID=123112&id=823765
Или нужно что-то другое?

Отмечено как Решение Александр Ривилис 17-03-2017, 13:41:34

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: API для чтения DWF и DWFx
« Ответ #1 : 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
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн VetalBYАвтор темы

  • ADN Club
  • Сообщений: 44
  • Карма: 3
Re: API для чтения DWF и DWFx
« Ответ #2 : 17-03-2017, 11:20:23 »
Спасибо! Скачал, буду смотреть.
Александр, работали ли Вы с этим API и если появятся вопросы, можно их задавать здесь? :)
Пока задача простая: достать текст и работа с пометками.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: API для чтения DWF и DWFx
« Ответ #3 : 17-03-2017, 13:43:59 »
Александр, работали ли Вы с этим API и если появятся вопросы, можно их задавать здесь? :)
Если честно, то я лет десять назад что-то с ним делал, но сейчас даже исходников не нашёл.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
Re: API для чтения DWF и DWFx
« Ответ #4 : 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
но скачать с нее ничего не дают.
Есть ли у кого ни будь возможность скачать от туда примеры и поделиться?

Оффлайн VetalBYАвтор темы

  • ADN Club
  • Сообщений: 44
  • Карма: 3
Re: API для чтения DWF и DWFx
« Ответ #5 : 05-02-2019, 11:36:50 »
С примерами не помогу, но приходилось сталкиваться немного с dwfx (не путать с dwf) и поделюсь информацией, может будет полезно:
1. DWFX это по сути майкрософтоский XPS, для которого есть API на .NET. Правда, мне это не помогло, так как DWFX - это, скажем так, расширенный XPS и не все читается с помощью его API
2. DWFX (он же XPS) по сути своей есть zip архив. Поэтому можно изменить расширение на zip и просмотреть его. Изучив его структуру, можно попытаться всё, что нужно, вычитать с помощью .NET без проблем. Именно этим вариантом я и воспользовался.

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
Re: API для чтения DWF и DWFx
« Ответ #6 : 05-02-2019, 13:40:22 »
DWFX (он же XPS) по сути своей есть zip архив. Поэтому можно изменить расширение на zip и просмотреть его. Изучив его структуру, можно попытаться всё, что нужно, вычитать с помощью .NET без проблем. Именно этим вариантом я и воспользовался.
да это то понятно, по структуре он напоминает xlsx и подобные форматы и распарсить его не сложно... но вдруг есть нормальный инструмент... если нет, то придется делать самому =(

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: API для чтения DWF и DWFx
« Ответ #7 : 05-02-2019, 14:26:28 »
Владимир Шу,
В DWFToolkit есть примеры. И достаточно много. Но они все на С++.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
Re: API для чтения DWF и DWFx
« Ответ #8 : 05-02-2019, 15:08:42 »
Но они все на С++
Да, именно по этому я и спрашивал, может ли кто ни будь скачать пример на С#, который есть по ссылке.

ЗЫ.
Лано, для моих целей пока вполне достаточно разархивировать файл и из файла DWFDocumentSequence.dwfseq который в корне архива взять ссылку на файл манифеста, ну а там понятно: перебираешь dwf:Section , смотришь что за файл dwg и  что там за пометки в файле по ссылке в поле "markup object definition" ... для моих скромных потребностей пока достаточно...

Оффлайн VetalBYАвтор темы

  • ADN Club
  • Сообщений: 44
  • Карма: 3
Re: API для чтения DWF и DWFx
« Ответ #9 : 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.         }