Может ли «содержимое» AttributedString быть сохранено в файл? - PullRequest
1 голос
/ 02 марта 2009

Я делаю некоторые исследования о том, как "рисовать" некоторый атрибутивный текст на Graphics2D.

Итак, мне интересно, можно ли сохранить содержимое AttributedString в каком-либо формате?

Я знаю, что это может быть сериализовано Java, но мне здесь не нужно это решение.

Кроме того, если кто-то знает пример, который показывает как редактировать AttributedString?

Вот некоторый Java-код, просто чтобы понять:

public void paint(Graphics g) {

Graphics2D g2 = (Graphics2D) g;

AttributedString as new AttributedString( "Lorem ipsum dolor sit amet..." );
Font font1 = new Font( "SansSerif" , Font.PLAIN , 20 );
as.addAttribute( TextAttribute.FONT       , font1       );
as.addAttribute( TextAttribute.FOREGROUND , Color.black );
as.addAttribute( TextAttribute.FOREGROUND , Color.blue , 4 , 9 );

AttributedCharacterIterator aci = as.getIterator();
FontRenderContext           frc = g2.getFontRenderContext();
LineBreakMeasurer           lbm = new LineBreakMeasurer( aci , frc );

TextLayout  textLayout = lbm.nextLayout( wrappingWidth );

int x = 50 , y = 50 ;
textLayout.draw( g2 , x , y );

}

Спасибо за любую помощь или совет:)

Ответы [ 2 ]

1 голос
/ 02 марта 2009

Очевидно, что самый простой метод - это Java-сериализация, в противном случае вам потребуется обработать все возможные текстовые атрибуты. Если вам нужен пример, вот генератор отчетов, который я написал и который широко использует AttributedString. Надеюсь, это поможет: http://www.perry.ch/mo/pureport.zip

0 голосов
/ 27 апреля 2009

Для AttributedString нет формата сериализации текста, вам придется написать свой собственный.

AttributedString / AttributedCharacterIterator - это старый API, впервые представленный в Java 1.2, и он никогда не был «расширен» для обеспечения хорошей стилизованной текстовой модели. Например, вы заметите, что в нем отсутствуют некоторые очевидные вещи, такие как метод length () или реализация Externalizable / Serializable. Вы можете перебрать его, получив для него AttributedCharacterIterator, но, поскольку может присутствовать собственный подкласс AttributedCharacterIterator.Attribute, вы не можете надежно записывать все без встроенной сериализации.

Лучше просто использовать AttributedString в качестве промежуточного формата, используемого для общения с API-интерфейсами InputMethod или TextLayout, и сохранять стилизованный текст другим способом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...