Chuyển đổi từ sang html bằng cách sử dụng openxml C#

OpenXHTML là một thư viện trình bao cho SDK XML mở để chuyển đổi tài liệu HTML thành tài liệu từ Open XML. Nó chỉ đơn giản gói gọn sự phức tạp của Open XML nhưng lại phơi bày các thuộc tính của Open XML để thao tác

Cài đặt qua NuGet

Trong Bảng điều khiển quản lý gói, nhập lệnh sau

Install-Package MariGold.OpenXHTML

Cách sử dụng

Để tạo một tài liệu từ Open XML trống bằng OpenXHTML, hãy sử dụng đoạn mã sau

using MariGold.OpenXHTML;

WordDocument doc = new WordDocument["sample.docx"];
doc.Save[];

Để tạo một tài liệu Open XML từ một tài liệu HTML, hãy sử dụng đoạn mã sau

using MariGold.OpenXHTML;

WordDocument doc = new WordDocument["sample.docx"];
doc.Process[new HtmlParser["
sample text
"
]]; doc.Save[];

Sau khi HTML được xử lý, bạn có thể truy cập tài liệu Open XML bằng các thuộc tính sau trong WordDocument

public WordprocessingDocument WordprocessingDocument { get; }
public MainDocumentPart MainDocumentPart { get; }
public Document Document { get; }

Mọi sửa đổi trên tài liệu Open XML phải được thực hiện trước phương thức Lưu. Điều này phải được thực hiện vì phương thức Lưu sẽ ghi tất cả các thay đổi và dỡ tài liệu khỏi bộ nhớ. Vì vậy, bất kỳ sửa đổi nào khác có thể dẫn đến một ngoại lệ. Ví dụ: nếu bạn muốn nối thêm một đoạn văn vào nội dung tài liệu, hãy thử đoạn mã sau

using MariGold.OpenXHTML;
using DocumentFormat.OpenXml.Wordprocessing;

WordDocument doc = new WordDocument["sample.docx"];
doc.Process[new HtmlParser["
sample text
"
]]; doc.Document.Body.AppendChild[new Paragraph[new Run[new Text["added text"]]]]; doc.Save[];

Bạn cũng có thể tạo một tài liệu Open XML trong bộ nhớ. Ví dụ sau minh họa cách lưu tài liệu trong MemoryStream

using [MemoryStream mem = new MemoryStream[]]
{
	WordDocument doc = new WordDocument[mem];
	doc.Save[];
}		

Hình ảnh tương đối

OpenXHTML không thể xử lý hình ảnh có URL tương đối. Điều này có thể được giải quyết bằng thuộc tính ImagePath để đặt địa chỉ cơ sở cho mọi đường dẫn hình ảnh tương đối. Đường dẫn hình ảnh có thể là URL hoặc địa chỉ thư mục vật lý

using MariGold.OpenXHTML;

WordDocument doc = new WordDocument["sample.docx"];
doc.ImagePath = "\\abc.com";
doc.Process[new HtmlParser[""]];
doc.Save[];

Bạn cũng có thể gán bất kỳ địa chỉ URI tệp nào trên đường dẫn hình ảnh

doc.ImagePath = @"file:///C:/Img";

URL cơ sở

Giống như hình ảnh tương đối, tài liệu HTML cũng có thể chứa các liên kết có đường dẫn tương đối. Điều này có thể được giải quyết bằng thuộc tính BaseURL

________số 8

Ngoài ra, nếu có bất kỳ hình ảnh tương đối nào trong tài liệu html đã cho và ImagePath không được chỉ định, OpenXHTML sẽ cố gắng sử dụng BaseURL để giải quyết các đường dẫn hình ảnh tương đối. Vì vậy, sử dụng BaseURL, bạn có thể giải quyết cả đường dẫn và liên kết hình ảnh tương đối. Lý do tạo một thuộc tính riêng cho đường dẫn hình ảnh là đôi khi vị trí hình ảnh khác với địa chỉ URL cơ sở

Lược đồ Uri

Các URL tương đối của giao thức có thể được giải quyết bằng thuộc tính UriSchema

doc.UriSchema = Uri.UriSchemeHttp;

Phân tích cú pháp HTML

OpenXHTML có trình phân tích cú pháp HTML và CSS tích hợp [MariGold. HtmlParser] có thể được thay thế hoàn toàn bằng bất kỳ trình phân tích cú pháp HTML và CSS bên ngoài nào. Phương thức Process trong lớp WordDocument yêu cầu triển khai kiểu giao diện Iparser để xử lý HTML và CSS. Bạn có thể tạo triển khai giao diện IParser này để phân tích cú pháp HTML và CSS

using MariGold.OpenXHTML;

WordDocument doc = new WordDocument["sample.docx"];
doc.Save[];
0

using MariGold.OpenXHTML;

WordDocument doc = new WordDocument["sample.docx"];
doc.Save[];
1

Đây là cấu trúc của IParser. BaseURL và UriSchema chỉ là hai thuộc tính đơn giản để lưu trữ địa chỉ url cơ sở và lược đồ uri để xử lý các liên kết và hình ảnh HTML. Cả hai thuộc tính được sử dụng để giải quyết đường dẫn tương đối và tự do của giao thức của các URL biểu định kiểu bên ngoài. Phương pháp Tính toánRelativeChildFontSize được sử dụng để tính toán kích thước phông chữ con tương đối. Ví dụ: trong html bên dưới, kích thước phông chữ của thẻ h1 là 20 pixel

using MariGold.OpenXHTML;

WordDocument doc = new WordDocument["sample.docx"];
doc.Save[];
2

Nếu bạn không muốn triển khai lại chức năng này, bạn chỉ cần sử dụng lớp CSSUtility trong quá trình triển khai của mình

using MariGold.OpenXHTML;

WordDocument doc = new WordDocument["sample.docx"];
doc.Save[];
3

Phương thức FindBodyOrFirstElement dự kiến ​​sẽ trả về một biểu diễn IHtmlNode của thẻ body html và cấu trúc phân cấp của các phần tử con của nó. Nếu tài liệu không có phần tử cơ thể, thì nó sẽ trả về phần tử gốc đầu tiên. Tất cả các kiểu CSS và thuộc tính HTML của IHtmlNode phải được giải quyết và điền vào các thuộc tính tương ứng

Chủ Đề