Lavorare con la filigrana

In questo argomento viene illustrato come lavorare a livello di codice con la filigrana utilizzando Aspose.Words. Una filigrana è un’immagine di sfondo visualizzata dietro il testo in un documento. Una filigrana può contenere un testo o un’immagine rappresentata dalla classe Watermark.

Come aggiungere una filigrana a un documento

In Microsoft Word, una filigrana può essere facilmente inserita in un documento utilizzando il comando Inserisci filigrana. Aspose.Words fornisce la classe Watermark per aggiungere o rimuovere la filigrana nei documenti. Aspose.Words fornisce l’enumerazione WatermarkType che definisce tre possibili tipi di filigrane (TEXT, IMAGE e NONE) con cui lavorare

Aggiungi filigrana di testo

Nell’esempio di codice seguente viene illustrato come inserire una filigrana di testo in un documento definendo TextWatermarkOptions utilizzando il metodo 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")

Aggiungi filigrana immagine

L’esempio di codice seguente dimostra come inserire una filigrana di immagine in un documento definendo ImageWatermarkOptions utilizzando il metodo 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 filigrana può anche essere inserita utilizzando la classe forma. È molto semplice inserire qualsiasi forma o immagine nell’intestazione o nel piè di pagina e creare così una filigrana di qualsiasi tipo immaginabile.

L’esempio di codice seguente inserisce una filigrana in un documento di 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))

Rimuovi la filigrana da un documento

La classe Watermark fornisce il metodo di rimozione per rimuovere la filigrana da un documento.

Il seguente esempio di codice mostra come rimuovere una filigrana dai documenti:

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

Se le filigrane vengono aggiunte utilizzando l’oggetto classe Shape, per rimuovere la filigrana da un documento è necessario impostare solo il nome della forma della filigrana durante l’inserimento e quindi rimuovere la forma della filigrana con un nome assegnato.

Il seguente esempio di codice mostra come impostare il nome della forma della filigrana e rimuoverlo dal 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()

Aggiungi una filigrana nella cella della tabella

A volte è necessario inserire una filigrana/immagine nella cella di una tabella e visualizzarla all’esterno della tabella, è possibile utilizzare la proprietà is_layout_in_cell. Questa proprietà ottiene o imposta un flag che indica se la forma viene visualizzata all’interno o all’esterno di una tabella. Tieni presente che questa proprietà funziona solo quando ottimizzi il documento per Microsoft Word 2010 utilizzando il metodo optimize_for.

L’esempio di codice seguente mostra come utilizzare questa proprietà:

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