gpt4 book ai didi

Java String-字体样式检查

转载 作者:行者123 更新时间:2023-12-02 17:14:13 26 4
gpt4 key购买 nike

我需要对所选文本区域进行字体样式检查

我使用applescript将突出显示/选定的文本区域复制到剪贴板并在java中检索剪贴板值。我使用 string 来捕获所选/突出显示的值。

有什么方法可以在java中使用String进行样式检查

代码检索剪贴板值:

    String result = "";
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();

//odd: the Object param of getContents is not currently used
Transferable contents = clipboard.getContents(null);
boolean hasTransferableText = (contents != null) &&
contents.isDataFlavorSupported(DataFlavor.stringFlavor);
if ( hasTransferableText ) {
try {
result = (String)contents.getTransferData(DataFlavor.stringFlavor);
}
catch (UnsupportedFlavorException ex){
}
catch (IOException ex) {
}
}
return result;
}

字体信息:

{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
{\fonttbl\f0\fnil\fcharset0 Verdana;\f1\fnil\fcharset0 Tahoma;}
{\colortbl;\red255\green255\blue255;}
\deftab720
\pard\pardeftab720\sa280

\f0\i\fs34 \cf0 testing
\f1\i0 hello\'a0
\b Module
\b0 \ul world}
{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
{\fonttbl\f0\fnil\fcharset0 Verdana;\f1\fnil\fcharset0 Tahoma;}
{\colortbl;\red255\green255\blue255;}
\deftab720
\pard\pardeftab720\sa280

\f0\i\fs34 \cf0 testing
\f1\i0 hello\'a0
\b Module
\b0 \ul world}

请指教。任何建议/引用都将受到高度赞赏。

最佳答案

您获得的值是富文本格式的语义代码。整个基于 Java 的 rtf 解析器的代码太长,无法在这里发布,但作为引用,有一个 RTFEditorKit Swing 中的 0 和 Tika Apache 的项目有一个 RTFParser。

RTF 使用控制字 - 它们具有类似于其他标记语言的开始和结束标记,例如:

示例:\someAsciiTag1 ...\someAsciiTag1

就您的问题而言:

字体样式就在字体表或 \fnttbl 组中 - 组由大括号{}封装。

字体样式按照类似索引的结构排序,并以 \f*index* 作为控制代码。

下一个代码是\f*font-family*等等。

虽然全局字体样式设置在文件顶部的\fnttbl 中,但可以在纯文本部分(如 html)中进行某些样式修改,例如:\fs20 表示 font-size = 20任何单元都继承到像 css 这样的结构中。

虽然我可以在此处发布 Java 代码来向您展示如何访问特定标记,如果您只需要访问一些全局元素,但我不知道您的范围整个项目,如果您的目标是从文本中获取所有样式,我真的非常强烈地鼓励您使用上面提供的解析器之一,因为 RTF 是一种非常复杂的格式。

如果你对此表示怀疑,这里有一个指向 Microsoft 规范的链接,它大约有 270 页,据我所知,非常接近规范完整的最轻量级实现有超过 9000 行代码,这就是为什么你可能不想自己做。

http://www.microsoft.com/en-us/download/details.aspx?id=10725

编辑:

我意识到我没有完全回答您在上一个答案中的第二个问题

\b 或\b1 = 粗体(true 或 1) AND \b0 = 粗体(false 或 0)

\i 或\i1 = 斜体(true 或 1) AND \i0 = 斜体(false 或 0)

但是,仅供引用,这些并不是设置样式的唯一方法,rtf 允许使用其他不太常见的编程方式来设置这些值。此外,ascii 和 unicode rtf 代码之间也存在差异,因此再次使用解析器。

我仍然包含了字体标签结构,因此如果您需要全局信息,您可以获取它。

<fonttbl>   '{' \fonttbl (<fontinfo> | ('{' <fontinfo> '}'))+ '}'
<fontinfo> <themefont>? \fN <fontfamily> \fcharsetN? \fprq? <panose>? <nontaggedname>?
<fontemb>? \cpgN? <fontname> <fontaltname>? ';'
<themefont> \flomajor | \fhimajor | \fdbmajor | \fbimajor | \flominor | \fhiminor |
\fdbminor | \fbiminor
<fontfamily> \fnil | \froman | \fswiss | \fmodern | \fscript | \fdecor | \ftech |
\fbidi
<panose> '{\*' \panose <data> '}'
<nontaggedname> '{\*' \fname #PCDATA ';}'
<fontname> #PCDATA
<fontaltname> '{\*' \falt #PCDATA '}'
<fontemb> '{\*' \fontemb <fonttype> <fontfname>? <data>? '}'
<fonttype> \ftnil | \fttruetype
<fontfname> '{\*' \fontfile \cpgN? #PCDATA '}'

这是字体数据标签的列表和字体数据的一般结构。希望有帮助。

编辑:跟进

从外观上看,你有一大块 Mac rtfd(额外的标签)

cocoartf1038\cocoasubrtf360 - tells you it's mac encoded

第一部分给出编码第二个给出了 f0 处的 Verdana 和 f1 处的 Tahoma 两种主要字体样式第三行告诉你它是白色的 rgb(255,255,255) 等等。第四和第五定义选项卡和分页。第六个(非空白)表示 f0\i\fs34 = Verdana,斜体,大小 34\cf0 是黑色前景色第七个是 Tahoma 斜体,模块周围加粗,世界则加下划线,依此类推,然后重复。

有一个基于 Java 的 rtf 解析器,最近添加了对一些 mac 自定义标签的支持,您可以找到它 on GitHub here连接模块并解析您可能需要的任何文件应该相当简单。

关于Java String-字体样式检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18305798/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com