wysihtml5:将文本从word文档复制到编辑器

时间:2013-02-23 21:57:52

标签: ms-word richtextbox rich-text-editor wysihtml5

将文字从单词复制到wysihtml5 editor时,文本会混乱(无论是格式还是附加添加字符)。这有一个简单的解决方案吗?我正在寻找的正确行为将是Stack Overflow的富文本编辑器的工作方式 - 从单词复制和粘贴的文本看起来与单词文档相同。

谢谢!

更新 为了解决粘贴的文字格式的问题,我在使用过的wysihtml5-0.30_rc2.js文件中添加了行"p": {},。该行已在defaultOptions [parserRules] [tags](see used resource)的声明中添加。

尽管如此,现在我可以在粘贴文本的开头看到“字体定义”段落:

<!-- /* Font Definitions */ @font-face {font-family:Arial; panose-1:2 11 6 4 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:"Cambria Math"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:1; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:0 0 0 0 0 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:""; margin-top:0cm; margin-right:0cm; margin-bottom:10.0pt; margin-left:0cm; line-height:115%; mso-pagination:widow-orphan; mso-hyphenate:none; font-size:11.0pt; font-family:Arial; mso-fareast-font-family:Arial; mso-bidi-font-family:Arial; color:black; mso-fareast-language:HI; mso-bidi-language:HI;} a:link, span.MsoHyperlink {mso-style-unhide:no; mso-style-parent:""; color:navy; mso-ansi-language:#00FF; mso-fareast-language:#00FF; mso-bidi-language:#00FF; text-decoration:underline; text-underline:single;} a:visited, span.MsoHyperlinkFollowed {mso-style-noshow:yes; mso-style-priority:99; color:purple; mso-themecolor:followedhyperlink; text-decoration:underline; text-underline:single;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; font-size:10.0pt; mso-ansi-font-size:10.0pt; mso-bidi-font-size:10.0pt;} @page WordSection1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt
90.0pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.WordSection1 {page:WordSection1;} -->

这种情况只发生在我使用Firefox时,并不会发生在Chrome中。关于如何摆脱这个问题的任何想法?

2 个答案:

答案 0 :(得分:1)

wysihtml5包含一个解析器,用于分析粘贴在其文本区域中的所有文本,并应用parserRules配置对象中定义的过滤规则。将"style": { "remove": 1 }添加到parserRules应该可以解决问题。

要了解Firefox问题,您必须看到粘贴到文本区域的原始剪贴板HTML内容(源自Word)。只是复制一些Word文本并将其粘贴到文本编辑器中将无济于事,因为文本编辑器会请求剪贴板内容的纯文本变体。

如果你在Mac上,你可以在ClipboardViewer tool的帮助下看到这个原始剪贴板内容,你需要用XCode自己编译。所需的HTML内容应位于public.htmlApple HTML pasteboard type字段中。也许存在其他工具不需要编译和/或在其他操作系统上工作。

现在您应该看到Word中的剪贴板内容实际上看起来像

    <span>
    <!--
      /* Font Definitions */
      ...
      div.WordSection1 {page:WordSection1;}
      ...
    -->
    </span>

因此,删除style标记(包含其所有内容)后,字体定义垃圾就会消失。

查看wysihtml5’s parserRule demo以查看更高级的配置选项。

答案 1 :(得分:1)

我通过覆盖wysihtml5.dom.getPastedHtml解决了这个问题。只需在加载wysihtml5后添加它:

wysihtml5.dom.getPastedHtml = function(event) {
  var html;
  if (event.clipboardData) {
    html = event.clipboardData.getData('text/plain');
  }
  return html;
};