Werken met Watermark

Dit onderwerp bespreekt hoe je programmatisch werkt met een watermerk met behulp van Aspose.Words. Een watermerk is een achtergrondafbeelding die achter de tekst in een document wordt weergegeven. Een watermerk kan een tekst of een afbeelding van de Watermark Klasse.

Een watermerk toevoegen aan een document

In Microsoft Word, een watermerk kan gemakkelijk in een document worden geplaatst met behulp van het commando Watermark invoegen. Aspose.Words levert de watermark klasse om watermerk in documenten toe te voegen of te verwijderen. Aspose.Words levert de WatermarkTypeEen opsomming van drie mogelijke soorten watermerken (tekst, afbeelding en geen) om mee te werken

Tekst Watermerk toevoegen

Het volgende voorbeeld van code laat zien hoe je een tekst watermerk in een document invoegt door te definiëren TextWatermarkOptions de SetText methode:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
Document doc = new Document(dataDir + "Document.doc");
TextWatermarkOptions options = new TextWatermarkOptions();
options.setFontFamily("Arial");
options.setFontSize(36);
options.setColor(Color.BLACK);
options.setLayout(WatermarkLayout.HORIZONTAL);
options.isSemitrasparent(false);
doc.getWatermark().setText("Test", options);
doc.save(dataDir + "AddTextWatermark_out.docx");

Watermerk voor afbeelding toevoegen

Het volgende voorbeeld van code laat zien hoe je een watermerk in een document invoegt door het definiëren van ImageWatermarkOptions de SetImage methode:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
Document doc = new Document(dataDir + "Document.doc");
ImageWatermarkOptions options = new ImageWatermarkOptions();
options.setScale(5);
options.isWashout(false);
ImageInputStream stream = ImageIO.createImageInputStream(new File(dataDir + "Watermark.png"));
doc.getWatermark().setImage(ImageIO.read(stream), options);
doc.save(dataDir + "AddImageWatermark_out.docx");

Het watermerk kan ook met de vormklasse worden ingebracht. Het is zeer eenvoudig om een vorm of afbeelding in een header of voettekst in te voegen en zo een watermerk van elk denkbaar type te creëren.

De volgende codevoorbeeld voegt een watermerk in een Word-document:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
@Test
public void addWatermark() throws Exception
{
Document doc = new Document(getMyDir() + "Document.docx");
insertWatermarkText(doc, "CONFIDENTIAL");
doc.save(getArtifactsDir() + "WorkWithWatermark.AddWatermark.docx");
}
/// <summary>
/// Inserts a watermark into a document.
/// </summary>
/// <param name="doc">The input document.</param>
/// <param name="watermarkText">Text of the watermark.</param>
private void insertWatermarkText(Document doc, String watermarkText) throws Exception
{
// Create a watermark shape, this will be a WordArt shape.
Shape watermark = new Shape(doc, ShapeType.TEXT_PLAIN_TEXT); { watermark.setName("Watermark"); }
watermark.getTextPath().setText(watermarkText);
watermark.getTextPath().setFontFamily("Arial");
watermark.setWidth(500.0);
watermark.setHeight(100.0);
// Text will be directed from the bottom-left to the top-right corner.
watermark.setRotation(-40);
// Remove the following two lines if you need a solid black text.
watermark.setFillColor(Color.GRAY);
watermark.setStrokeColor(Color.GRAY);
// Place the watermark in the page center.
watermark.setRelativeHorizontalPosition(RelativeHorizontalPosition.PAGE);
watermark.setRelativeVerticalPosition(RelativeVerticalPosition.PAGE);
watermark.setWrapType(WrapType.NONE);
watermark.setVerticalAlignment(VerticalAlignment.CENTER);
watermark.setHorizontalAlignment(HorizontalAlignment.CENTER);
// Create a new paragraph and append the watermark to this paragraph.
Paragraph watermarkPara = new Paragraph(doc);
watermarkPara.appendChild(watermark);
// Insert the watermark into all headers of each document section.
for (Section sect : (Iterable<Section>) doc.getSections())
{
// 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.
insertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HEADER_PRIMARY);
insertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HEADER_FIRST);
insertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HEADER_EVEN);
}
}
private void insertWatermarkIntoHeader(Paragraph watermarkPara, Section sect,
/*HeaderFooterType*/int headerType)
{
HeaderFooter header = sect.getHeadersFooters().getByHeaderFooterType(headerType);
if (header == null)
{
// There is no header of the specified type in the current section, so we need to create it.
header = new HeaderFooter(sect.getDocument(), headerType);
sect.getHeadersFooters().add(header);
}
// Insert a clone of the watermark into the header.
header.appendChild(watermarkPara.deepClone(true));
}

Watermerk uit een document verwijderen

De Watermark klasse geeft de Remove methode om het watermerk uit een document te verwijderen.

De volgende codevoorbeelden laten zien hoe je een watermerk uit documenten verwijdert:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
Document doc = new Document(dataDir + "AddTextWatermark_out.docx");
if (doc.getWatermark().getType() == WatermarkType.TEXT) {
doc.getWatermark().remove();
}
doc.save(dataDir + "RemoveWatermark_out.docx");

Om het watermerk uit een document te verwijderen, moet u tijdens het invoegen alleen de naam van de watermerkvorm instellen en vervolgens de watermerkvorm met een toegewezen naam verwijderen.

Het volgende voorbeeld van code laat u zien hoe u de naam van het watermerk instelt en het uit het document verwijdert:

// 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-Java
private static final String dataDir = Utils.getDataDir(RemoveWatermark.class);
public static void main(String[] args) throws Exception {
Document doc = new Document(dataDir + "RemoveWatermark.docx");
removeWatermarkText(doc);
doc.save(dataDir + "RemoveWatermark_out.doc");
}
private static void removeWatermarkText(Document doc) throws Exception {
for (HeaderFooter hf : (Iterable<HeaderFooter>) doc.getChildNodes(NodeType.HEADER_FOOTER, true)) {
for (Shape shape : (Iterable<Shape>) hf.getChildNodes(NodeType.SHAPE, true)) {
if (shape.getName().contains("WaterMark"))
shape.remove();
}
}
}

Voeg een watermerk toe aan een tabelcel

Soms moet je een watermerk/afbeelding in de cel van een tafel plaatsen en het buiten de tafel tonen, kunt u gebruiken IsLayoutInCell eigendom. Deze eigenschap krijgt of zet een vlag die aangeeft of de vorm wordt weergegeven in een tabel of daarbuiten. Merk op dat deze eigenschap alleen werkt wanneer u het document voor Microsoft Word 2010 OptimizeFor methode

Het volgende voorbeeld van code laat zien hoe deze eigenschap te gebruiken:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
Document doc = new Document(dataDir + "LayoutInCell.docx");
DocumentBuilder builder = new DocumentBuilder(doc);
Shape watermark = new Shape(doc, ShapeType.TEXT_PLAIN_TEXT);
watermark.setRelativeHorizontalPosition(RelativeHorizontalPosition.PAGE);
watermark.setRelativeVerticalPosition(RelativeVerticalPosition.PAGE);
watermark.isLayoutInCell(false); // Display the shape outside of table cell if it will be placed into a cell.
watermark.setWidth(300);
watermark.setHeight(70);
watermark.setHorizontalAlignment(HorizontalAlignment.CENTER);
watermark.setVerticalAlignment(VerticalAlignment.CENTER);
watermark.setRotation(-40);
watermark.getFill().setColor(Color.GRAY);
watermark.setStrokeColor(Color.GRAY);
watermark.getTextPath().setText("watermarkText");
watermark.getTextPath().setFontFamily("Arial");
watermark.setName("WaterMark_0");
watermark.setWrapType(WrapType.NONE);
Run run = (Run) doc.getChildNodes(NodeType.RUN, true).get(doc.getChildNodes(NodeType.RUN, true).getCount() - 1);
builder.moveTo(run);
builder.insertNode(watermark);
doc.getCompatibilityOptions().optimizeFor(MsWordVersion.WORD_2010);
// Save the document to disk.
dataDir = dataDir + "Shape_IsLayoutInCell_out.docx";
doc.save(dataDir);