Java - How Coded MAC Decoding Font Information

I am trying to get font information from the Clipboard using MAC .Below is the code to get the value from the Clipboard .

CODE

Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); Transferable contents = clipboard.getContents(null); DataFlavor dfRTF = new DataFlavor("text/rtf", "Rich Formatted Text"); DataFlavor dfTxt = DataFlavor.stringFlavor; boolean hasTransferableRTFText = (contents != null) && contents.isDataFlavorSupported(dfRTF); boolean hasTransferableTxtText = (contents != null) && contents.isDataFlavorSupported(dfTxt); if (hasTransferableRTFText) { try { result = streamToString((InputStream)contents.getTransferData(dfRTF)); System.out.println("dfRTF "+result); } catch (Exception ex) { ex.printStackTrace(); } } else if (hasTransferableTxtText) { try { result = (String)contents.getTransferData(dfTxt); System.out.println("dfTxt "+result); } catch (Exception ex) { ex.printStackTrace(); } } 

and the code returns the MAC decoded value, as shown below:

 dfRTF {\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural \f0\b\fs24 \cf0 Hello WORLD} {\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360 {\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural \f0\b\fs24 \cf0 Hello WORLD} 

I know that \f0\b\fs24 \cf0 Hello WORLD} contains font information, where \b means its BOLD .
How to encode it to get this specific value, as an example I want to know if it is BOLDED or NO. . Tip.

+4
source share
2 answers

If I understand correctly what you need, you can try to convert it to html and use the jsoup library to extract the necessary information.

Here is an example to extract the first bold text found on the clipboard

 package rtfTest; import java.awt.Toolkit; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.io.IOException; import java.io.InputStream; import java.io.Reader; import java.io.StringReader; import java.io.StringWriter; import java.io.Writer; import javax.swing.JEditorPane; import javax.swing.text.BadLocationException; import javax.swing.text.EditorKit; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; public class TestRtf{ public static void main (String[] args) { TestRtf t = new TestRtf(); t.readClipboard() ; } @SuppressWarnings("resource") static String streamToString(java.io.InputStream is) { java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A"); return s.hasNext() ? s.next() : ""; } public static String rtfToHtml(Reader rtf) throws IOException { // From http://www.codeproject.com/Tips/136483/Java-How-to-convert-RTF-into-HTML JEditorPane p = new JEditorPane(); p.setContentType("text/rtf"); EditorKit kitRtf = p.getEditorKitForContentType("text/rtf"); try { kitRtf.read(rtf, p.getDocument(), 0); kitRtf = null; EditorKit kitHtml = p.getEditorKitForContentType("text/html"); Writer writer = new StringWriter(); kitHtml.write(writer, p.getDocument(), 0, p.getDocument().getLength()); return writer.toString(); } catch (BadLocationException e) { e.printStackTrace(); } return null; } public void readClipboard () { String result; Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); Transferable contents = clipboard.getContents(null); DataFlavor dfRTF = new DataFlavor("text/rtf", "Rich Formatted Text"); DataFlavor dfTxt = DataFlavor.stringFlavor; boolean hasTransferableRTFText = (contents != null) && contents.isDataFlavorSupported(dfRTF); boolean hasTransferableTxtText = (contents != null) && contents.isDataFlavorSupported(dfTxt); if (hasTransferableRTFText) { try { // result = streamToString((InputStream)contents.getTransferData(dfRTF)); // Convert rtf to html result = rtfToHtml(new StringReader(streamToString((InputStream)contents.getTransferData(dfRTF)))); // Example of text extraction from html // Parse html Document doc = Jsoup.parse(result); // Select first bold text Element firstBoldElt = doc.select("b").first(); String firstBoldText = firstBoldElt.text(); System.out.println(firstBoldText); } catch (Exception ex) { ex.printStackTrace(); } } else if (hasTransferableTxtText) { try { result = (String)contents.getTransferData(dfTxt); System.out.println("dfTxt "+ result); } catch (Exception ex) { ex.printStackTrace(); } }}} 
0
source

To determine the entire highlighted bold element, you can use the doc.outerHtml () method, which returns all html.

Suppose there is a copy below data like in my clipboard

Bold1 Bold2 Bold3 Bold4

now when you use doc.outerHtml () you will get below answer

 <html><head><style><!--p.DefaultaParagraphaFont {bold:normal;italic:;underline:;}--></style></head><body><p class="default"> <span style="color: #000000; font-size: 11pt; font-family: Calibri"> <b>Bold1</b> </span> </p> <p class="default"> <span style="color: #000000; font-size: 11pt; font-family: Calibri"> <b>Bold2</b> </span> </p> <p class="default"> <span style="color: #000000; font-size: 11pt; font-family: Calibri"> Bold3 </span> </p> <p class="default"> <span style="color: #000000; font-size: 11pt; font-family: Calibri"> <b>Bold4</b> </span> </p></body></html> 

So, now you just need to put some parsing logic to read the bold element.

0
source

All Articles