Làm việc Với Watermark
Chủ đề này thảo luận về cách làm việc theo chương trình với watermark bằng Aspose.Words. Hình mờ là hình nền hiển thị phía sau văn bản trong tài liệu. Hình mờ có thể chứa văn bản hoặc hình ảnh được biểu thị bằng lớp Watermark.
Thêm Hình Mờ Vào Tài liệu
Trong Microsoft Word, một hình mờ có thể dễ dàng được chèn vào tài liệu bằng lệnh Chèn Hình Mờ. Aspose.Words cung cấp lớp watermark để thêm hoặc xóa hình mờ trong tài liệu. Aspose.Words cung cấp liệt kê WatermarkType xác định ba loại hình mờ có thể có (Văn bản, Hình ảnh và Không có) để làm việc.
Thêm Hình Mờ Văn Bản
Ví dụ mã sau đây trình bày cách chèn hình mờ văn bản trong tài liệu bằng cách xác định TextWatermarkOptions bằng phương thức SetText.
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
auto doc = System::MakeObject<Document>(inputDataDir + u"Document.doc"); | |
auto options = System::MakeObject<TextWatermarkOptions>(); | |
options->set_FontFamily(u"Arial"); | |
options->set_FontSize(36); | |
options->set_Color(System::Drawing::Color::get_Black()); | |
options->set_Layout(WatermarkLayout::Horizontal); | |
options->set_IsSemitrasparent(false); | |
doc->get_Watermark()->SetText(u"Test", options); | |
auto outputPath = outputDataDir + u"AddTextWatermark.docx"; | |
doc->Save(outputPath); |
Thêm Hình Mờ Hình Ảnh
Ví dụ mã sau đây trình bày cách chèn hình mờ hình ảnh trong tài liệu bằng cách xác định ImageWatermarkOptions bằng phương thức SetImage.
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
auto doc = System::MakeObject<Document>(inputDataDir + u"Document.doc"); | |
auto options = System::MakeObject<ImageWatermarkOptions>(); | |
options->set_Scale(5); | |
options->set_IsWashout(false); | |
doc->get_Watermark()->SetImage(System::Drawing::Image::FromFile(inputDataDir + u"Watermark.png"), options); | |
auto outputPath = outputDataDir + u"AddImageWatermark.docx"; | |
doc->Save(outputPath); |
Hình mờ cũng có thể được chèn bằng lớp hình dạng. Rất dễ dàng để chèn bất kỳ hình dạng hoặc hình ảnh nào vào đầu trang hoặc chân trang và do đó tạo ra một hình mờ thuộc bất kỳ loại nào có thể tưởng tượng được. Ví dụ mã sau đây chèn hình mờ vào Tài liệu Word.
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
namespace | |
{ | |
void InsertWatermarkIntoHeader(const System::SharedPtr<Paragraph>& watermarkPara, const System::SharedPtr<Section>& sect, HeaderFooterType headerType) | |
{ | |
System::SharedPtr<HeaderFooter> header = sect->get_HeadersFooters()->idx_get(headerType); | |
if (header == nullptr) | |
{ | |
// There is no header of the specified type in the current section, create it. | |
header = System::MakeObject<HeaderFooter>(sect->get_Document(), headerType); | |
sect->get_HeadersFooters()->Add(header); | |
} | |
// Insert a clone of the watermark into the header. | |
header->AppendChild((System::StaticCast<Node>(watermarkPara))->Clone(true)); | |
} | |
void InsertWatermarkText(const System::SharedPtr<Document>& doc, const System::String& watermarkText) | |
{ | |
// Create a watermark shape. This will be a WordArt shape. | |
// You are free to try other shape types as watermarks. | |
System::SharedPtr<Shape> watermark = System::MakeObject<Shape>(doc, ShapeType::TextPlainText); | |
watermark->set_Name(u"WaterMark"); | |
// Set up the text of the watermark. | |
watermark->get_TextPath()->set_Text(watermarkText); | |
watermark->get_TextPath()->set_FontFamily(u"Arial"); | |
watermark->set_Width(500); | |
watermark->set_Height(100); | |
// Text will be directed from the bottom-left to the top-right corner. | |
watermark->set_Rotation(-40); | |
// Remove the following two lines if you need a solid black text. | |
watermark->get_Fill()->set_Color(System::Drawing::Color::get_Gray()); | |
// Try LightGray to get more Word-style watermark | |
watermark->set_StrokeColor(System::Drawing::Color::get_Gray()); | |
// Try LightGray to get more Word-style watermark | |
// Place the watermark in the page center. | |
watermark->set_RelativeHorizontalPosition(RelativeHorizontalPosition::Page); | |
watermark->set_RelativeVerticalPosition(RelativeVerticalPosition::Page); | |
watermark->set_WrapType(WrapType::None); | |
watermark->set_VerticalAlignment(VerticalAlignment::Center); | |
watermark->set_HorizontalAlignment(HorizontalAlignment::Center); | |
// Create a new paragraph and append the watermark to this paragraph. | |
System::SharedPtr<Paragraph> watermarkPara = System::MakeObject<Paragraph>(doc); | |
watermarkPara->AppendChild(watermark); | |
// Insert the watermark into all headers of each document section. | |
for (System::SharedPtr<Node> sectionNode : System::IterateOver(doc->get_Sections())) | |
{ | |
System::SharedPtr<Section> sect = System::DynamicCast<Section>(sectionNode); | |
// There could be up to three different headers in each section, since we want | |
// The watermark to appear on all pages, insert into all headers. | |
InsertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType::HeaderPrimary); | |
InsertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType::HeaderFirst); | |
InsertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType::HeaderEven); | |
} | |
} | |
} | |
void AddWatermark() | |
{ | |
std::cout << "AddWatermark example started." << std::endl; | |
// The path to the documents directories. | |
System::String inputDataDir = GetInputDataDir_WorkingWithImages(); | |
System::String outputDataDir = GetOutputDataDir_WorkingWithImages(); | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"TestFile.Watermark.doc"); | |
InsertWatermarkText(doc, u"CONFIDENTIAL"); | |
System::String outputPath = outputDataDir + u"AddWatermark.doc"; | |
doc->Save(outputPath); | |
std::cout << "Added watermark to the document successfully." << std::endl << "File saved at " << outputPath.ToUtf8String() << std::endl; | |
std::cout << "AddWatermark example finished." << std::endl << std::endl; | |
} |
Xóa Hình Mờ Khỏi Tài liệu
Lớp Watermark cung cấp phương thức xóa để xóa hình mờ khỏi tài liệu.
Ví dụ mã sau đây cho thấy cách xóa hình mờ khỏi tài liệu:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
auto doc = System::MakeObject<Document>(inputDataDir + u"TextWatermark.docx"); | |
if (doc->get_Watermark()->get_Type() == WatermarkType::Text) | |
{ | |
doc->get_Watermark()->Remove(); | |
} | |
auto outputPath = outputDataDir + u"RemoveWatermark.docx"; | |
doc->Save(outputPath); |
Nếu các hình mờ được thêm vào bằng cách sử dụng đối tượng lớp Shape thì để xóa hình mờ khỏi tài liệu, bạn chỉ phải đặt tên của hình mờ trong khi chèn và sau đó xóa hình mờ bằng tên được gán.
Ví dụ mã sau đây chỉ cho bạn cách đặt tên của hình mờ và xóa nó khỏi tài liệu:
// Set name to be able to remove it afterwards
watermark->set_Name(u"WaterMark");
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
namespace | |
{ | |
void RemoveWatermarkText(const System::SharedPtr<Document>& doc) | |
{ | |
System::SharedPtr<NodeCollection> headerFooterNodes = doc->GetChildNodes(NodeType::HeaderFooter, true); | |
for (System::SharedPtr<HeaderFooter> hf : System::IterateOver<System::SharedPtr<HeaderFooter>>(headerFooterNodes)) | |
{ | |
System::SharedPtr<NodeCollection> shapeNodes = hf->GetChildNodes(NodeType::Shape, true); | |
for (System::SharedPtr<Shape> shape: System::IterateOver<System::SharedPtr<Shape>>(shapeNodes)) | |
{ | |
if (shape->get_Name().Contains(u"WaterMark")) | |
{ | |
shape->Remove(); | |
} | |
} | |
} | |
} | |
} | |
void RemoveWatermark() | |
{ | |
std::cout << "RemoveWatermark example started." << std::endl; | |
// The path to the documents directories. | |
System::String inputDataDir = GetInputDataDir_WorkingWithImages(); | |
System::String outputDataDir = GetOutputDataDir_WorkingWithImages(); | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"RemoveWatermark.docx"); | |
RemoveWatermarkText(doc); | |
System::String outputPath = outputDataDir + u"RemoveWatermark.docx"; | |
doc->Save(outputPath); | |
std:: cout << "File saved at " << outputPath.ToUtf8String() << std::endl; | |
std::cout << "RemoveWatermark example finished." << std::endl << std::endl; | |
} |
Thêm Hình Mờ Trong Ô Bảng
Đôi khi bạn cần chèn hình mờ/hình ảnh vào ô của bảng và hiển thị nó bên ngoài bảng, bạn có thể sử dụng thuộc tính IsLayoutInCell. Thuộc tính này nhận hoặc đặt cờ cho biết hình dạng được hiển thị bên trong bảng hay bên ngoài bảng. Lưu ý rằng thuộc tính này chỉ hoạt động khi bạn tối ưu hóa tài liệu cho Microsoft Word 2010 bằng phương thức OptimizeFor.
Ví dụ mã sau đây cho thấy cách sử dụng thuộc tính này:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"LayoutInCell.docx"); | |
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc); | |
System::SharedPtr<Shape> watermark = System::MakeObject<Shape>(doc, ShapeType::TextPlainText); | |
watermark->set_RelativeHorizontalPosition(RelativeHorizontalPosition::Page); | |
watermark->set_RelativeVerticalPosition(RelativeVerticalPosition::Page); | |
watermark->set_IsLayoutInCell(true); | |
// Display the shape outside of table cell if it will be placed into a cell. | |
watermark->set_Width(300); | |
watermark->set_Height(70); | |
watermark->set_HorizontalAlignment(HorizontalAlignment::Center); | |
watermark->set_VerticalAlignment(VerticalAlignment::Center); | |
watermark->set_Rotation(-40); | |
watermark->get_Fill()->set_Color(System::Drawing::Color::get_Gray()); | |
watermark->set_StrokeColor(System::Drawing::Color::get_Gray()); | |
watermark->get_TextPath()->set_Text(u"watermarkText"); | |
watermark->get_TextPath()->set_FontFamily(u"Arial"); | |
watermark->set_Name(System::String::Format(u"WaterMark_{0}",System::Guid::NewGuid())); | |
watermark->set_WrapType(WrapType::None); | |
System::SharedPtr<Run> run = System::DynamicCast_noexcept<Run>(doc->GetChildNodes(NodeType::Run, true)->idx_get(doc->GetChildNodes(NodeType::Run, true)->get_Count() - 1)); | |
builder->MoveTo(run); | |
builder->InsertNode(watermark); | |
doc->get_CompatibilityOptions()->OptimizeFor(MsWordVersion::Word2010); | |
System::String outputPath = outputDataDir + u"WorkingWithShapes.SetShapeLayoutInCell.docx"; | |
// Save the document to disk. | |
doc->Save(outputPath); |