Pull to refresh

LibreOffice Writer + Спецификация C#5

Введение


Периодически обращаясь к спецификации языка C# пятой версии, мой мозг был съеден когда я открыл спецификацию в LibreOffice Writer и обнаружил что на титульной странице спецификации по пятой версии языка было написано «C# Language Specification version 4.0». Если открыть спецификацию в Microsoft Word, то на титульной странице будет написано, как и положено, «C# Language Specification version 5.0».

Основная часть


Чтобы разобраться в особенностях вывода LibreOffice Writer, я залез в файл document.xml, который находится внутри docx. Файл document.xml содержит основные данные документа (текст). Внутри этого файла, на том месте где должен содержаться текст с номером версии, оказалось следующее:

<w:r w:rsidR="00584423">
    <w:instrText xml:space="preserve">DOCPROPERTY  Version  \* MERGEFORMAT </w:instrText>
</w:r>


«DOCPROPERTY Version» означает, что версия, указанная на титульной странице, берётся из свойства документа Version, которое определяется пользователем. Посмотрев значение этого поля в свойствах документа, обнаружилось что этому полю задано значение «4.0»!



Получается что LibreOffice оказался прав и вывел то значение, которое задано, но стало непонятно почему тогда в Microsoft Word отображается версия 5.0, хотя в документе задана 4.0.

В Microsoft Word существует одна особенность интерпретации полей, выводимых в документе: текст значения выводимого поля можно заменить любым текстом. Заглянув в файле document.xml чуть подальше, было обнаружено следующее:

<w:r w:rsidR="00F56C94">
	<w:rPr>
		<w:rFonts w:ascii="Arial" w:hAnsi="Arial"/>
		<w:b/>
		<w:sz w:val="28"/>
		<w:szCs w:val="28"/>
	</w:rPr>
	<w:t>5</w:t>
</w:r>
<w:r w:rsidR="00F56C94" w:rsidRPr="00437C65">
	<w:rPr>
		<w:rFonts w:ascii="Arial" w:hAnsi="Arial"/>
		<w:b/>
		<w:sz w:val="28"/>
		<w:szCs w:val="28"/>
	</w:rPr>
	<w:t>.0</w:t>
</w:r>


Получается что выводимый текст со значением поля был просто заменён вручную, и данная замена видна только в Word'е. LO Writer данный текст игнорирует и выводит значение поля. Узнать факт замены текста в данном случае невозможно.

Заключение


LibreOffice Writer и Microsoft Word по-разному обрабатывают значения полей, что может привести к странным ситуациям вроде этой. Помимо этого, из-за такого рода расхождений в обработке, можно легко скрывать и фальсифицировать информацию, если заранее известно что документ будет просматриваться в LO Writer.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.