کار با واترمارک

این مبحث نحوه کار برنامه‌نویسی با واترمارک با استفاده از Aspose.Words را مورد بحث قرار می‌دهد. واترمارک یک تصویر پس زمینه است که در پشت متن یک سند نمایش داده می شود. یک واترمارک می تواند حاوی متن یا تصویری باشد که توسط کلاس Watermark نمایش داده می شود.

نحوه اضافه کردن واترمارک به یک سند

در Microsoft Word، با استفاده از دستور Insert Watermark به راحتی می توان یک واترمارک را در یک سند درج کرد. Aspose.Words کلاس Watermark را برای افزودن یا حذف واترمارک در اسناد فراهم می کند. Aspose.Words شمارش WatermarkType را ارائه می دهد که سه نوع ممکن از واترمارک (TEXT، IMAGE و NONE) را برای کار با آنها تعریف می کند

اضافه کردن واترمارک متن

مثال کد زیر نحوه درج واترمارک متنی را با تعریف TextWatermarkOptions با استفاده از روش set_text نشان می دهد.

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document(docs_base.my_dir + "Document.docx")
options = aw.TextWatermarkOptions()
options.font_family = "Arial"
options.font_size = 36
options.color = drawing.Color.black
options.layout = aw.WatermarkLayout.HORIZONTAL
options.is_semitrasparent = False
doc.watermark.set_text("Test", options)
doc.save(docs_base.artifacts_dir + "WorkWithWatermark.add_text_watermark_with_specific_options.docx")

اضافه کردن واترمارک تصویر

مثال کد زیر نحوه درج واترمارک تصویر را با تعریف ImageWatermarkOptions با استفاده از روش set_image نشان می دهد:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document(docs_base.my_dir + "Document.docx")
options = aw.ImageWatermarkOptions()
options.scale = 5
options.is_washout = False
doc.watermark.set_image(docs_base.images_dir + "Transparent background logo.png", options)
doc.save(docs_base.artifacts_dir + "WorkWithWatermark.add_image_watermark.docx")

واترمارک را می توان با استفاده از کلاس شکل نیز درج کرد. بسیار آسان است که هر شکل یا تصویری را در یک هدر یا پاورقی درج کنید و بنابراین یک واترمارک از هر نوع قابل تصوری ایجاد کنید.

مثال کد زیر یک واترمارک را در یک سند Word وارد می کند:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
def test_add_and_remove_watermark(self) :
doc = aw.Document(docs_base.my_dir + "Document.docx")
self.insert_watermark_text(doc, "CONFIDENTIAL")
doc.save(docs_base.artifacts_dir + "TestFile.watermark.docx")
self.remove_watermark_text(doc)
doc.save(docs_base.artifacts_dir + "WorkWithWatermark.remove_watermark.docx")
# <summary>
# Inserts a watermark into a document.
# </summary>
# <param name="doc">The input document.</param>
# <param name="watermarkText">Text of the watermark.</param>
def insert_watermark_text(self, doc : aw.Document, watermarkText : str) :
# Create a watermark shape, this will be a WordArt shape.
watermark = aw.drawing.Shape(doc, aw.drawing.ShapeType.TEXT_PLAIN_TEXT)
watermark.name = "Watermark"
watermark.text_path.text = watermarkText
watermark.text_path.font_family = "Arial"
watermark.width = 500
watermark.height = 100
# Text will be directed from the bottom-left to the top-right corner.
watermark.rotation = -40
# Remove the following two lines if you need a solid black text.
watermark.fill_color = drawing.Color.gray
watermark.stroke_color = drawing.Color.gray
# Place the watermark in the page center.
watermark.relative_horizontal_position = aw.drawing.RelativeHorizontalPosition.PAGE
watermark.relative_vertical_position = aw.drawing.RelativeVerticalPosition.PAGE
watermark.wrap_type = aw.drawing.WrapType.NONE
watermark.vertical_alignment = aw.drawing.VerticalAlignment.CENTER
watermark.horizontal_alignment = aw.drawing.HorizontalAlignment.CENTER
# Create a new paragraph and append the watermark to this paragraph.
watermarkPara = aw.Paragraph(doc)
watermarkPara.append_child(watermark)
# Insert the watermark into all headers of each document section.
for sect in doc.sections :
sect = sect.as_section()
# There could be up to three different headers in each section.
# Since we want the watermark to appear on all pages, insert it into all headers.
self.insert_watermark_into_header(watermarkPara, sect, aw.HeaderFooterType.HEADER_PRIMARY)
self.insert_watermark_into_header(watermarkPara, sect, aw.HeaderFooterType.HEADER_FIRST)
self.insert_watermark_into_header(watermarkPara, sect, aw.HeaderFooterType.HEADER_EVEN)
def insert_watermark_into_header(self, watermarkPara : aw.Paragraph, sect : aw.Section, headerType : aw.HeaderFooterType) :
header = sect.headers_footers.get_by_header_footer_type(headerType)
if (header == None) :
# There is no header of the specified type in the current section, so we need to create it.
header = aw.HeaderFooter(sect.document, headerType)
sect.headers_footers.add(header)
# Insert a clone of the watermark into the header.
header.append_child(watermarkPara.clone(True))

حذف واترمارک از یک سند

کلاس Watermark روش حذف را برای حذف واترمارک از یک سند ارائه می کند.

مثال کد زیر نحوه حذف واترمارک از اسناد را نشان می دهد:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
# Add a plain text watermark.
doc.watermark.set_text("Aspose Watermark")
# If we wish to edit the text formatting using it as a watermark,
# we can do so by passing a TextWatermarkOptions object when creating the watermark.
textWatermarkOptions = aw.TextWatermarkOptions()
textWatermarkOptions.font_family = "Arial"
textWatermarkOptions.font_size = 36
textWatermarkOptions.color = drawing.Color.black
textWatermarkOptions.layout = aw.WatermarkLayout.DIAGONAL
textWatermarkOptions.is_semitrasparent = False
doc.watermark.set_text("Aspose Watermark", textWatermarkOptions)
doc.save(docs_base.artifacts_dir + "Document.text_watermark.docx")
# We can remove a watermark from a document like this.
if (doc.watermark.type == aw.WatermarkType.TEXT) :
doc.watermark.remove()
doc.save(docs_base.artifacts_dir + "WorkWithWatermark.remove_watermark_from_document.docx")

اگر واترمارک ها با استفاده از شی کلاس Shape اضافه می شوند، برای حذف واترمارک از یک سند باید فقط نام شکل واترمارک را در حین درج تنظیم کنید و سپس شکل واترمارک را با نام اختصاص داده شده حذف کنید.

مثال کد زیر به شما نشان می دهد که چگونه نام شکل واترمارک را تنظیم کرده و آن را از سند حذف کنید:

# Set name to be able to remove it afterwards
watermark.name = "WaterMark"
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
def remove_watermark_text(self, doc : aw.Document) :
for hf in doc.get_child_nodes(aw.NodeType.HEADER_FOOTER, True) :
hf = hf.as_header_footer()
for shape in hf.get_child_nodes(aw.NodeType.SHAPE, True) :
shape = shape.as_shape()
if shape.name.find("WaterMark") >= 0 :
shape.remove()

یک واترمارک در سلول جدول اضافه کنید

گاهی اوقات لازم است یک واترمارک/تصویر را در سلول جدول وارد کنید و آن را در خارج از جدول نمایش دهید، می توانید از ویژگی is_layout_in_cell استفاده کنید. این ویژگی پرچمی را دریافت یا تنظیم می کند که نشان می دهد شکل در داخل جدول یا خارج از آن نمایش داده می شود. توجه داشته باشید که این ویژگی فقط زمانی کار می کند که سند را برای Microsoft Word 2010 با استفاده از روش optimize_for بهینه کنید.

مثال کد زیر نحوه استفاده از این ویژگی را نشان می دهد:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
builder.start_table()
builder.row_format.height = 100
builder.row_format.height_rule = aw.HeightRule.EXACTLY
for i in range(0, 31) :
if (i != 0 and i % 7 == 0) :
builder.end_row()
builder.insert_cell()
builder.write("Cell contents")
builder.end_table()
watermark = aw.drawing.Shape(doc, aw.drawing.ShapeType.TEXT_PLAIN_TEXT)
watermark.relative_horizontal_position = aw.drawing.RelativeHorizontalPosition.PAGE
watermark.relative_vertical_position = aw.drawing.RelativeVerticalPosition.PAGE
watermark.is_layout_in_cell = True # Display the shape outside of the table cell if it will be placed into a cell.
watermark.width = 300
watermark.height = 70
watermark.horizontal_alignment = aw.drawing.HorizontalAlignment.CENTER
watermark.vertical_alignment = aw.drawing.VerticalAlignment.CENTER
watermark.rotation = -40
watermark.fill_color = drawing.Color.gray
watermark.stroke_color = drawing.Color.gray
watermark.text_path.text = "watermarkText"
watermark.text_path.font_family = "Arial"
watermark.name = "WaterMark_" + str(uuid.uuid4())
watermark.wrap_type = aw.drawing.WrapType.NONE
run = doc.get_child_nodes(aw.NodeType.RUN, True)[doc.get_child_nodes(aw.NodeType.RUN, True).count - 1].as_run()
builder.move_to(run)
builder.insert_node(watermark)
doc.compatibility_options.optimize_for(aw.settings.MsWordVersion.WORD2010)
doc.save(docs_base.artifacts_dir + "WorkingWithShapes.layout_in_cell.docx")