Làm việc với Hình mờ

Chủ đề này thảo luận về cách làm việc theo chương trình với hình mờ 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 đại diện bởi lớp Watermark.

Cách thêm hình mờ vào tài liệu

Trong Microsoft Word, 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 bảng liệt kê WatermarkType xác định ba loại hình mờ có thể sử dụng (TEXT, IMAGENONE)

Thêm hình mờ văn bản

Ví dụ mã sau đây minh họa cách chèn hình mờ văn bản vào tài liệu bằng cách xác định TextWatermarkOptions bằng phương pháp 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")

Thêm hình mờ hình ảnh

Ví dụ mã sau đây minh họa cách chèn hình mờ hình ảnh vào tài liệu bằng cách xác định ImageWatermarkOptions bằng phương pháp 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")

Hình mờ cũng có thể được chèn bằng cách sử dụ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 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-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))

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-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")

Nếu hình mờ được thêm bằ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ờ theo tên được gán.

Ví dụ về 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.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()

Thêm hình mờ vào ô 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 is_layout_in_cell. 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 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 pháp optimize_for.

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-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")