CyberForum.ru - Форум программистов и сисадминов
Вернуться   Форум программистов и сисадминов CyberForum.ru > Форум программистов > Форум .NET > Форум C# .NET > Форум WPF и Silverlight

Ответ Создать новую тему
 
Старый 02.02.2012, 21:19   #1
KeysVS
Новичок
 
Регистрация: 07.12.2011
Сообщений: 42
Репутация: 2 (2)
По умолчанию Как в WPF загрузить форматированный Word-овский текст

Как в WPF загрузить Word-овский текст без потери форматирования выделенных фрагментов – их цветов, размеров и так далее. В шестом Бейсике эта процедура выполнялась при помощи инструмента «OLE». Возможно ли это в WPF? Заранее благодарен.
KeysVS вне форума
Другие темы раздела
C#, WPF, Silverlight Поменять цвет текста в label
Здраствуйте! Как это сделать? Понимаю что через Foreground. но я не знаю, как brush вызвать. Подскажите пожалуйста. Поменять цвет текста в label
C#, WPF, Silverlight Изменить состояние CheckBox'a
Люди помогите,тут такое дело,есть checkbox на одной форме мне нужно программно поменять его значение при некотором событии,вот его код: <CheckBox Grid.Row="8" Grid.Column="6" IsChecked="{Binding Path=SelfSystem.ApproveAllRunners}" VerticalAlignment="Center" HorizontalAlignment="Left".... Изменить состояние CheckBox'a
Старый 03.02.2012, 04:01   #2
alexsave
Форумчанин
 
Аватар для alexsave
 
Регистрация: 18.08.2010
Сообщений: 146
Репутация: 151 (113)
По умолчанию Re: Как в WPF загрузить форматированный Word-овский текст?

С учетом того, что в 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
15
<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
64
 
...
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();
                }
            }
        }
    }
}
alexsave вне форума
Старый 03.02.2012, 15:52  [ТС]   #3
KeysVS
Новичок
 
Регистрация: 07.12.2011
Сообщений: 42
Репутация: 2 (2)
По умолчанию Re: Как в WPF загрузить форматированный Word-овский текст?

Уважаемый alexsave! Очень благодарен Вам за показанный код, который прекрасно работает. Но, учитывая, что решение не такое уж и простое, возникает соблазн просто загрузить из фотошопа картинку с форматированным текстом – в текущем проекте мне нужна всего одна страничка. В дальнейшем, там, где потребуется много страниц, оптимальнее работать с Вашим кодом.
KeysVS вне форума
После регистрации реклама в сообщениях будет скрыта
Старый 03.02.2012, 15:56   #4
Casper-SC
Форумчанин
 
Аватар для Casper-SC
 
Регистрация: 27.03.2010
Адрес: Россия
Сообщений: 2,132
Репутация: 998 (769)
По умолчанию Re: Как в WPF загрузить форматированный Word-овский текст?

Цитата Сообщение от KeysVS Посмотреть сообщение
Но, учитывая, что решение не такое уж и простое
И что там непростого? Один метод, который уже готов и работает? Вынеси его в отдельный класс конвертер. И таскай его в любой проект этот класс где понадобится.

Добавлено через 1 минуту
Кстати, если не ошибаюсь (скорее всего не ошибаюсь) на компе юзера, который будет конвертировать, должен быть установлен Word.
Casper-SC вне форума
Ответ Создать новую тему

Похожие темы
Тема Автор
ASP.NET Как загрузить word. текст на asp страницу
Есть сохраненный файл 1.doc в нем есть текст, при загрузке default.aspх весь текст выводиться на этой странице Помогите пож-ста очень нужно любым методом только на языке С# !!!
Тося
VBA Почему тухнет Word-овский файл?
Есть простой текст в Worde (1 страничка). Начинаю корректировать - объем растет на десятки кБайтов, хотя добавляю по 1-2 слова. Файл становится огромным (более 1 Мб). На другой машине открываю, добавляю пробел и закрываю - объем уменьшается до 20 кб. Кто знает, в чем дело?
CatsTail
VBA Как открыть Word -овский файл из Екселя?
Как открыть Word -овский файл из Екселя? Что-то нашел, но не работает. Подскажите пожалуйста в чем проблема. Хотелось бы написать макрос в котором через Inputbox открывался вордовский файл содержащий заданное в Inputbox значение (номер, который находится только в одном документе). Sub...
wertt
VBA Как в документ Word вставить форматированный текст в формате RTF?
Как в документ Word вставить форматированный текст в формате RTF (clipboard не предлагать)
nap2k
VBA Как форматировать Word-овский текст из Excel?
Ничего не получается! ПОМОГИТЕ!!! Возможно ли, находясь в Excel и открыв из под него Word-овский файл, форматировать в этом файле существующий текст и таблицы? И Как из под Excel можно внедрить таблицу в Word-овский файл и причем задать место внедрения – в конец, середину или начало документа, или...
comrade
Опции темы

Текущее время: 16:32. Часовой пояс GMT +4.

Компьютерный форум программистов и сисадминов
Powered by vBulletin® Version 3.8.7 PL2
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Рейтинг@Mail.ru