Các tệp XPS có thể được sử dụng để hiển thị nhiều thông tin trực quan. Chúng hỗ trợ văn bản, hình ảnh, độ trong suốt của đối tượng, lưới, độ dốc và nhiều tính năng khác. Bạn có thể chèn các đối tượng chuyển màu, lưới và trong suốt vào các tệp XPS theo yêu cầu của mình. Trong bài viết này, chúng ta sẽ khám phá chi tiết các tính năng này, cùng với các ví dụ và trường hợp sử dụng khác nhau. Chúng ta hãy đi qua các chủ đề sau:
- Cài đặt API XPS cho C++
- Thêm Gradient trong tệp XPS bằng C++
- Chèn Grid vào file XPS bằng C++
- Chèn đối tượng trong suốt vào tệp XPS bằng C++
Cài đặt API XPS cho C++
Bạn có thể nhanh chóng và dễ dàng định cấu hình API Aspose.Page for C++ trong các ứng dụng lập trình của mình để thao tác với XPS, PS, EPS và các định dạng tệp được hỗ trợ khác. Chỉ cần tải xuống tệp DLL từ Tải xuống chính thức hoặc cài đặt nó từ thư viện NuGet bằng lệnh bên dưới:
PM> Install-Package Aspose.Page.Cpp
Thêm Gradient trong tệp XPS bằng C++
Đôi khi bạn cần thêm độ dốc trong tệp XPS. Bạn có thể thao tác với tệp XPS vì API cho phép bạn thêm độ dốc tuyến tính, ngang cũng như dọc. Hãy để chúng tôi thêm các gradient sau vào tệp XPS:
Thêm Gradient dọc trong tệp XPS bằng C++
Bạn có thể dễ dàng thêm độ dốc dọc trong tệp XPS bằng một vài lệnh gọi API đơn giản. Dưới đây là các bước để thêm gradient dọc:
- Tạo một [Tài liệu XPS] mới]7
- Khởi tạo danh sách XpsGradientStop
- Tạo một đường dẫn mới bằng cách xác định hình học
- Lưu tài liệu XPS kết quả
Đoạn mã dưới đây dựa trên các bước này, minh họa cách thêm dải màu dọc trong tệp XPS bằng C++:
// Tạo tài liệu XPS mới
auto doc = System::MakeObject<XpsDocument>();
// Khởi tạo danh sách XpsGradientStop
auto stops = System::MakeObject<System::Collections::Generic::List<System::SharedPtr<XpsGradientStop>>>();
stops->Add(doc->CreateGradientStop(doc->CreateColor(253, 255, 12, 0), 0.f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(252, 255, 154, 0), 0.359375f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(252, 255, 56, 0), 0.424805f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(253, 255, 229, 0), 0.879883f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(252, 255, 255, 234), 1.f));
// Tạo đường dẫn mới bằng cách xác định hình học ở dạng viết tắt
System::SharedPtr<XpsPath> path = doc->AddPath(doc->CreatePathGeometry(u"M 10,110 L 228,110 228,200 10,200"));
path->set_RenderTransform(doc->CreateMatrix(1.f, 0.f, 0.f, 1.f, 20.f, 70.f));
path->set_Fill(doc->CreateLinearGradientBrush(System::Drawing::PointF(10.f, 110.f), System::Drawing::PointF(10.f, 200.f)));
(System::DynamicCast<Aspose::Page::Xps::XpsModel::XpsGradientBrush>(path->get_Fill()))->get_GradientStops()->AddRange(stops);
// Lưu tài liệu XPS kết quả
doc->Save(RunExamples::outDir() + u"AddVerticalGradient_out.xps");
Thêm Gradient ngang trong XPS bằng C++
Một biến thể khác có thể có của độ dốc trong các tệp XPS là độ dốc ngang. Cách tiếp cận thêm gradient ngang hơi liên quan đến trường hợp sử dụng mà chúng ta đã thảo luận ở trên. Sau đây là các bước bạn cần thực hiện để thêm độ dốc ngang:
- Tạo tài liệu XPS mới
- Chỉ định các điểm dừng chuyển màu bằng XpsGradientStop
- Tạo đường dẫn với hình học
- Lưu tài liệu XPS đầu ra
Đoạn mã sau giải thích cách thêm độ dốc ngang trong tệp XPS bằng C++:
// Tạo tài liệu XPS mới
auto doc = System::MakeObject<XpsDocument>();
// Khởi tạo danh sách XpsGradientStop
System::SharedPtr<System::Collections::Generic::List<System::SharedPtr<XpsGradientStop>>> stops = System::MakeObject<System::Collections::Generic::List<System::SharedPtr<XpsGradientStop>>>();
stops->Add(doc->CreateGradientStop(doc->CreateColor(255, 244, 253, 225), 0.0673828f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(255, 251, 240, 23), 0.314453f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(255, 252, 209, 0), 0.482422f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(255, 241, 254, 161), 0.634766f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(255, 53, 253, 255), 0.915039f));
stops->Add(doc->CreateGradientStop(doc->CreateColor(255, 12, 91, 248), 1.f));
// Tạo đường dẫn mới bằng cách xác định hình học ở dạng viết tắt
System::SharedPtr<XpsPath> path = doc->AddPath(doc->CreatePathGeometry(u"M 10,210 L 228,210 228,300 10,300"));
path->set_RenderTransform(doc->CreateMatrix(1.f, 0.f, 0.f, 1.f, 20.f, 70.f));
path->set_Fill(doc->CreateLinearGradientBrush(System::Drawing::PointF(10.f, 0.f), System::Drawing::PointF(228.f, 0.f)));
(System::DynamicCast<Aspose::Page::Xps::XpsModel::XpsGradientBrush>(path->get_Fill()))->get_GradientStops()->AddRange(stops);
// Lưu tài liệu XPS kết quả
doc->Save(RunExamples::outDir() + u"AddHorizontalGradient_out.xps");
Chèn Grid vào file XPS bằng C++
API Aspose.Page for C++ cho phép bạn kết xuất lưới trong tệp XPS với nhiều thuộc tính để kiểm soát kết xuất. Chúng ta hãy xem xét ví dụ về chèn lưới vào tệp XPS trong các ứng dụng dựa trên C++ của bạn. Bạn có thể làm việc với tính năng này bằng cách xem xét các bước bên dưới:
- Khởi tạo đối tượng lớp XpsDocument
- Chỉ định Hình học cho lưới VisualBrush
- Tạo Canvas cho lưới màu đỏ tươi VisualBrush
- Tạo cọ vẽ trực quan và thêm lưới
- Lưu tệp XPS đầu ra
Đoạn mã dưới đây dựa trên các bước giải thích cách chèn lưới vào tệp XPS bằng C++:
auto doc = System::MakeObject<XpsDocument>();
// Hình học cho lưới màu đỏ tươi VisualBrush
System::SharedPtr<XpsPathGeometry> pathGeometry = doc->CreatePathGeometry();
pathGeometry->AddSegment(doc->CreatePolyLineSegment(System::MakeArray<System::Drawing::PointF>({ System::Drawing::PointF(240.f, 5.f), System::Drawing::PointF(240.f, 310.f), System::Drawing::PointF(0.f, 310.f) })));
pathGeometry->idx_get(0)->set_StartPoint(System::Drawing::PointF(0.f, 5.f));
// Canvas cho lưới màu đỏ tươi VisualBrush
System::SharedPtr<XpsCanvas> visualCanvas = doc->CreateCanvas();
System::SharedPtr<XpsPath> visualPath = visualCanvas->AddPath(doc->CreatePathGeometry(u"M 0,4 L 4,4 4,0 6,0 6,4 10,4 10,6 6,6 6,10 4,10 4,6 0,6 Z"));
visualPath->set_Fill(doc->CreateSolidColorBrush(doc->CreateColor(1.f, .61f, 0.1f, 0.61f)));
System::SharedPtr<XpsPath> gridPath = doc->CreatePath(pathGeometry);
//Tạo Visual Brush, nó được chỉ định bởi một số đoạn XPS (đồ họa vector và glyphs)
gridPath->set_Fill(doc->CreateVisualBrush(visualCanvas, System::Drawing::RectangleF(0.f, 0.f, 10.f, 10.f), System::Drawing::RectangleF(0.f, 0.f, 10.f, 10.f)));
(System::DynamicCast<Aspose::Page::Xps::XpsModel::XpsVisualBrush>(gridPath->get_Fill()))->set_TileMode(Aspose::Page::Xps::XpsModel::XpsTileMode::Tile);
// vải bạt mới
System::SharedPtr<XpsCanvas> canvas = doc->AddCanvas();
canvas->set_RenderTransform(doc->CreateMatrix(1.f, 0.f, 0.f, 1.f, 268.f, 70.f));
// Thêm lưới
canvas->AddPath(gridPath);
// Hình chữ nhật trong suốt màu đỏ ở giữa trên cùng
System::SharedPtr<XpsPath> path = canvas->AddPath(doc->CreatePathGeometry(u"M 30,20 l 258.24,0 0,56.64 -258.24,0 Z"));
path = canvas->AddPath(doc->CreatePathGeometry(u"M 10,10 L 228,10 228,100 10,100"));
path->set_Fill(doc->CreateSolidColorBrush(doc->CreateColor(1.0f, 0.0f, 0.0f)));
path->set_Opacity(0.7f);
// Lưu tài liệu XPS kết quả
doc->Save(RunExamples::outDir() + u"AddGrid_out.xps");
Chèn đối tượng trong suốt vào tệp XPS bằng C++
Một tính năng thú vị khác để làm việc với các tệp XPS là hỗ trợ độ trong suốt và độ mờ. Bạn có thể cần thêm các đối tượng trong suốt vào tệp XPS trong các tình huống khác nhau. Điều này có thể đạt được với sự trợ giúp của các bước sau:
- Tạo [Tài liệu XPS] mới]11
- Tạo đường dẫn với hình học hình chữ nhật khép kín
- Thêm hình học cho các đường dẫn khác nhau
- Lưu tài liệu XPS đầu ra
Các bước này được theo sau bởi đoạn mã sau, minh họa cách thêm đối tượng trong suốt vào tệp XPS bằng ngôn ngữ lập trình C++:
// Tạo tài liệu XPS mới
auto doc = System::MakeObject<XpsDocument>();
// Chỉ để chứng minh sự minh bạch
doc->AddPath(doc->CreatePathGeometry(u"M120,0 H400 v1000 H120"))->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Gray()));
doc->AddPath(doc->CreatePathGeometry(u"M300,120 h600 V420 h-600"))->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Gray()));
// Tạo đường dẫn với hình học hình chữ nhật khép kín
System::SharedPtr<XpsPath> path1 = doc->CreatePath(doc->CreatePathGeometry(u"M20,20 h200 v200 h-200 z"));
// Đặt bàn chải đặc màu xanh để điền vào đường dẫn1
path1->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Blue()));
// Thêm nó vào trang hiện tại
System::SharedPtr<XpsPath> path2 = doc->Add(path1);
// path1 và path2 giống nhau ngay khi path1 chưa được đặt bên trong bất kỳ phần tử nào khác
// (có nghĩa là path1 không có phần tử cha).
// Vì màu của hình chữ nhật đó trên trang thực sự chuyển sang màu xanh lá cây
path2->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Green()));
// Bây giờ thêm path2 một lần nữa. Bây giờ path2 có cha mẹ. Vì vậy, đường dẫn 3 sẽ không giống với đường dẫn 2.
// Do đó, một hình chữ nhật mới được vẽ trên trang ...
System::SharedPtr<XpsPath> path3 = doc->Add(path2);
// ... và chúng tôi dịch chuyển nó thấp hơn 300 đơn vị ...
path3->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 300.0f));
// ... và đặt bút vẽ đặc màu đỏ để lấp đầy nó
path3->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Red()));
// Tạo đường dẫn4 mới với hình học của đường dẫn2 ...
System::SharedPtr<XpsPath> path4 = doc->AddPath(path2->get_Data());
// ... dịch chuyển nó sang phải 300 đơn vị ...
path4->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 300.0f, 0.0f));
// ... và đặt màu xanh đặc
path4->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Blue()));
// Thêm đường dẫn4 một lần nữa.
System::SharedPtr<XpsPath> path5 = doc->Add(path4);
// path4 và path5 lại không giống nhau ...
// (di chuyển đường path5 thấp hơn 300 đơn vị)
path5->set_RenderTransform(path5->get_RenderTransform()->Clone());
// để ngắt kết nối giá trị RenderTransform khỏi đường dẫn 4 (xem nhận xét tiếp theo về thuộc tính Điền)
path5->get_RenderTransform()->Translate(0.0f, 300.0f);
// ... nhưng nếu chúng ta đặt độ mờ của thuộc tính Fill, nó sẽ có hiệu lực trên cả đường dẫn 5 và đường dẫn 4
// bởi vì bàn chải là một giá trị thuộc tính phức hợp giữ nguyên cho đường dẫn 5 và đường dẫn 4
path5->get_Fill()->set_Opacity(0.8f);
// Tạo path6 mới với hình học của path2 ...
System::SharedPtr<XpsPath> path6 = doc->AddPath(path2->get_Data());
// ... dịch chuyển nó sang phải 600 đơn vị ...
path6->set_RenderTransform(doc->CreateMatrix(1.0f, 0.0f, 0.0f, 1.0f, 600.0f, 0.0f));
// ... và thiết lập màu đặc màu vàng
path6->set_Fill(doc->CreateSolidColorBrush(System::Drawing::Color::get_Yellow()));
// Bây giờ thêm bản sao của path6 ...
System::SharedPtr<XpsPath> path7 = doc->Add(path6->Clone());
// (di chuyển đường path5 thấp hơn 300 đơn vị)
path7->set_RenderTransform(path7->get_RenderTransform()->Clone());
path7->get_RenderTransform()->Translate(0.0f, 300.0f);
// ... và đặt độ mờ cho đường dẫn7
path7->get_Fill()->set_Opacity(0.8f);
// Giờ đây, độ mờ có tác dụng độc lập ngay khi các giá trị thuộc tính được sao chép cùng với phần tử
// Khối mã sau tương đương với khối trước.
// Thêm chính đường dẫn6. path6 và path7 không giống nhau. Mặc dù các giá trị thuộc tính Điền của chúng giống nhau
//XpsPath đường dẫn7 = doc.Add(path6);
//path7.RenderTransform = path7.RenderTransform.Clone();
//path7.RenderTransform.Translate(0, 300);
// Để "ngắt kết nối" thuộc tính Fill của path7 khỏi thuộc tính Fill của path6, hãy gán lại nó cho bản sao của nó (hoặc bản sao Fill của path6)
//path7.Fill = ((XpsSolidColorBrush)path7.Fill).Clone();
//đường dẫn7.Fill.Opacity = 0,8f;
// Lưu tài liệu XPS kết quả
doc->Save(RunExamples::outDir() + u"WorkingWithTransparency_out.xps");
Sự kết luận
Tóm lại, chúng tôi đã khám phá một số tính năng để hoạt động với các tệp XPS. Bạn có thể thêm một dải màu, tuyến tính, ngang hoặc dọc, cũng như lưới hoặc các đối tượng trong suốt trong tệp XPS. Ngoài ra, bạn có thể xem một số tính năng khác bằng cách tải xuống Dự án ví dụ. Trong trường hợp có bất kỳ sự mơ hồ nào, vui lòng viết thư cho chúng tôi tại Diễn đàn hỗ trợ miễn phí. Chúng tôi sẽ rất hân hạnh được hướng dẫn bạn!