Ứng dụng trong hệ thống

Một phần của tài liệu Tìm hiểu và xây dựng hệ thống framework hỗ trợ các hình thức trắc nghiệm (Trang 140 - 144)

Để có thể thực hiện automation, trước tiên phải cho phép chương trình tham chiếu đến thư viện xử lý của Word.

Hình 9-5 Add reference đến Word Object Library trong .NET 9.2.4.1 Import

Thao tác import trong hệ thống cần phải xử lý cả việc import hình ảnh. Mà như đã biết, các hình ảnh được chèn vào trong file .doc thì sẽ được lưu cùng với file .doc đó. Do vậy, để lấy được hình cụ thể, chúng em phải tiến hành lưu tạm file .doc dưới dạng trang web, rồi tìm trong source của trang web liên kết đến hình ảnh cụ thểđể copy lưu vào trong cơ sở dữ liệu.

Object missing = System.Reflection.Missing.Value;

object saveFileName = uniqueFileName;

object fileFormat = Word.WdSaveFormat.wdFormatHTML;

// Luu vao file tam duoi dang html

wordApp.ActiveDocument.SaveAs(

ref saveFileName, ref fileFormat, ref missing, ref missing,

ref missing, ref missing, ref missing,

ref missing, ref missing, ref missing, ref missing, ref missing,

wordApp.ActiveDocument.Close(ref missing, ref missing, ref missing); StreamReader r = new StreamReader(uniqueFileName);

string str = r.ReadToEnd(); r.Close(); int n1 = str.IndexOf("<body"); char tempChar = '<'; while(tempChar != '>') { tempChar = str[n1]; n1++; } int n2 = str.IndexOf("</body>");

string strFinal = str.Substring(n1, n2 - n1);

Dựa vào các dấu phân cách quy định sẵn, chúng em sẽ tách được nội dung các câu hỏi, và trong mỗi câu hỏi sẽ lọc ra được đâu là nội dung hỏi và đâu ra nội dung các lựa chọn (đơn thuần chỉ là thao tác xử lý chuỗi). Cụ thể, một câu hỏi trong file muốn import phải có định dạng như sau: [!!!] Nội dung hỏi <!!!> Nội dung lựa chọn thứ 1 * <!!!> Nội dung lựa chọn thứ 2 <!!!> Nội dung lựa chọn thứ 3 <!!!> Nội dung lựa chọn thứ 4 * <!!!> Nội dung lựa chọn thứ 5 Trong đó:

- [!!!] là dấu quy định phân cách các câu hỏi. - <!!!> là dấu quy định phân cách các lựa chọn. - * là dấu quy định lựa chọn đúng.

- Số lựa chọn và số lựa chọn đúng là không có giới hạn.

Thông tin nội dung câu hỏi lấy được sẽđược sử dụng để xây dựng thành chuỗi xml và lưu vào CSDL.

9.2.4.2 Export

Hệ thống hỗ trợ việc export 1 đề thi ra file .doc theo 1 template đề thi có sẵn. Template đề thi được tạo ra theo ý thích của các giáo viên và được copy vào trong thư mục WordFile Temlates của hệ thống. 1 template đề thi phải đáp ứng các yêu cầu sau:

- Có 1 bookmark có tên là assName đặt tại vị trí giáo viên muốn hiển thị tên bài thi.

- Có 1 bookmark có tên là assHeader đặt tại vị trí giáo viên muốn hiển thị các ghi chú đầu bài thi (header)

- Có 1 bookmark có tên là assFooter đặt tại vị trí giáo viên muốn hiển thị các ghi chú cuối bài thi (footer)

- Có 1 bookmark có tên là assSections đặt tại vị trí giáo viên muốn bắt đầu hiển thị các section, các câu hỏi của bài thi.

- Phần nào giáo viên không muốn hiển thị thì bookmark đánh dấu phần đó không cần phải được tạo ra.

Khi có yêu cầu export 1 đề thi ra file, chương trình sẽ tìm vị trí các bookmark, nếu bookmark tồn tại trong file template được chọn thì chương trình sẽ ghi đoạn văn bản phù hợp vào vị trí bookmark đó.

foreach (Word.Bookmark brm in privateWordApp.ActiveDocument.Bookmarks)

if (brm.Name == "assHeader")

ReplaceBookmarkText("assHeader", privateAssessment.HeaderNote); Trường hợp đoạn văn bản cần ghi có chứa tag image (tức là phải chèn 1 hình vào file) thì chương trình sẽ thực hiện thêm 1 đối tượng Word.Shape vào tập hợp hình ảnh mà văn bản đang được xử lý quản lý. Khi lưu văn bản, các hình ảnh cũng sẽđược lưu trữ theo.

private void TypeString(Word.ApplicationClass privateWordApp, string

strText) { (adsbygoogle = window.adsbygoogle || []).push({});

int pos = strText.IndexOf("<img");

while (pos >= 0) {

privateWordApp.Selection.TypeText(strText.Substring(0, pos)); strText = strText.Remove(0, pos);

pos = strText.IndexOf("src="); strText.Remove(0, pos+1);

pos = strText.IndexOf("\"");

string image = strText.Substring(0, pos); Object oFalse = false;

Object oTrue = true;

Object oMissing = Type.Missing;

// them 1 hinh anh vao tap hop InlineShapes

privateWordApp.Selection.InlineShapes.AddPicture(image, ref oFalse, ref oTrue, ref oMissing);

pos = strText.IndexOf("/img>"); strText.Remove(0, pos); pos = strText.IndexOf("<img"); } privateWordApp.Selection.TypeText(strText); }

Chương 10 Tng kết

Một phần của tài liệu Tìm hiểu và xây dựng hệ thống framework hỗ trợ các hình thức trắc nghiệm (Trang 140 - 144)