如何区分两个 odt 文件之间的样式?

如何区分两个 odt 文件之间的样式?

如何区分两个不同的开放文档文本文件 (odt) 中嵌入的样式?

例如,人员A创建一个文件并修改标题/标题样式,将文档存储在共享驱动器中。 B对样式进行了修改并另存为,但修改很微妙。哪个工具可以让我知道修改了哪种样式?

需要“解压”odt 文件的解决方案是有效的。

仅仅比较 styles.xml 是行不通的,因为所有内容都在一行上,如果它们不严格相同,它会认为所有内容都已更改。

答案1

如果你有解压XML2安装后,你可以这样做:

#!/bin/bash

a="$1"
b="$2"

diff -u <(unzip -p "$a" styles.xml | xml2) \
        <(unzip -p "$b" styles.xml | xml2)

xml2将 XML 文件转换为适合使用面向行的工具(例如grepsedcut、 当然还有diff. AFAICT,它是废弃软件(参见xml2 去哪儿了?)但它仍然是非常有用的废弃软件,并且仍然由一些发行版打包(例如sudo apt-get install xml2在 Debian 及其衍生版本上)。

注意:.odt 多年来发生了很大变化,因此某些版本的 .odt 文件可能会将样式保留在 zip 文件中的不同文件(或子目录)中。如果您遇到其中一个,则必须修改脚本以首先检查每个 .odt 文件(例如使用unzip -vl)以找出它的样式文件类型及其位置。

就我个人而言,我不会在 bash 或任何其他 shell 中做比上面的脚本更复杂的事情。我倾向于使用 perl 的ODF::lpOD或 DIY 与存档::Zip以及 perl 的 XML 处理模块之一(也许XML::简单)。或许算法::差异也。


顺便说一句,如果您不知道.odt文件只是一个 zip 文件,其中包含 XML、图像和其他文件,位于 zip 的顶级目录或子目录中。

相关内容