Práce s vodoznakem
Toto téma pojednává o tom, jak pracovat programově s vodoznakem pomocí Aspose.Words. Vodoznak je obrázek pozadí, který se zobrazí za textem v dokumentu. Vodoznak může obsahovat text nebo obraz reprezentovaný Watermark třída.
Zkuste online
Tuto funkci můžete zkusit s naší Zdarma online dokument vodoznak.
Přidat vodoznak do dokumentu
In Microsoft Word, vodoznak lze snadno vložit do dokumentu pomocí příkazu Insert Watermark. Aspose.Words poskytuje watermark třída přidat nebo odstranit vodoznak v dokumentech. Aspose.Words poskytuje Vodoznak Typčíslice definující tři možné typy vodoznaků (Text, Image a None) pro práci
Přidat text vodoznak
Následující příklad kódu ukazuje, jak vložit textový vodoznak do dokumentu definováním TextWatermarkOptions s použitím SetText metoda:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(dataDir + "Document.doc"); | |
TextWatermarkOptions options = new TextWatermarkOptions() | |
{ | |
FontFamily = "Arial", | |
FontSize = 36, | |
Color = Color.Black, | |
Layout = WatermarkLayout.Horizontal, | |
IsSemitrasparent = false | |
}; | |
doc.Watermark.SetText("Test", options); | |
doc.Save(dataDir + "AddTextWatermark_out.docx"); |
Přidat obrázek vodoznak
Následující příklad kódu ukazuje, jak vložit vodoznak obrázku do dokumentu definováním ImageWatermarkOptions s použitím SetImage metoda:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(dataDir + "Document.doc"); | |
ImageWatermarkOptions options = new ImageWatermarkOptions() | |
{ | |
Scale = 5, | |
IsWashout = false | |
}; | |
doc.Watermark.SetImage(Image.FromFile(dataDir + "Watermark.png"), options); | |
doc.Save(dataDir + "AddImageWatermark_out.docx"); |
Vodoznak lze také vložit pomocí tvarové třídy. Je velmi snadné vložit jakýkoliv tvar nebo obraz do hlavičky nebo zápatí a vytvořit tak vodoznak jakéhokoliv představitelného typu.
Následující příklad kódu vloží vodoznak do dokumentu Word:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
[Test] | |
public void AddWatermark() | |
{ | |
Document doc = new Document(MyDir + "Document.docx"); | |
InsertWatermarkText(doc, "CONFIDENTIAL"); | |
doc.Save(ArtifactsDir + "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) | |
{ | |
// Create a watermark shape, this will be a WordArt shape. | |
Shape watermark = new Shape(doc, ShapeType.TextPlainText) { Name = "Watermark" }; | |
watermark.TextPath.Text = watermarkText; | |
watermark.TextPath.FontFamily = "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.FillColor = Color.Gray; | |
watermark.StrokeColor = Color.Gray; | |
// Place the watermark in the page center. | |
watermark.RelativeHorizontalPosition = RelativeHorizontalPosition.Page; | |
watermark.RelativeVerticalPosition = RelativeVerticalPosition.Page; | |
watermark.WrapType = WrapType.None; | |
watermark.VerticalAlignment = VerticalAlignment.Center; | |
watermark.HorizontalAlignment = 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. | |
foreach (Section sect in doc.Sections) | |
{ | |
// 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.HeaderPrimary); | |
InsertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HeaderFirst); | |
InsertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HeaderEven); | |
} | |
} | |
private void InsertWatermarkIntoHeader(Paragraph watermarkPara, Section sect, | |
HeaderFooterType headerType) | |
{ | |
HeaderFooter header = sect.HeadersFooters[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.Document, headerType); | |
sect.HeadersFooters.Add(header); | |
} | |
// Insert a clone of the watermark into the header. | |
header.AppendChild(watermarkPara.Clone(true)); | |
} |
Odstranit vodoznak z dokumentu
• Watermark třída poskytuje metodu odstranění vodoznaku z dokumentu.
Následující příklad kódu ukazuje, jak odstranit vodoznak z dokumentů:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(dataDir + "AddTextWatermark_out.docx"); | |
if (doc.Watermark.Type == WatermarkType.Text) | |
{ | |
doc.Watermark.Remove(); | |
} | |
doc.Save(dataDir + "RemoveWatermark_out.docx"); |
Pokud jsou vodoznaky přidány pomocí Shape třídní objekt pak odstranit vodoznak z dokumentu musíte nastavit pouze název vodoznaku tvaru při vkládání a poté odstranit tvar vodoznaku přiřazeným názvem.
Následující příklad kódu vám ukáže, jak nastavit název tvaru vodoznaku a odstranit jej z dokumentu:
// 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-.NET | |
public static void Run() | |
{ | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir_WorkingWithImages(); | |
string fileName = "RemoveWatermark.docx"; | |
Document doc = new Document(dataDir + fileName); | |
RemoveWatermarkText(doc); | |
dataDir = dataDir + RunExamples.GetOutputFilePath(fileName); | |
doc.Save(dataDir); | |
} | |
private static void RemoveWatermarkText(Document doc) | |
{ | |
foreach (HeaderFooter hf in doc.GetChildNodes(NodeType.HeaderFooter, true)) | |
{ | |
foreach (Shape shape in hf.GetChildNodes(NodeType.Shape, true)) | |
{ | |
if (shape.Name.Contains("WaterMark")) | |
{ | |
shape.Remove(); | |
} | |
} | |
} | |
} | |
} |
Přidat vodoznak do stolní buňky
Někdy je třeba vložit vodoznak/obraz do buňky stolu a zobrazit jej mimo stůl, můžete použít IsLayoutInCell majetek. Tato vlastnost dostane nebo nastaví vlajku udávající, zda je tvar zobrazen uvnitř tabulky nebo mimo ni. Všimněte si, že tato vlastnost funguje pouze při optimalizaci dokumentu pro Microsoft Word 2010 pomocí OptimizeFor metoda.
Následující příklad kódu ukazuje, jak používat tuto vlastnost:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(dataDir + @"LayoutInCell.docx"); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
Shape watermark = new Shape(doc, ShapeType.TextPlainText); | |
watermark.RelativeHorizontalPosition = RelativeHorizontalPosition.Page; | |
watermark.RelativeVerticalPosition = RelativeVerticalPosition.Page; | |
watermark.IsLayoutInCell = true; // Display the shape outside of table cell if it will be placed into a cell. | |
watermark.Width = 300; | |
watermark.Height = 70; | |
watermark.HorizontalAlignment = HorizontalAlignment.Center; | |
watermark.VerticalAlignment = VerticalAlignment.Center; | |
watermark.Rotation = -40; | |
watermark.Fill.Color = Color.Gray; | |
watermark.StrokeColor = Color.Gray; | |
watermark.TextPath.Text = "watermarkText"; | |
watermark.TextPath.FontFamily = "Arial"; | |
watermark.Name = string.Format("WaterMark_{0}", Guid.NewGuid()); | |
watermark.WrapType = WrapType.None; | |
Run run = doc.GetChildNodes(NodeType.Run, true)[doc.GetChildNodes(NodeType.Run, true).Count - 1] as Run; | |
builder.MoveTo(run); | |
builder.InsertNode(watermark); | |
doc.CompatibilityOptions.OptimizeFor(MsWordVersion.Word2010); | |
dataDir = dataDir + "Shape_IsLayoutInCell_out.docx"; | |
// Save the document to disk. | |
doc.Save(dataDir); |