0

openoffice/libreoffice API を使用して ODT ドキュメントを生成していますが、ファイルが毎回 100% 同一になるようにしたいと考えています (MD5 比較による)。

この時点で、異なる時間に生成された 2 つのファイルを解凍し、zip ファイル内のすべてのファイルをチェックすると、2 つの固有の違い (両方とも RSID 関連) がある Settings.xml を除いて、すべてが 100% 一致します。

<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>

これは元のドキュメントをマージして追跡するためのものであることがわかりましたが、とにかくこれらをマージする予定はないので、制御する固定値にしたいのですが、設定する場所が見つかりませんこれらのプロパティ。

いくつかのオプション (以下) を試してプロパティを出力しましたが、これまでのところ見つけることができませんでした。私が(コーディングして)ファイルを解凍し、XMLを変更せずに、RSIDをオーバーライドする方法はありますか?

// 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);
4

1 に答える 1

1

簡単な解決策は、パッケージ Zip の settings.xml 部分を単純に削除することです。これはすべて実装に依存する内容であり、生成するドキュメントには関係ありません。

パッケージにはなくてもマニフェストにまだ含まれていることが懸念される場合は、別の方法として、settings.xml を、スキーマを尊重し、それを達成するために最も必要とされていない標準的なものに置き換えることもできます。

openoffice/libreoffice の異なる実行が content.xml およびパッケージ パーツの名前に異なる UUID および UIID ベースの識別子を埋め込む可能性があるという条件があることに注意してください。APIを介したあなたの生成は、それらのいずれにもつながらないようです。

于 2013-05-19T17:04:28.227 に答える