Thư viện này nhằm mục đích chuyển đổi tài liệu HTML thành FlowDocument Ngôn ngữ đánh dấu ứng dụng mở rộng [XAML]. Tất nhiên, điều này chỉ khả thi đối với các bố cục đơn giản
Đồ án gồm hai phần
- Trình chuyển đổi HTML sang FlowDocument, được sao chép từ Demo HTMLToXamlConverter của Microsoft [giấy phép MIT]
- Dự án ExCSS từ Tyler Brinks [giấy phép MIT]
Trong dự án này, bản demo HtmlToXamlConverter của Microsoft được mở rộng để hỗ trợ các tính năng sau
- sử dụng cung cấp bên ngoài. css [bằng trình phân tích cú pháp ExCSS]
- hỗ trợ cho hình ảnh
- triển khai màu sắc [văn bản, nền]
- hỗ trợ cho các đơn vị em ở phông chữ và tất cả các loại kích cỡ, bằng cách chuyển đổi chúng thành đơn vị tuyệt đối
- một số bản sửa lỗi khác, như hỗ trợ dấu cách trong văn bản
Cách sử dụng
Lúc đầu, văn bản Html được chuyển đổi thành mô hình đối tượng Dom
var converter = new Converter[];
var domRootElement = converter.Convert[htmlString, asFlowDocument:true, cssStyleSheetProvider]
Bạn phải cung cấp ba đối số
- htmlChuỗi. toàn bộ tài liệu HTML để chuyển đổi dưới dạng chuỗi văn bản [CHÚ Ý. cái này đại diện cho tài liệu HTML, không phải URL. ]
- asFlowDocument. một biến boolean. Nếu đúng, nút gốc Dom được trả về là một HtmlToFlowDocument. nhà thờ. Lưu lượngTài liệu. Nếu sai, nút gốc Dom được trả về là HtmlToFlowDocument. nhà thờ. Mục này sau đó có thể được chèn vào HtmlToFlowDocument. nhà thờ. Phiên bản FlowDocument sau này
- cssStyleSheetProvider. một hàm, chỉ nhận đối số là tên tương đối của một. tệp CSS. Bạn có trách nhiệm tìm nạp. tệp CSS và trả về văn bản của. Tệp CSS làm giá trị trả về của hàm được cung cấp
Giá trị trả về của Convert
là một cây gồm các phần tử Dom. Trong bước tiếp theo, cây Dom này có thể được chuyển đổi thành văn bản thuần túy, thành biểu diễn XAML và sử dụng HtmlToFlowDocument. Dự án Wpf, cây Dom cũng có thể được chuyển đổi trực tiếp thành FlowDocument. Cách thứ hai là cách được đề xuất nhiều nhất để tạo FlowDocument, vì nó bảo tồn phần lớn các thuộc tính
Ví dụ [để chuyển sang Xaml]
var renderer = new HtmlToFlowDocument.Rendering.XamlRenderer[];
renderer.Render[domRootElement, memoryStream];
Không gian tên Rendering
cũng chứa các trình kết xuất khác
cung cấp hình ảnh
Tôi đã quyết định không mã hóa hình ảnh trực tiếp vào cây DOM. Thay vào đó, liên kết muộn chỉ được sử dụng để hiển thị hình ảnh sau khi cây DOM được chuyển đổi thành các lớp Wpf tương ứng. Ví dụ: thẻ hình ảnh Html
được chuyển đổi thành biểu diễn XAML sau
Điều này có nghĩa là, nếu sau đó bạn hiển thị tài liệu, ngữ cảnh dữ liệu của tài liệu của bạn phải chứa một thuộc tính có tên ImageProvider
. Lớp được trả về bởi thuộc tính ImageProvider
phải chứa một thuộc tính được lập chỉ mục, thuộc tính này nhận một chuỗi làm đối số. Chuỗi đại diện cho tên tệp tương đối của hình ảnh. Bạn có trách nhiệm tải hình ảnh và trả về dưới dạng nguồn hình ảnh Wpf
Nếu bạn thấy bản dịch mà bạn cho rằng có vẻ sai, vui lòng tham khảo bài viết gốc để chắc chắn và sau đó sử dụng nút bình chọn để cho chúng tôi biết về nó
Metadata
Vui lòng giúp chúng tôi bằng cách dịch siêu dữ liệu sau cho bài viết/chương, nếu chúng chưa được dịch
Nếu bạn không hài lòng với bản dịch của một mục siêu dữ liệu cụ thể, bạn có thể bỏ phiếu phản đối - khi đạt đến ngưỡng tiêu cực nhất định, mục đó sẽ bị xóa. Vui lòng chỉ gửi bản dịch đã thay đổi của mục siêu dữ liệu nếu bạn có lý do chính đáng để làm như vậy
Vui lòng đăng nhập để dịch siêu dữ liệu. Đã đăng nhập?
- Thêm thông tin
- Tìm kiếm các bài báo gốc bằng tiếng Anh?
Điều khiển văn bản đa dạng thức
Với những khung giao diện người dùng như WinForms, việc hiển thị một số lượng lớn văn bản đã được định dạng là một vấn đề. Tất nhiên, bạn có thể tải tệp vào RichTextBox hoặc bạn cũng có thể tạo các đối tượng WebBrowser và tải trang web cục bộ hoặc từ xa, nhưng việc chỉ định lượng văn bản lớn trong thời gian dự kiến thì không thể thực hiện được. Có vẻ như Microsoft muốn khắc phục điều này trong WPF và hơn thế nữa là cái nhìn đơn giản về văn bản
FlowDocument thật sự làm cho văn bản đa tính chất, và thậm chí còn bao gồm cả hình ảnh, bảng danh sách và các phần tử có thể được thả nổi, điều chỉnh, v. v. Việc sử dụng FlowDocument chỉ có thể định dạng văn bản đa tính chất trong thời gian thực hiện nếu đó là HTML và định hướng cho ứng dụng WPF của bạn
FlowDocument không độc lập. Thay vào đó, nó sử dụng một trong các hàm đóng gói tích hợp, thứ yếu điều khiển cách trình bày FlowDocument và cấp quyền chỉnh sửa văn bản. WPF bao gồm ba điều khiển hiển thị FlowDocument trong chế độ đọc và các điều khiển hỗ trợ điều chỉnh kích thước và trong văn bản
FlowDocumentScrollViewer - trình bao bọc đơn giản nhất của FlowDocument, chỉ hiển thị tài liệu đơn giản dưới dạng tài liệu văn bản dài mà bạn có thể tùy chỉnh
FlowDocumentPageViewer - trình bao bọc tự động chia tài liệu thành nhiều trang, người dùng có thể điều hướng qua lại
FlowDocumentReader - kết hợp giữa FlowDocumentScrollViewer và FlowDocumentPageViewer, cho phép người dùng lựa chọn giữa hai chế độ. Đây cũng là khả năng cung cấp giao diện AND để tìm kiếm tài liệu
FlowDocument thông thường là chỉ đọc, nhưng nếu đặt trong lệnh RichTextBox [sẽ được giới thiệu trong bài hướng dẫn sau ] và bạn có thể chỉnh sửa văn bản, như trình soạn thảo thực tế như Microsoft Word
Với bài viết tiếp theo, chúng ta sẽ thảo luận về trình bao bọc được sử dụng trong FlowDocument, kể cả chỉ đọc hay có thể chỉnh sửa. Sau đó, chúng tôi sẽ xem xét tất cả các khả năng khi tạo tài liệu phong phú bằng FlowDocument, bao gồm bảng, danh sách, hình ảnh và nhiều hơn thế nữa