2013-09-12 1 views
2

Может кто-нибудь показать мне, как применить FontFamily/размер к AltChunk ТипаOpenXml-SDK: Как применять FontFamily/размер для AltChunk типа [TextPlain]

AlternativeFormatImportPartType.TextPlain 

Это мой код, но я не могу 'T выяснить, как сделать это на всех (это не распространяется помощь даже Google)

MainDocumentPart main = doc.MainDocumentPart; 
string altChunkId = "AltChunkId" + Guid.NewGuid().ToString().Replace("-", ""); 
var chunk = main.AddAlternativeFormatImportPart 
    (AlternativeFormatImportPartType.TextPlain, altChunkId); 

using (var mStream = new MemoryStream()) 
{ 
    using (var writer = new StreamWriter(mStream)) 
    { 
     writer.Write(value); 
     writer.Flush(); 
     mStream.Position = 0; 
     chunk.FeedData(mStream); 
    } 
} 

var altChunk = new AltChunk(); 
altChunk.Id = altChunkId; 

OpenXmlElement afterThat = null; 
foreach (var para in main.Document.Body.Descendants<Paragraph>()) 
{ 
    if (para.InnerText.Equals("Notizen:")) 
    { 
     afterThat = para; 
    } 
} 

main.Document.Body.InsertAfter(altChunk, afterThat); 

если я сделать это таким образом, я получаю «Courier New» с размером «10,5»

ОБНОВЛЕНИЕ

Это рабочее решение я придумал:

Преобразовать PLAINTEXT в формате RTF, изменять FontFamily/размер и применить его к WordProcessingDocument!

public static string PlainToRtf(string value) 
{ 
    using (var rtf = new System.Windows.Forms.RichTextBox()) 
    { 
     rtf.Text = value; 
     rtf.SelectAll(); 
     rtf.SelectionFont = new System.Drawing.Font("Calibri", 10); 

     return rtf.Rtf; 
    } 
} 

var chunk = main.AddAlternativeFormatImportPart 
     (AlternativeFormatImportPartType.Rtf, altChunkId); 

using (var mStream = new MemoryStream()) 
{ 
    using (var writer = new StreamWriter(mStream)) 
    { 
     var rtf = PlainToRtf(value); 
     writer.Write(rtf); 
     writer.Flush(); 
     mStream.Position = 0; 
     chunk.FeedData(mStream); 
    } 
} 
//proceed with creating AltChunk and inserting it to the Document... 
+1

Почему вы используете данный тип? –

+0

потому что «значение» происходит из базы данных mssql и является открытым текстом, если я использую другой тип, который он вообще не работает, или я теряю «возврат каретки» и, таким образом, форматирование текста – makim

+0

У меня слишком много работы, чтобы посмотреть его но, возможно, эта бесплатная книга содержит ответ: https://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CDYQFjAA&url=http%3A%2F%2Fopenxmldeveloper.org% 2Fcfs-filesystemfile.ashx% 2F__key% 2Fcommunityserver-компоненты-postattachments% 2F00-00-00-19-70% 2FOpen-XML-Explained.pdf & е = m8ExUuGnOoOphAexkYCYBA & USG = AFQjCNGN-Yb-6Hrv-ZqEJ9hfK_8lbnyd0w & Sig2 = p3cvSDnn05-ep9Jc_2na6g –

ответ

1

Как применять FontFamily/размер для AltChunk типа [TextPlain]

Я боюсь, что это не представляется возможным, во всяком случае, не с OpenXml SDK.

Почему?

altChunk(Якорь для импортируемого внешних содержимого) объекта дополнительно предназначен для импорта содержимого в документе. Они являются «временными» объектами: это просто ссылка на внешний контент, который включен «как есть» в документе, а затем, когда документ будет открыт и сохранен в Word, Word преобразует этот внешний контент в действительный Содержимое OpenXml.

Так что вы не можете, для вновь созданного документа, зациклиться на абзацы, чтобы получить его и применить стиль.

Если вы импортируете rtf, например, стиль должен быть применен к rtf перед импортом.

В текстовом редакторе TextPlain (= текстовый файл .txt) отсутствует преобразование стиля (нет стиля, прикрепленного к текстовому файлу, вы можете изменить шрифт в NotePad, он применим ко всем документам, это свойство Application Level).

И я могу подтвердить, что Word создает по умолчанию стиль с "Courier New 10,5" для отображения содержимого файла. Я просто испытал.

Что я могу сделать?

Применить стиль после документ был открыт/сохранен в Word. Обратите внимание, что вам придется отыскать параграф (ы), или вы можете попытаться восстановить стиль, созданный в документе, и изменить шрифт здесь. Эта ссылка могла бы помочь в достижении этой цели: How to: Apply a style to a paragraph in a word processing document (Open XML SDK).

Возможно, существует (?) Раздел реестра Что-то вроде этого можно изменить, чтобы изменить поведение по умолчанию Word на вашем компьютере.И даже если это так, это не решает проблему для вновь созданного документа, который открывается впервые на клиенте.

Примечание от OP:

Я думаю, что возможное решение проблемы может быть, преобразование PLAINTEXT в формат RTF применить StyleInformation, а затем добавить его в WordProcessingDocument в AltChunk.

Я полностью согласился. Просто отметьте, когда он говорит примените StyleInformation, это означает, что на уровне rtf.

+0

Привет Крис благодарит за ваш ответ, теперь я вижу проблему. Я думаю, что возможным решением проблемы может быть, преобразование PlainText в RTF применит StyleInformation, а затем добавит его в WordProcessingDocument как AltChunk. Как вы думаете, будет ли этот подход работать? – makim

+0

@sine Добро пожаловать. Возможно, сейчас я не знаю, как выполнить преобразование, но да, возможно, это лучшее решение в вашем случае (я видел ваш другой пост). Я отвечу ваш комментарий в ответ. Извините, если ответы не сразу, требуется время для перевода ;-) – Chris

+1

Нет проблем Крис, займите столько времени, сколько вам нужно ;-) Я попробую RTF-подход завтра и дам вам знать результат. И в \t примерно 1 час я отвечу на ваш ответ, но в настоящее время я не в голосовании^_^ – makim