我正在使用 openoffice/libreoffice API 生成 ODT 文档,并且我希望文件每次都 100% 相同(通过 MD5 比较)。
此时,我可以解压缩在不同时间生成的两个文件并检查 zip 文件中的所有文件,它们都匹配 100%,除了 Settings.xml 有两个独特的差异(都与 RSID 相关)。
<config:config-item config:name="Rsid" config:type="int">1835643</config:config-item>
和
<config:config-item config:name="RsidRoot" config:type="int">1835643</config:config-item>
我了解到这是为了合并和跟踪原始文档,但我希望它们是我控制的固定值,因为我不打算合并它们,但我找不到在哪里设置这些属性。
我已经尝试了一些选项(如下)并输出了属性,但到目前为止还没有找到。有没有一种方法可以覆盖 RSID,而无需我(编码)解压缩文件并修改 XML,我现在已经完成了,但感觉有点尴尬所以仍在寻找这个。
// Looking for RSID in all the wrong places - test 1
XPropertySet xSettings = (XPropertySet) xRemoteServiceManager.createInstanceWithContext("com.sun.star.document.Settings", componentContext);
// Looking for RSID in all the wrong places - test 2
Object configProvider = xRemoteServiceManager.createInstanceWithContext( "com.sun.star.configuration.ConfigurationProvider", componentContext);
XMultiServiceFactory xConfigProvider = (XMultiServiceFactory) UnoRuntime.queryInterface( XMultiServiceFactory.class, configProvider);
PropertyValue[] lParams = new PropertyValue[1];
lParams[0] = new PropertyValue();
lParams[0].Name = "nodepath";
lParams[0].Value = "/";
Object xAccess = xConfigProvider.createInstanceWithArguments( "com.sun.star.configuration.ConfigurationUpdateAccess" , lParams);
XNameAccess xNameAccess = (com.sun.star.container.XNameAccess) UnoRuntime.queryInterface(XNameAccess.class, xAccess);