워터마크 작업
이 항목에서는 다음을 사용하여 워터마크를 프로그래밍 방식으로 작업하는 방법에 대해 설명합니다 Aspose.Words. 워터마크는 문서의 텍스트 뒤에 표시되는 배경 이미지입니다. 워터마크는 텍스트나 이미지를 포함할 수 있습니다. Watermark 수업
문서에 워터마크 추가
그 안에 Microsoft Word,워터마크 삽입 명령을 사용하여 문서에 워터마크를 쉽게 삽입할 수 있습니다. Aspose.Words 제공 watermark 문서에 워터마크를 추가하거나 제거하는 클래스. Aspose.Words 제공 WatermarkType 사용할 수 있는 세 가지 유형의 워터마크(텍스트,이미지 및 없음)를 정의하는 열거형.
텍스트 워터마크 추가
다음 코드 예제에서는 다음을 정의하여 문서에 텍스트 워터마크를 삽입하는 방법을 보여 줍니다 TextWatermarkOptions 를 사용하여 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); |
이미지 워터마크 추가
다음 코드 예제에서는 다음을 정의하여 문서에 이미지 워터마크를 삽입하는 방법을 보여 줍니다 ImageWatermarkOptions 를 사용하여 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); |
워터 마크는 또한 모양 클래스를 사용하여 삽입 할 수 있습니다. 머리글이나 바닥 글에 어떤 모양이나 이미지를 삽입하여 상상할 수있는 유형의 워터 마크를 만드는 것은 매우 쉽습니다. 다음 코드 예제에서는 워드 문서에 워터마크를 삽입합니다.
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; | |
} |
문서에서 워터마크 제거
그 Watermark 클래스는 문서에서 워터마크를 제거하는 제거 방법을 제공합니다.
다음 코드 예제에서는 문서에서 워터마크를 제거하는 방법을 보여 줍니다:
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); |
워터마크가 추가되면 Shape 클래스 개체는 다음 삽입하는 동안 워터 마크 모양의 이름을 설정 한 다음 할당 된 이름으로 워터 마크 모양을 제거해야 문서에서 워터 마크를 제거합니다.
다음 코드 예제에서는 워터마크 모양의 이름을 설정하고 문서에서 제거하는 방법을 보여 줍니다:
// 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; | |
} |
표 셀에 워터마크 추가
때때로 당신은 테이블의 셀에 워터 마크/이미지를 삽입하고 테이블 외부에 표시해야,당신은 사용할 수 있습니다 IsLayoutInCell 재산. 이 속성은 셰이프가 테이블 내부 또는 테이블 외부에 표시되는지 여부를 나타내는 플래그를 가져오거나 설정합니다. 이 속성은 다음에 대해 문서를 최적화할 때만 작동합니다 Microsoft Word 2010 년 OptimizeFor 방법
다음 코드 예제에서는 이 속성을 사용하는 방법을 보여 줍니다:
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); |