Как корректно сохранить цветной текст в файл?

203
01 сентября 2021, 23:30

Есть методы изменения цвета выделенного текста.

 // выбираем цвет
 private void showColorChooser() {
    colorChooser = new JColorChooser();
    if (textColor == null) {
        textColor = Color.BLACK;
    }
    textColor = colorChooser.showDialog(null, "Цвет текста", textColor);
    colorChoseButton.setBackground(textColor);
    colorChoseButton.setForeground(textColor);
    if (textPane.getSelectedText() == null) {
        textPane.setForeground(textColor);
    }
}
// меняем цвет текста
private void changeTextColor(Color c) {
    document = textPane.getStyledDocument();

    SimpleAttributeSet colorSeter = new SimpleAttributeSet();
    StyleConstants.setForeground(colorSeter, c);
    document.setCharacterAttributes(textPane.getSelectionStart(), textPane.getSelectionEnd() - textPane.getSelectionStart(), colorSeter, true);
    textColor = colorChoseButton.getBackground();
    textPane.setSelectedTextColor(textColor);
}

Есть метод saveFileAs();

    private void saveFileAs (){
    JFileChooser fileChooser = new JFileChooser();
    fileChooser.showDialog(null,"Save");
    file = fileChooser.getSelectedFile();
    if (fileChooser.getSelectedFile()==null || textPane.getText()==null){
        JOptionPane.showMessageDialog(null, "Файл не выбран или пуст");
    } else {
        try {
            outputStream = new FileOutputStream(file);
            outputStream.write(textPane.getText().getBytes());
        } catch (IOException ex){}
    }
}

Я меняю цвет текста и сохраняю его в файл формата .dock. Открываю файл с помощью word и его цвет черный (не поменянный). Как это исправить?

Answer 1

Итак, я использовал старую версию jrtf для создания rtf файла. Документация по jrtf на GitHub Теперь метод saveFileAs выглядит следующим образом:

 private void saveFileAs (){
    JFileChooser fileChooser = new JFileChooser();
    fileChooser.showDialog(null,"Сохранить файл");
    file = fileChooser.getSelectedFile();
    if (fileChooser.getSelectedFile()==null || textArea.getText()==null){
        JOptionPane.showMessageDialog(null, "Файл не выбран или пуст");
    } else {
        try {
            int R = textColor.getRed();
            int G = textColor.getGreen();
            int B = textColor.getBlue();

            rtf().header(color(R, G, B).at(0))
                    .section(p (color(0, text(textArea.getText())))).out(new FileWriter(file));
            } catch (IOException ex){}
    }
}

и сохраняется форматированный текст.

Теперь дело за малым.
P.S. Спасибо @Дмитрий

READ ALSO
Как изменить текст textView из другого класса?

Как изменить текст textView из другого класса?

У меня есть два класса, один класс MainActivity, а другой собственный классМой активити класс содержит textView

283
Проблемы с запуском процедуры из JDBC

Проблемы с запуском процедуры из JDBC

Есть такая процедура, она работает из консоли, когда я ввожу call products_count(null) - она работает

490
Broadcaster Receiver не работает

Broadcaster Receiver не работает

У меня есть два слушателя BroadcastReceiverSms и BroadcastReceiverCall которые отслеживают когда на телефон ЗВОНЯТ и приходит СМС и выводят оповещение с вибрациейКогда...

282
Как превратить String[][] в Map<String, Map<Integer, List<String[]>>>

Как превратить String[][] в Map<String, Map<Integer, List<String[]>>>

интересует красивый способ преобразования двумерного массива строк в мапу, значениями которой будет мапа, значениями которой будет список...

166