以前に .odt ドキュメントに挿入したテキスト フィールドを削除したいと考えていました。content.xml では、次のようになります。
<text:user-field-decls>
<text:user-field-decl text:name="id" office:string-value="${baza.id}" office:value-type="string"/>
...
</text:user-field-decls>
ここで読んだように、何かを削除する方法は、dispose() メソッドを持つインターフェイスにキャストすることです。次のコードを試しました。
XTextFieldsSupplier xTextFieldsSupplier = (XTextFieldsSupplier) UnoRuntime.queryInterface(
XTextFieldsSupplier.class, xDoc);
XNameAccess xNamedFieldMasters = xTextFieldsSupplier.getTextFieldMasters();
Object fieldMaster = xNamedFieldMasters.getByName("com.sun.star.text.fieldmaster.User."+name);
((XComponent)fieldMaster).dispose()
name は、削除したいフィールドの名前です。このフィールドは、宣言以外のドキュメントのどこにも使用されていないと思います。ただし、ClassCast 例外がスローされます。
java.lang.ClassCastException: com.sun.star.uno.Any cannot be cast to com.sun.star.lang.XComponent
最後の行に。その場合、どうすればフィールドを削除できますか?