システムクリップボードに保存するときに、Javaプログラムでテキストのフォーマットを保持する方法を理解しようとすると問題が発生します。
MicrosoftのワードパッドやLotusSymphonyなどでは機能しません。逆に、Wordでフォーマットされた文字列を作成してコピーすると、貼り付けようとするすべてのトライアルケースで正しく機能します。
org.eclipse。*などの外部ソースを使用したくありません。
これが私が正しい方向に向けられるのを助けるかもしれない私が編集したいくつかのリンクです。
適切なデータフレーバーを使用していないように感じますか? http://docs.oracle.com/javase/1.5.0/docs/api/java/awt/datatransfer/DataFlavor.html
私はこのリンクを見つけました。これはデータフレーバーについて多くを語っていますが、フォーマットされたテキストにどのリンクを使用するかについてはあまり明らかにしていません。これはすべてのOSで同じではない可能性があることは理解していますが、使用しているOSでサポートされていることを確認する必要があります。
高度なご協力に感謝します。本当に感謝しています。
ダン
編集
私は現在、http://lists.apple.com/archives/java-dev/2004/Jul/msg00359.htmlからいくつかのコードを使用していますが、いくつかの小さな変更があります。私が現在抱えている問題は、2つの異なる形式でデータをクリップボードに送信する必要があることです。一部のプログラムを表示する「text/rtf」および「text/plain」は、RTFをサポートしていません。クリップボードの内部を使用して、クリップボードの内部を確認しています。RTFまたはプレーンテキストのいずれかを正常に配置できますが、両方を同時に配置することはできません。私がそうするとき、最後のものだけが追加されます。あなたの助けは大歓迎です!
要約すると、2つの異なるデータフレーバーでクリップボードを同時に設定することはできません。
import java.awt.datatransfer.*;
import java.io.*;
public class clipBoard
{
public static final String RTF_STRING = "{\\rtf1\\ansi\\deff0 {\\fonttbl {\\f0 Courier;}}\r \n{\\colortbl;\\red0\\green0\\blue0;\\red255\\green0\\blue0;}\r\nThis line is the default color\\line\r\n\\cf2\r\n\\tab This line is red and has a tab before it\\line\r\n\\cf1\r\n\\page This line is the default color and the first line on page 2\r\n}\r\n";
public static final DataFlavor RTF_FLAVOR = new DataFlavor("text/rtf", "Rich Formatted Text");
public static void main(String[] args){
Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
Transferable t = new MyTransferable(
new ByteArrayInputStream(RTF_STRING.getBytes()), RTF_FLAVOR);
cb.setContents(t, null);
}
static class MyTransferable implements Transferable
{
private Object data = null;
private DataFlavor flavor;
public MyTransferable(Object o, DataFlavor df)
{ data = o; flavor = df; }
public Object getTransferData (DataFlavor df) throws
UnsupportedFlavorException, IOException
{
if (!flavor.isMimeTypeEqual(flavor))
throw new UnsupportedFlavorException(df);
return data;
}
public boolean isDataFlavorSupported (DataFlavor df)
{
return flavor.isMimeTypeEqual(df);
}
public DataFlavor[] getTransferDataFlavors()
{
DataFlavor[] ret = {flavor};
return ret;
}
}
}