我正在使用openoffice/libreoffice API生成ODT文档,我希望每次生成的文件都是100%相同的(通过MD5比较)。
此时,我可以解压缩在不同时间生成的两个文件,并检查压缩文件中的所有文件,它们都是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);发布于 2013-05-20 01:04:28
简单的解决方案是简单地删除压缩包中的settings.xml部件。这是所有依赖于实现的材料,对于您正在生成的文档来说,这应该无关紧要。
如果您担心它仍然在清单中,尽管它不在包中,另一种选择是用您创建的支持该模式的标准模式替换settings.xml,并且实现这一点所需的时间最少。
请注意,在某些情况下,openoffice/libreoffice的不同运行可能会在content.xml和包部件的名称中嵌入不同的UUIDs和基于UIID的标识符。看起来您通过API生成的代码并不会导致任何这些问题。
https://stackoverflow.com/questions/16636532
复制相似问题