Trabajar con marca de agua
Este tema analiza cómo trabajar mediante programación con marcas de agua usando Aspose.Words. Una marca de agua es una imagen de fondo que se muestra detrás del texto en un documento. Una marca de agua puede contener un texto o una imagen representada por la clase Watermark.
Pruebe en línea
Puedes probar esta funcionalidad con nuestro Marca de agua gratuita para documentos en línea.
Cómo agregar una marca de agua a un documento
En Microsoft Word, se puede insertar fácilmente una marca de agua en un documento usando el comando Insertar marca de agua. Aspose.Words proporciona la clase Watermark para agregar o eliminar marcas de agua en documentos. Aspose.Words proporciona la enumeración WatermarkType que define tres tipos posibles de marcas de agua (TEXT, IMAGE y NONE) con las que trabajar.
Agregar marca de agua de texto
El siguiente ejemplo de código demuestra cómo insertar una marca de agua de texto en un documento definiendo TextWatermarkOptions mediante el método 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") |
Agregar marca de agua de imagen
El siguiente ejemplo de código demuestra cómo insertar una marca de agua de imagen en un documento definiendo ImageWatermarkOptions usando el método 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") |
La marca de agua también se puede insertar utilizando la clase de forma. Es muy fácil insertar cualquier forma o imagen en un encabezado o pie de página y así crear una marca de agua de cualquier tipo imaginable.
El siguiente ejemplo de código inserta una marca de agua en un documento de 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)) | |
Eliminar marca de agua de un documento
La clase Watermark proporciona el método de eliminación para eliminar la marca de agua de un documento.
El siguiente ejemplo de código muestra cómo eliminar una marca de agua de los documentos:
# 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") |
Si las marcas de agua se agregan utilizando el objeto de clase Shape, para eliminar la marca de agua de un documento, debe establecer solo el nombre de la forma de la marca de agua durante la inserción y luego eliminar la forma de la marca de agua mediante un nombre asignado.
El siguiente ejemplo de código le muestra cómo establecer el nombre de la forma de la marca de agua y eliminarla del documento:
# 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() | |
Agregar una marca de agua en la celda de la tabla
A veces es necesario insertar una marca de agua/imagen en la celda de una tabla y mostrarla fuera de la tabla; puede usar la propiedad is_layout_in_cell. Esta propiedad obtiene o establece una bandera que indica si la forma se muestra dentro o fuera de una tabla. Tenga en cuenta que esta propiedad solo funciona cuando optimiza el documento para Microsoft Word 2010 utilizando el método optimize_for.
El siguiente ejemplo de código muestra cómo utilizar esta propiedad:
# 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") |