How to handle text/html content from Firefox copied to Clipboard
under Linux
Hello,
I post this mail because I need help. The problem is that text/html
content copied to clipboard by Firefox under Linux (ubuntu 8.04) is
corrupted when it is read by Java (e.g. JRE 1.6.0_07) and can not be
used. However text/html content copied by OpenOffice can be obtained
without any problem. As a consequence java based rich text editors can
not paste content from Firefox at all. Other editors like OpenOffice
manage to handle such content too.
The attached java program gets text/html content from Clipboard and
writes it to the standard output.
So you can reproduce the problem by copying parts of internet pages
shown in Firefox to clipboard, running the program and and seeing what
it turns into.
Looking forward to get any comments about this issue,
Dimitry
//-- code example begin
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.io.Reader;
class ClipboardPrinter
{
public static void main( String args[] ) throws Exception
{
Clipboard systemClipboard = Toolkit.getDefaultToolkit()
.getSystemClipboard();
Transferable transferData = systemClipboard.getContents(null);
if (transferData == null) {
System.out.println("no content");
return;
}
DataFlavor htmlReaderFlavor = new DataFlavor(
"text/html; class=java.io.Reader");
if (!transferData.isDataFlavorSupported(htmlReaderFlavor)) {
System.out.println("no text/html reader content");
return;
}
// print raw clipboard data as numbers
Reader reader = (Reader)
transferData.getTransferData(htmlReaderFlavor);
int r = 0;
int i = 0;
while (-1 != (r = reader.read())){
System.out.print(r);
System.out.print('\t');
if (++i % 8 == 0) {
System.out.println();
}
}
System.out.println();
// print encoded clipboard data as string
DataFlavor htmlStringFlavor = new DataFlavor(
"text/html; class=java.lang.String");
if (!transferData.isDataFlavorSupported(htmlStringFlavor)) {
System.out.println("no text/html string content");
return;
}
String content = (String) transferData
.getTransferData(htmlStringFlavor);
System.out.println(content);
}
}
// -- code example end