В рамках проекта LibreOffice начата разработка библиотеки на C++ для чтения файлов Corel DRAW. В затылок им дышит разработчик Calligra Suite с собственной реализацией поддержки CDR.
Чего уж там скрывать: за почти пять лет существования проекта UniConvertor прогресс в отношении файлов Corel DRAW более чем скромен. UC так и не ушёл сильно дальше поддержки страниц, кривых Безье, заливок и обводок. Какие бы на то у команды ни были причины, принципиальных улучшений давно не видно, впрочем, равно как и самой разработки.
В прошлом году искренне ваша команда re-lab успела ещё немного изучить формат CDR, пока переносила его парсер в OLE Toy — ранее созданную нами программу для исследования двоичных форматов.
Полученную новую информацию, к сожалению, пристроить к делу было некуда. Нельзя сказать, чтобы нас это очень вдохновляло на новые трудовые подвиги. К счастью, уже знакомый вам Фридрих Штрба из команды LibreOffice пришёл на помощь и в конце ноября написал первый код парсера файлов CDR.
Активная работа над проектом началась лишь на прошлой неделе, но буквально вчера Фридрих выпустил первую версию библиотеки с минимальной поддержкой файлов CDR.
Что в библиотеке
По структуре и составу библиотека libcdr очень похожа на libvisio: в ней есть парсер и пробный конвертер в SVG, который сохраняет рисунки SVG внутрь документа XHTML. Если он находит в CDR несколько страниц, каждая из них сохраняется внутри XHTML как новый встроенный рисунок SVG.
Кроме того, если пересобрать LibreOffice с поддержкой libcdr, файлы Corel DRAW будут открываться в нём напрямую. Словом, никаких отличий от libvisio.
Что поддерживается
На текущий момент библиотека читает только файлы v7-X3 и конвертирует основные объекты: контуры, прямоугольники, эллипсы, секторы, дуги. Частично поддерживается цветная заливка, есть минимальная поддержка обводки. Забороть многоугольники пока не удалось, но мы работаем над этим.
Некоторые ошибки вроде чтения размера страницы и ориентации прямоугольников были исправлены сразу после выпуска версии 0.0.1. В связи с этим всем, кто интересуюется проектом, советуем тестировать только код из Git и почаще обновлять локальную копию репозитория.
Сложности
Давайте сразу договоримся, что как и в случае с Visio поддерживать абсолютно все возможности формата не получится. Например, ни в OpenDocument, ни в SVG нет раздельного скругления углов прямоугольника.
Поэтому cdr2xhtml честно конвертирует такие фигуры в кривые Безье.
Согласитесь, что для использования клипарта и старых наработок в режиме «как есть» этого более чем достаточно.
Отдельный вопрос — как быть с CMYK и плашечными цветами. Вообще говоря, OpenDocument немного знает про CMYK: при работе с векторными графическими объектами в LibreOffice их заливку можно задать и в этой цветовой модели. Но на текст, например, это уже не распространяется. Здесь возникают разные варианты, что делать с такими цветами; решение пока не принято.
Что касается SVG, в нём CMYK поддерживается через icc-color, и это вполне приемлемо, поскольку Corel DRAW работает примерно так же и даже сохраняет цветовые профили прямо в CDR. Больше того, в SVG2 планируется поддержка некалиброванных устройств вывода, так что можно будет вбивать значение CMYK без привязки к цветовым профилям.
Иными словами, libcdr нужно просто уметь отдавать цвета как есть или, по выбору клиентского приложения, конвертировать их в RGB.
О будущем
Фридрих планирует дополнительно попиарить проект на конференции FOSDEM, которая пройдёт на этих выходных в Брюсселе, и в любом случае продолжит писать код. Искренне ваша команда re-lab со своей стороны будет и дальше помогать LibreOffice с реверс-инжинерингом..
Где взять, как собрать и использовать
Процедура абсолютно та же, что и для libvisio. Подробности можно узнать из конца статьи про Visio/LibreOffice. Краткий вариант прилагается.
Забираем код из Git:
$ git clone git://anongit.freedesktop.org/libreoffice/libcdr
Собираем:
$ ./autogen.sh && ./configure && make && sudo make install
Используем конвертер:
$ cdr2xhtml file.cdr > file.xhtml
Используем любимый текстовый редактор для извлечения встроенного документа SVG в отдельный файл, открываем файл в Inkscape.
Как обычно, ждите новостей.
Стоп, а что с Calligra Suite?
О, да. Фридрих Коссебау из команды Calligra Suite начал работать над собственным импортировщиком CDR для Karbon. Он посмотрел на libcdr, но решил создать парсер RIFF для Qt, и уже на его основе написать импортировщик CDR.
Любопытно, что в лучших традициях любительской палеонтологии Фридрих №2 собирается сконцентрировать внимание на четвёртой и пятой версиях формата. Как видите, импорт контуров у него работает. Библиотека libkoralle, которая и выполняет разбор файлов RIFF, тоже публично доступна.
Три проекта для поддержки одного формата — это как-то многовато. Но давайте всё-таки посмотрим, что из этого выйдет.
Оставить комментарий