9 / 9 / 4
Регистрация: 07.12.2011
Сообщений: 120
1

Как в WPF загрузить форматированный Word-овский текст

02.02.2012, 22:19. Показов 8501. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как в WPF загрузить Word-овский текст без потери форматирования выделенных фрагментов – их цветов, размеров и так далее. В шестом Бейсике эта процедура выполнялась при помощи инструмента «OLE». Возможно ли это в WPF? Заранее благодарен.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.02.2012, 22:19
Ответы с готовыми решениями:

Как форматировать Word-овский текст из Excel?
Ничего не получается! ПОМОГИТЕ!!! Возможно ли, находясь в Excel и открыв из под него Word-овский...

Как вставить форматированный текст Word в приложение VB?
Форматиров-й текст Word в приложение VB - как вставить? Помогите!!! Все форматирование (т.е....

Как в документ Word вставить форматированный текст в формате RTF?
Как в документ Word вставить форматированный текст в формате RTF (clipboard не предлагать)

Как загрузить word. текст на asp страницу
Есть сохраненный файл 1.doc в нем есть текст, при загрузке default.aspх весь текст выводиться на...

4
273 / 203 / 30
Регистрация: 18.08.2010
Сообщений: 229
03.02.2012, 05:01 2
Лучший ответ Сообщение было отмечено как решение

Решение

С учетом того, что в WPF интегрирован стандарт XPS нужно просто написать простенький конвертор из DOC в XPS:

1) Добавьте в проект ссылки на RichFramework и Microsoft.Office.Iterop.Word (желательно не ниже версии 12.0.0.0, чтобы можно было читать документы из MSOffice2010)
2) Используйте ради примера следующую разметку:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication1"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <DocumentViewer HorizontalAlignment="Left" Margin="0,42,0,0"
                    Name="documentViewer1" VerticalAlignment="Top" Height="508" Width="766" />
        <TextBox Height="29" HorizontalAlignment="Left" Margin="6,6,0,0"
             Name="SelectedFileTextBox" VerticalAlignment="Top" Width="276" />
        <Button Content="Browse" Height="30" HorizontalAlignment="Right" Margin="0,6,93,0"
            Name="BrowseButton" VerticalAlignment="Top" Width="122" Click="BrowseButton_Click" />
    </Grid>
</Window>
3) Ну собственно и сам код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
...
using System.IO;
using Microsoft.Office.Interop.Word;
using Microsoft.Win32;
using System.Windows.Xps.Packaging;
 
namespace WpfApplication1
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow : System.Windows.Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
 
        // Собственно сам конвертор
        private XpsDocument ConvertWordDocToXPSDoc(string wordDocName, string xpsDocName)
        {
            Microsoft.Office.Interop.Word.Application
                wordApplication = new Microsoft.Office.Interop.Word.Application();
            wordApplication.Documents.Add(wordDocName);
 
            Document doc = wordApplication.ActiveDocument;
            try
            {
                doc.SaveAs(xpsDocName, WdSaveFormat.wdFormatXPS);
                wordApplication.Quit();
 
                XpsDocument xpsDoc = new XpsDocument(xpsDocName, System.IO.FileAccess.Read);
                return xpsDoc;
            }
            catch (Exception exp)
            {
                string str = exp.Message;
            }
            return null;
        }
 
        private void BrowseButton_Click(object sender, RoutedEventArgs e)
        {
            Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
            dlg.DefaultExt = ".doc";
            dlg.Filter = "Word documents (.doc)|*.*";
 
            Nullable<bool> result = dlg.ShowDialog();
            if (result == true)
            {
                if (dlg.FileName.Length > 0)
                {
                    SelectedFileTextBox.Text = dlg.FileName;
                    string newXPSDocumentName = String.Concat(System.IO.Path.GetDirectoryName(dlg.FileName), "\\",
                                   System.IO.Path.GetFileNameWithoutExtension(dlg.FileName), ".xps");
 
                    documentViewer1.Document =
                        ConvertWordDocToXPSDoc(dlg.FileName, newXPSDocumentName).GetFixedDocumentSequence();
                }
            }
        }
    }
}
4
9 / 9 / 4
Регистрация: 07.12.2011
Сообщений: 120
03.02.2012, 16:52  [ТС] 3
Уважаемый alexsave! Очень благодарен Вам за показанный код, который прекрасно работает. Но, учитывая, что решение не такое уж и простое, возникает соблазн просто загрузить из фотошопа картинку с форматированным текстом – в текущем проекте мне нужна всего одна страничка. В дальнейшем, там, где потребуется много страниц, оптимальнее работать с Вашим кодом.
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
03.02.2012, 16:56 4
Цитата Сообщение от KeysVS Посмотреть сообщение
Но, учитывая, что решение не такое уж и простое
И что там непростого? Один метод, который уже готов и работает? Вынеси его в отдельный класс конвертер. И таскай его в любой проект этот класс где понадобится.

Добавлено через 1 минуту
Кстати, если не ошибаюсь (скорее всего не ошибаюсь) на компе юзера, который будет конвертировать, должен быть установлен Word.
0
23 / 2 / 0
Регистрация: 24.04.2011
Сообщений: 66
05.07.2013, 13:04 5
А не знаете, в чем может быть дело? У меня сохранение ловит ошибку: "Ошибка команды"...и все, никаких объяснений.
Заранее благодарен
0
05.07.2013, 13:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.07.2013, 13:04
Помогаю со студенческими работами здесь

Форматированный текст из Word вставить в тело письма Outlook
Доброго времени суток. Есть часть кода, которое формирует новое письмо в Outlook. Вставляет...

VBA Word Вставить форматированный текст в конец файла
Ребят, второй день голову ломаю. Как вставить в конец вордовского файла текст, который будет...

Как программно пересохранить word-овский документ в файл с расширением «.rtf»
Dim word = New Word.Application word.Documents.Open(&quot;\...\Doc1.doc&quot;) ...

Как программно записать в файл ДОС-овский текст?
Запутался в кодировках. VB пишет в виндовой 8-(


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru