2009-07-21 13 views
6

Hãy xem xét các tài liệu RTF sauGiữ lại kích thước font chữ khi tải/tiết kiệm RTF trong WPF

{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fswiss\fprq2\fcharset0 Segoe UI;}{\f1\fswiss\fcharset0 Arial;}} 
{\*\generator Msftedit 5.41.15.1507;}\viewkind4\uc1\pard\f0\fs22 Sample Text\f1\fs20\par 
} 

Nó chứa "Sample Text" trong font Segoe UI 11 pt. Bây giờ khi tôi tải và sau đó lưu tài liệu bằng cách sử dụng FlowDocument của WPF và TextRange.Load() và .Save(), tương ứng, kích thước phông chữ được giảm xuống còn 10,5pt. Có cách nào để giữ lại kích thước phông chữ ban đầu khi sử dụng RTF làm đầu vào/đầu ra không?

+0

Vâng, một điều tôi coi là khả năng là: 1. Nhận XAML từ 'RichTextBox'; 2. Sửa đổi nó bằng cách thêm 0,001 cho mỗi kích thước phông chữ; 3. Sử dụng mã (dễ dàng tìm thấy) để chuyển đổi XAML thành RTF với các lớp dựng sẵn. Bằng cách đó bạn đang tinh chỉnh đầu vào để đầu ra của bạn là những gì bạn muốn. –

Trả lời

6

Tất cả các phép đo của WPF tính bằng pixel (mặc dù không chính xác pixel màn hình). Ngay cả khi bạn chỉ định số FontSize của số TextRange.

Nội bộ, khi bạn chỉ định một cái gì đó như FontSize="14pt" trong XAML, WPF sử dụng LengthConverter và các thay đổi đủ điều kiện kép dựa trên yếu tố liên quan đến đơn vị đo bạn cung cấp. Vì vậy, 11 được nhân với 1.3333333, khoảng. Vì vậy, nếu bạn cho một giá trị gấp đôi đơn giản vào thuộc tính FontSize, đơn vị là pixel. Tuy nhiên, nếu bạn sử dụng FontSize="14.0001pt" hoặc nhân các điểm bằng 1.3333334 hoặc thậm chí chỉ cần thêm 0,0001 vào phép đo pixel, nó sẽ bù đắp đủ thứ mà bạn thực sự nhận được \ fs22 hoặc \ fs28 (thay vì \ fs21 hoặc \ fs27, tương ứng). Điều này là dành cho khi bạn đang thiết lập một kích thước trong WPF.

Lý do bạn có \ fs22, Tải(), Lưu() và sau đó có \ fs21 phải thực hiện tương tự. Trình phân tích cú pháp lấy RTF và chuyển đổi nó thành các đối tượng WPF. Vì vậy, 22 nửa điểm trở thành một cái gì đó giống như 14.666666666667 pixel. Khi bạn Save() một lần nữa, những pixel đó được chuyển đổi trở lại một đơn vị khác, nhưng không chính xác lắm. 14.666666666667 pixel trở thành 21 điểm, nhưng 14.6666674 pixel trở thành 22 điểm nửa, đó là những gì bạn muốn.

Có thể thông tin này sẽ cung cấp cho bạn ý tưởng cách nhận RTF khác nhau. Có lẽ bạn có thể lấy XAML ra và thay đổi nó. Có thể có phần mềm chuyển đổi XAML-to-RTF miễn phí thứ ba không có lỗi làm tròn gây phiền nhiễu.

+0

Giải thích tốt về sự cố. Trong lúc đó, tôi đang tìm kiếm một thành phần bên thứ ba như vậy. Than ôi, không phải với nhiều thành công. –