我正在开发一个打开一个或多个.odt文档的应用程序,并允许N个不同的客户端查看和编辑这些文档,而不是同时查看和编辑这些文档。关键是,我需要将部分或整个文档复制到另一个新文档,以便另一个客户端可以编辑它。
为了复制文档,我在原始文档中逐个获得段落并将其复制到新的可编辑文档中。到目前为止,我对文本没有任何问题(顺便说一下,感谢stackoverflow),但我无法知道当前段落是文本还是图形,并复制该图形;实际上,图形被解释为空白段落。
我已经看过几个答案,包括export images and graphics in doc files to images in openoffice,这有点帮助,但不符合我的需求,因为我需要知道图像的位置并将其放入新文档中与原始订单的订单相同。
在使用它之前打开文档,我有这个代码来处理它:
XTextDocument xTextDocument = (XTextDocument)UnoRuntime.queryInterface( XTextDocument.class,xComp );
XText xText = xTextDocument.getText();//Get the text from the open document
XEnumerationAccess xEnumerationAccess = (XEnumerationAccess)UnoRuntime.queryInterface( XEnumerationAccess.class,xText );
XEnumeration xParagraphEnumeration = xEnumerationAccess.createEnumeration();//Get every paragraph in the document
try
{
while ( xParagraphEnumeration.hasMoreElements() )
{
XTextContent xTextElement = (XTextContent)UnoRuntime.queryInterface( XTextContent.class,xParagraphEnumeration.nextElement() );
aParagraphs.add(xTextElement);//Store the paragraphs
XServiceInfo xServiceInfo = (XServiceInfo)UnoRuntime.queryInterface( XServiceInfo.class,xTextElement );
System.out.println("Document(Document,Index - Supported Services");
String [] aS = xServiceInfo.getSupportedServiceNames();//What are your supported services?
for( int i=0 ; i<aS.length ; i++ )
System.out.println("Document(Document,Index) - " + aS[i]);
if( xServiceInfo.supportsService("com.sun.star.text.TextGraphicObject") )//Are you a graphic?
System.out.println("Document(Document,Index) - This is a graphic.");
else if( xServiceInfo.supportsService("com.sun.star.text.Paragraph") )//Are you text??
{
//b.copyParagraphFormat(j,xTextCursor);
//xText.insertTextContent(xTextCursor, b.getParagraphs().get(j), false);
//xText.insertString(xTextCursor, b.getParagraphs().get(j).getAnchor().getString(), false);
System.out.println("Document(Document,Index) - This is text.");
}
else //Are you anything else?
System.out.println("Document(Document,Index) - This isn't either graphic nor text??");
}
}
处理包含一些段落和图像的文档,结果是:
文件(文件,索引支持的服务
文件(文件,索引) - com.sun.star.text.TextContent
文件(文件,索引) - com.sun.star.text.Paragraph
文件(文件,索引) - com.sun.star.style.CharacterProperties
文件(文件,索引) - com.sun.star.style.CharacterPropertiesAsian
文件(文件,索引) - com.sun.star.style.CharacterPropertiesComplex
文件(文件,索引) - com.sun.star.style.ParagraphProperties
文件(文件,索引) - com.sun.star.style.ParagraphPropertiesAsian
文件(文件,索引) - com.sun.star.style.ParagraphPropertiesComplex
文件(文件,索引) - 这是文字
不仅对于文本段落(这是正确的),而且对于图像也是如此。最后,我的问题是:我怎样才能知道给定的XTextContent是文本还是图形?或许,问题应该是:如何让代码将图形处理为图形而不是段落(意思,文本)?
对不起我的英文和长篇文章,并提前感谢你。