ADN Club > Другие продукты Autodesk
API для чтения DWF и DWFx
VetalBY:
С примерами не помогу, но приходилось сталкиваться немного с dwfx (не путать с dwf) и поделюсь информацией, может будет полезно:
1. DWFX это по сути майкрософтоский XPS, для которого есть API на .NET. Правда, мне это не помогло, так как DWFX - это, скажем так, расширенный XPS и не все читается с помощью его API
2. DWFX (он же XPS) по сути своей есть zip архив. Поэтому можно изменить расширение на zip и просмотреть его. Изучив его структуру, можно попытаться всё, что нужно, вычитать с помощью .NET без проблем. Именно этим вариантом я и воспользовался.
Владимир Шу:
--- Цитата: VetalBY от 05-02-2019, 11:36:50 --- DWFX (он же XPS) по сути своей есть zip архив. Поэтому можно изменить расширение на zip и просмотреть его. Изучив его структуру, можно попытаться всё, что нужно, вычитать с помощью .NET без проблем. Именно этим вариантом я и воспользовался.
--- Конец цитаты ---
да это то понятно, по структуре он напоминает xlsx и подобные форматы и распарсить его не сложно... но вдруг есть нормальный инструмент... если нет, то придется делать самому =(
Александр Ривилис:
Владимир Шу,
В DWFToolkit есть примеры. И достаточно много. Но они все на С++.
Владимир Шу:
--- Цитата: Александр Ривилис от 05-02-2019, 14:26:28 ---Но они все на С++
--- Конец цитаты ---
Да, именно по этому я и спрашивал, может ли кто ни будь скачать пример на С#, который есть по ссылке.
ЗЫ.
Лано, для моих целей пока вполне достаточно разархивировать файл и из файла DWFDocumentSequence.dwfseq который в корне архива взять ссылку на файл манифеста, ну а там понятно: перебираешь dwf:Section , смотришь что за файл dwg и что там за пометки в файле по ссылке в поле "markup object definition" ... для моих скромных потребностей пока достаточно...
VetalBY:
Вот примерный код по извлечению листов из dwfx и их свойств на c#
--- Код - C# [Выбрать] --- private static void ProcessDwfx(string dwfxPath) { var pageListUri = new List<string>(); var container = Package.Open(dwfxPath, FileMode.Open); try { foreach (var part in container.GetParts()) { if (part.Uri.ToString().EndsWith(".fpage")) { pageListUri.Add(part.Uri.ToString()); } } foreach (var pageUri in pageListUri) { var xDoc = new XmlDocument(); int nF = pageUri.LastIndexOf("/", StringComparison.InvariantCulture); var descriptorUri = pageUri.Substring(0, nF + 1) + "descriptor.xml"; PackagePart part = container.GetPart(new Uri(descriptorUri, UriKind.Relative)); Stream stream = part.GetStream(FileMode.Open, FileAccess.Read); StreamReader reader = new StreamReader(stream); string text = reader.ReadToEnd(); nF = text.IndexOf(" ", StringComparison.InvariantCulture); text = text.Substring(0, nF + 1) + "xmlns:native=\"http://www.autodesk.com/global/dwf/ePlot.xsd\"" + text.Substring(nF); xDoc.PreserveWhitespace = true; xDoc.LoadXml(text); //парсим xDoc и достаем свойства листов } } finally { container.Close(); } }
Навигация
Перейти к полной версии