суббота, 14 июля 2012 г.

Разбор файла чертежа из SolidWorks 2007 и выше (заметки по MATERIALTREE)

Доброго времени суток.

Данный подход был не верен, так как выполняя код:
POIFSDocument doc = new POIFSDocument("MATERIALTREE", new FileInputStream(file))
я всегда получал сам файл, по это причине я его не мог раскрыть.


Чтение дерева материалов из файла описано в данном посте Чтение файла SolidWorks


Старая версия поста:
Заказчик поставил задачу  получать информацию из загруженных на сервер файлов чертежей SolidWorks.


Сделал предварительный обзор файлов SolidWorks, я выявил что они файлы 
базируются на OLE2.  Для работы с данным форматом файлов я использую http://poi.apache.org/

На сайте poi apache есть  простые примерчы как можно порчитать иформацию из файла.
При изучении содержимого файла, я натснулся на поле с именем "MATERIALTREE", мне зажотелось получить данные из этого поля, но тут то и были грабли....

Для начала, я не смог обратится простым способом так как DocumentInputStream и PropertySet мне отвечали NoPropertySetStreamException. Я нащел альтернативный подход к данному свойству: 
POIFSDocument doc = new POIFSDocument("MATERIALTREE", new FileInputStream(file))
 В результате мы получаем объект POIFSDocument который в себе содержет HexDump.
При разборе данного Hex-а:



        Object[] objs = doc.getViewableArray()
        Hex.decode(objs[0].toString())


Я получил примерно следующие:
00000000 D0 CF 11 E0 A1 B1 1A E1 00 00 00 00 00 00 00 00 ................
00000010 00 00 00 00 00 00 00 00 3E 00 03 00 FE FF 09 00 ........>.......
00000020 06 00 00 00 00 00 00 00 00 00 00 00 06 00 00 00 ................
00000030 02 00 00 00 00 00 00 00 00 10 00 00 58 01 00 00 ............X...
00000040 03 00 00 00 FE FF FF FF 00 00 00 00 03 00 00 00
Потратив на разбор некоторое время, я наткнулся на сайт http://open-file.ru/, где по hex заголовку удалось выяснить данный hex может относится к :


ФорматТипОписание
.fpxРастровые изображенияФайл изображения FlashPix
HEXD0 CF 11 E0 A1 B1 1A E1 00 00 00 00 00 00 00 00
.p65ИзображенияДокумент PageMaker 6.5
HEXD0 CF 11 E0 A1 B1 1A E1 00 00 00 00 00 00 00 00
.pm6Размеченные документыДокумент PageMaker 6.0
HEXD0 CF 11 E0 A1 B1 1A E1 00 00 00 00 00 00 00 00
.qxИсходный кодИсходный код Quexal
HEXD0 CF 11 E0 A1 B1 1A E1 00 00 00 00 00 00 00 00


....




пока это все наблюдения по разбору POIFSDocument "MATERIALTREE"
to be continued...

Комментариев нет:

Отправить комментарий