2011-09-02 97 views
1

我的Java应用程序使用DocX4J生成DOCX格式的文档。我需要将它发送到剪贴板以粘贴到Word中。我知道Word会消费HTML,但我宁愿不将DOCX转换为HTML(我不确定DocX4J是否支持它,而我不会放松任何格式)。我可以使用什么剪贴板格式(以Java语言DataFlavor)将DOCX数据发送到剪贴板,以便Word能够理解它?DOCX数据的剪贴板格式

我做了类似的事情与OpenOffice文档和我使用

DataFlavor odtFlavor = new DataFlavor("application/x-openoffice-embed-source-xml;"+ 
    "representationclass=java.io.InputStream"); 

我应该如何代表DOCX文档本身?在OpenOffice ODT的情况下,我传递从ODT文件创建的InputStream。

我相信David Thielen在这里提出了类似的问题:What are the clipboard formats for Microsoft Office where you can drop a chart?但是没有答案。

+0

您能解释为什么使用剪贴板吗? – Wivani

+0

我想要实现的功能是将应用程序中的数据复制/粘贴或拖放到用户编写的报告中。用户在MS Word或OO Writer中编写报告。我认为复制/粘贴是将数据从一个应用程序传输到另一个应用程序的非常直观的方式。 – Alla

+0

在我看来,你必须使用适当的mime类型。请参阅[这里](http://filext.com/faq/office_mime_types.php)Word/Office的。 – Wivani

回答

2

最糟糕的情况下,docx4j可以导出到HTML,所以你可以做到这一点。

或者你可以使用RTF。 docx4j使用FOP创建PDF,因此您可以使用XSL FO输出的 创建RTF(FOP可以这样做 - 您的里程可能会有所不同)。

不知道这些会给你更好的质量。可能是 HTML(尽管图像会发生什么?)。

或者你可以做一个基本的DOCX到RTF转换器。

可能有办法使用docx格式。

如果从Word中复制,并且看看它在ClipSpy(二进制提供 从CodeProject源下载),你会看到“嵌入源”是 数据作为OLE一个DOCX。

how to reload saved "Embed Source" clipboard data? 说,你可以通过传递 Clipboard.SetData流对象

似乎取决于你是否要复制/粘贴或拖写自己的“嵌入源” /虽然下降。 进一步查看您的链接What are the clipboard formats for Microsoft Office where you can drop a chart?http://social.msdn.microsoft.com/Forums/en/worddev/thread/84263fb9-61c2-424a-a294-a12f69fd6b1b

+0

Hi @plutext。感谢您的建议。导出为HTML并使用HTML作为剪贴板格式主要适用于我,但HTML转换速度相当慢(最长可达两秒)。这使得它在复制粘贴中不可靠,因为用户可以很快地执行Ctrl + C,Alt-Tab,Ctrl + V。 – Alla