Здравствуй, читатель! Ты когда-нибудь занимался переводом своего офиса/школы/института/друзей на Linux? Помнишь, как долго и упорно ты доказывал, что это — путь добра и света? А помнишь первую проблему, из-за которой пришлось все вернуть назад? Дай угадаю. Первый документ созданный в LibreOffice или OpenOffice отказался корректно открываться в MS Office? Слезы, сопли и мольбы оставить Linux ни к чему не привели? Утри нос, читатель! Под катом — о том, как подружить LibreOffice 3.5 и MS Office 2010 так, чтобы все везде открывалось одинаково.
Корень всех зол
Я, если и не сходу, очень быстро дошел до того, что работа с хорошо структурированными документами позволяет в будущем избежать многих проблем с их использованием. Все эти кучи пробелов для сдвига текста вправо и использование кнопки «Жирно» вместо использования стилей были мне чужды. В отличие от многих моих коллег, я тратил больше времени на подготовку структуры документа, чем на его содержимое, зато все мои документы были аккуратными и изменять их было одно удовольствие.
Когда пришел тот прекрасный день, когда я пересел с MS Office на LibreOffice, я заметил, что содержимое многих моих документов осталось цело и так же аккуратно отформатировано. Уже тогда, я знал, что документы должны искажаться и ломаться при переходе, но это касалось только некоторых моих документов (как правило, с векторной графикой внутри). Мой внутренний программист требовал исследовать этот удачный опыт. Оказалось, что если придерживаться некоторых правил при форматировании документа, он будет полностью переносим между LibreOffice и MS Office.
Unit-tests
Чтобы узнать, какие именно элементы форматирования «слетают» при переносе, я разделил все на минимальные части и группы. Так, для начала нужно было рассмотреть форматирование целых страниц, затем абзацев, затем букв, таблиц, списков, изображений и так далее. Всего получилось 10 групп, а именно:
- Страницы
- Колонтитулы
- Колонки
- Абзацы
- Символы
- Списки
- Изображения
- Таблицы
- Рецензирование
- Поля
В каждой группе содержится несколько тестируемых компонентов. Так, в группе страницы такими элементами являются: формат, ширина, высота, ориентация, поля и т.д. Каждый компонент тестируется отдельно от предыдущего с надеждой, что если каждый в отдельности пройдет тест, то и вместе они будут отображаться правильно.
Тестирование проходило следующим образом. Для каждого компонента создается отдельный файл в LibreOffice 3.5, в котором данному компоненту устанавливается некоторое известное значение. Например, для тестирования форматов страниц было создано четыре файла со значениями этого компонента: A6, A5, A4, A3 — для тестирования ширины, один файл со значением ширины в 10 см. Каждый файл имел уникальное имя — числовой идентификатор. Так же был создан журнал тестирования — электронная таблица с перечислением всех тестируемых компонентов, их идентификаторов (именно этот идентификатор записывается в качестве имени файла) и флагов: прошел тестирование или нет в LibreOffice и MS Office. Далее каждый файл открывался сначала в LibreOffice, затем переносился на машину с Windows и открывался в MS Office. Все изменения значений компонентов изучались и записывались.
Забегая вперед
Результаты оказались крайне интересными. Оказывается оба этих редактора прекрасно уживаются. С их помощью можно создавать не только простенькие документы с отбивкой с помощью пробелов, но и целые договоры с нумерацией глав и автоматической нумерацией пунктов договора. Так же я узнал, что если в качестве значения конкретного компонента в LibreOffice установить значение, сохранить документ в doc, выйти и снова открыть документ, это значение может сброситься в ноль. Это означает, что LibreOffice отключает данный компонент из-за того, что он не реализован в MS Office! Так, например, если вы зададите надчеркивание текста и сохраните документ в doc, то после повторного открытия в LibreOffice это форматирование будет просто сброшено. Это вызвано тем, что в MS Office нет надчеркивания текста.
Обо всем понемногу
Теперь коротко о каждой группе и правилах оформления для обеспечения переносимости.
Страницы
Все основные форматы страниц (A6-3) прекрасно переносятся между редакторами, но так как в MS Office форматы A6 и A5 не определены, то станица просто имеет «Особый размер», соответствующий этим форматам.
Ширина, высота и ориентация так же отлично переносятся, как и поля страницы, чего нельзя сказать о цветном фоне, и дело вовсе не в MS Office (он-то прекрасно отображает выбранный в LibreOffice цвет фона страницы), как ни странно именно первый отказывается закрашивать страницу в нужный цвет!
Если вы хотите нарисовать границы страницы, то никаких проблем с переносимостью не возникнет, но вот отступы использовать не получится, лучше заменить их на поля.
Нужно смешать в одном документе книжную и альбомную ориентацию? Дерзайте! Используйте для этого разрыв страницы и никаких проблем с переносимостью у вас не возникнет!
Колонтитулы
Ничего сложного, если следовать четырем простым правилам:
- Всегда включайте колонтитулы в документ, даже если они пусты
- Высота всегда должна быть установлена в значение 0,10 см, используйте для задания высоты колонтитула компонент Интервал
- Реальная высота поля страницы = поля + интервал колонтитула + 0,10 см
- Не используйте границы и поля в колонтитулах
Таблицы и нумерация в колонтитулах отлично переносятся.
Колонки
С этим нет никаких проблем, любое число колонок, их ширина и интервал между ними переносятся без проблем.
Абзацы
Отступы, интервалы, поля, цвета, выравнивание и границы переносимы, вертикальное выравнивание — нет (выравнивание строки относительно центральной оси предложения), ведь в MS Office оно отсутствует.
Символы
Из форматирования шрифтов не работает надчеркивание и… больше ничего! Все остальное прекрасно переносится.
Списки
Самое сложное. Тут крайне важна правильная структура и проще всего ее добиться именно в LibreOffice. Маркированный и нумерованный списки переносятся нормально, проблема возникает с уровнями списка, они просто сбрасываются при переносе. Выходом является использование команд На уровень вниз и На уровень вверх в LibreOffice, а так же правильное использование окна Маркеры и нумерация. Немного «белой магии» и списки переносятся отлично.
Изображения
Совершенно никаких сложностей, важно лишь помнить, что привязка возможна только К символу или Как символ, а перед изображением лучше оставлять одну пустую строку (иначе они поменяются местами). Крайне не советую пользоваться встроенными векторными редакторами, лучше картинки ;)
Таблицы
Вообще никаких проблем, переносятся чисто.
Рецензирование
Примечания, удаление текста и добавление текста работают отлично при переносе. Также оба редактора нормально обрабатывают механизмы Отмены и Приемки изменений.
Поля
Смог создать поле Дата в определенном формате, на этом и закончил.
Пора прощаться
Напоследок о самом главном. Хорошая структура документа — залог его переносимости! И несколько важных советов:
- Не используйте пробелы или табуляцию для сдвига текста в край, для этих целей есть отступы, выравнивание или в крайнем случае таблицы
- Используйте стили везде и всегда, это позволит вам в будущем изменять документ в пару кликов
- Не позволяйте другим копаться в вашем документе, изменяя его. Просите помечать изменения и изменяйте документ сами, это сбережет структуру документа от потных ручонок
- Попробуйте LibreOffice. До этого теста я был убежден, что единственным действительно стоящим решением MS (да уберегут меня боги Linux от холивара) является их офис, и как же я был удивлен, что в LibreOffice есть больше компонентов форматирования. Не верите — попробуйте сами!
- Не используйте сложное формирование документа. Нужен красочный буклет — забудьте о переносимости. Редакторы просто не понимают векторную графику друг друга
- Подготовьте все документы и проверьте их на разных редакторах заранее, это сбережет вам нервы в будущем
- PDF отлично отображается на любых редакторах, LibreOffice и MS Office умеют экспортировать документ в этот формат. Понимаете намек?
Полезные ссылки
Все тесты и примеры на Github. Здесь вы найдете (в перспективе) еще и готовые шаблоны различных документов и договоров, протестированные и гарантированно переносимые. Присоединяйтесь!