Jaki jest najskuteczniejszy sposób przekonwertowania ciągu znaków RTF na ciąg znaków XAML w języku C#? Chciałbym użyć System.Windows.Documents.XamlRtfConverter.ConvertRtfToXaml(string rtfContent)
, ale niestety ta klasa jest wewnętrzna.Konwertuj ciąg znaków RTF na ciąg XAML
5
A
Odpowiedz
5
Możesz iść z ciągiem RTF na ciąg XAML ale tracisz obrazów:
var rtf = File.ReadAllText(rtfFileName);
var doc = new FlowDocument();
var range = new TextRange(doc.ContentStart, doc.ContentEnd);
using (var inputStream = new MemoryStream(Encoding.ASCII.GetBytes(rtf)))
{
range.Load(inputStream, DataFormats.Rtf);
using (var outputStream = new MemoryStream())
{
range.Save(outputStream, DataFormats.Xaml);
outputStream.Position = 0;
using (var xamlStream = new StreamReader(outputStream))
{
var xaml = xamlStream.ReadToEnd();
File.WriteAllText(xamlFileName, xaml);
}
}
}
aby zachować obrazy trzeba iść z ciągiem RTF do pakietu XAML:
var rtf = File.ReadAllText(rtfFileName);
var doc = new FlowDocument();
var range = new TextRange(doc.ContentStart, doc.ContentEnd);
using (var inputStream = new MemoryStream(Encoding.ASCII.GetBytes(rtf)))
{
range.Load(inputStream, DataFormats.Rtf);
using (var outputStream = new FileStream(xamlFileName, FileMode.Create))
{
range.Save(outputStream, DataFormats.XamlPackage);
}
}
1
Użyj System.Reflection, aby wywołać metodę wewnętrzną XamlRtfConverter w System.Windows.Documents (wymaga odwołania do PresentationFramework.dll). Działa dla tysięcy konwersji w Parallel.ForEach() bez awarii pamięci (w przeciwieństwie do konwersji za pomocą RichTextBox).
private static string ConvertRtfToXaml(string rtfContent)
{
var assembly = Assembly.GetAssembly(typeof(System.Windows.FrameworkElement));
var xamlRtfConverterType = assembly.GetType("System.Windows.Documents.XamlRtfConverter");
var xamlRtfConverter = Activator.CreateInstance(xamlRtfConverterType, true);
var convertRtfToXaml = xamlRtfConverterType.GetMethod("ConvertRtfToXaml", BindingFlags.Instance | BindingFlags.NonPublic);
var xamlContent = (string)convertRtfToXaml.Invoke(xamlRtfConverter, new object[] { rtfContent });
return xamlContent;
}
Powiązane problemy
- 1. Konwertuj ciąg znaków na datetime
- 2. Konwertuj ciąg znaków na float?
- 3. Konwertuj ciąg na tablicę znaków swift 2.0
- 4. Konwertuj ciąg znaków na datę w java
- 5. Konwertuj biginta na ciąg znaków w Go
- 6. Konwertuj ciąg znaków HTML na obrazki
- 7. Konwertuj ciąg znaków na kod w schemacie
- 8. Powershell: Konwertuj obiekt na ciąg znaków
- 9. Konwertuj ciąg znaków Base64 na plik obrazu?
- 10. Konwertuj ciąg znaków SQL na znacznik czasu
- 11. Konwertuj ciąg znaków javascript na tablicę php
- 12. Konwertuj ciąg znaków szesnastkowych na kolor RGB
- 13. Konwertuj numer na 5-cyfrowy ciąg znaków
- 14. Konwertuj uint64 na ciąg znaków w golang
- 15. Konwertuj SVGSVGElement na ciąg
- 16. Konwertuj tablicę na ciąg? C#
- 17. Konwertuj obiekt SRE_Match na ciąg
- 18. Konwertuj ciąg na LatLng
- 19. Konwertuj ciąg na SocketAddr
- 20. Konwertuj null na ciąg
- 21. Konwertuj ciąg na wyrażenie?
- 22. Konwertuj NSData na ciąg?
- 23. Konwertuj LPWSTR na ciąg
- 24. konwertuj niepodpisany znak * na ciąg
- 25. Konwertuj listę znaków (lub tablicę) na ciąg znaków
- 26. Konwertuj ciąg szesnastkowy na int
- 27. Konwertuj ciąg na klasę aktywności
- 28. Konwertuj ciąg na matematyczną ocenę
- 29. Konwertuj ciąg łaciński1 na utf8?
- 30. Konwertuj ciąg na pole liczbowe
co to jest ciąg "Xaml"? –
@MehdiKhademloo Przeczytaj [tag wiki] (http://stackoverflow.com/tags/xaml/info) –
Wiem to, ale "ciąg XAML" związany z 'ciągiem RTF' jest dla mnie dziwny ... –