Копирование текста RTF в мою программу AS3 - PullRequest
1 голос
/ 10 мая 2011

Я искал и искал, но все, что появляется, это "купи это, купи это".

Нет ли способа, которым я мог бы просто скопировать текст из MS-Word и сохранить форматирование при вставке в приложение? (Я не говорю о Flash IDE здесь, я говорю о том, чтобы вставить его в TLF или что-то в этом роде)

Спасибо заранее.

1 Ответ

2 голосов
/ 12 мая 2011

Хорошо. Вот как это работает. Если вы хотите перенести содержимое из Word в TextField во флэш-памяти, вам нужно сделать что-то вроде этого ...

После того, как вы скопируете из word, вам нужно решить, как вставить содержимое в TextField ... вы хотите попробовать использовать cmd + v, выполняя некоторые действия KeyboardEvent? Хотите ли вы иметь кнопку с надписью «Вставить содержимое»? В любом случае, вы будете запускать некоторый код, чтобы захватить содержимое буфера обмена и вставить его в TextField в ответ на какое-то событие. Так что в вашем обработчике событий сделайте что-то вроде этого:

function onPasteEvent(e:SomeEventType):void{

    var pasteData:String = Clipboard.generalClipboard.getData(ClipboardFormats.HTML_FORMAT) as String;
    if (pasteData){

       txt.htmlText = formatClipboardData(pasteData);
    }else{
          // probably nothing on clipboard
    }

}

Теперь функция formatClipboardData () будет выполнять какие-то манипуляции с данными из буфера обмена. Вы заметите, что HTML, который происходит от слова, полон странных вещей. Вы можете удалить некоторые из них, привести в порядок их и в некоторых случаях использовать некоторые из их классов. В некотором коде, который я смотрю, у меня есть это:

var s:StyleSheet = new StyleSheet();
s.setStyle(".MsoListParagraphCxSpFirst", {marginLeft : "10px"});
...
txt.styleSheet = s;

Для того, чтобы отступить элементы списка от слова doc. Вы можете использовать простые регулярные выражения, чтобы изменить HTML ... удалить ненужные атрибуты и теги. Вот несколько примеров из моей функции formatClipboardData ():

// lists were coming in as dots with some space inside a p tag so:
  replace(/<p>\·\s+(.*?)<\/p>/g, "<li>$1</li>")

// no need for the body tag:
  replace(/<body>|<\/body>/g,"")

// strip attributes from p tags:
  replace(/<p(.*?)>/g, "<p>")

etc....
...