【问题标题】:How to send a shape to front in Aspose.Words如何在 Aspose.Words 中将形状发送到前面
【发布时间】:2018-05-22 22:03:05
【问题描述】:

我在文档上放置水印,但有时水印会出现在某些图像后面,我无法将其置于前面。我尝试将 ZOrderPosition 和 ZOrder 属性设置为像 99 这样的高值,但它仍然不在其他所有内容之前。

【问题讨论】:

  • 关于 Aspose.Cells,如果您的图像在 Awais 共享的页眉和页脚内,那么您不能将其放在前面。对于其他情况,请分享您的 Excel 文件,以便我们进一步调查此问题。 --- 注意:我在 Aspose 担任开发人员宣传员
  • 原来它实际上是一个图表,而不是带有图像的电子表格,但我仍然无法在那里放置水印。我编辑了这个问题,只针对 aspose.words 问题,我将针对图表问题制作另一个问题。
  • 是的,仅针对 Aspose.Cells 的单独帖子/主题既有用又有帮助。谢谢。

标签: c# aspose aspose.words


【解决方案1】:

出现问题是因为水印形状位于 Word 文档的页眉页脚故事内,而主要内容在正文故事内(请参阅Story class)。如果您使用 Microsoft Word 2016 插入水印,您将观察到相同的行为。文档页眉/页脚的所有内容总是在文档的主要内容之后。

但是,您可以通过在每个页面中手动插入水印来解决此问题。您可以通过将光标移动到文档的每个页面中的第一个运行,然后将这些运行作为水印的锚点来实现此目的。请看以下代码示例:

Document doc = new Document(MyDir + @"input.doc");

Node[] runs = doc.GetChildNodes(NodeType.Run, true).ToArray();
for (int i = 0; i < runs.Length; i++)
{
    Run run = (Run)runs[i];
    int length = run.Text.Length;

    Run currentNode = run;
    for (int x = 1; x < length; x++)
    {
        currentNode = SplitRun(currentNode, 1);
    }
}

DocumentBuilder builder = new DocumentBuilder(doc);
PageSetup ps = builder.PageSetup;

NodeCollection smallRuns = doc.GetChildNodes(NodeType.Run, true);
LayoutCollector collector = new LayoutCollector(doc);

int pageIndex = 1;
foreach (Run run in smallRuns)
{
    if (collector.GetStartPageIndex(run) == pageIndex)
    {
        Shape watermark = new Shape(doc, Aspose.Words.Drawing.ShapeType.TextPlainText);
        watermark.RelativeHorizontalPosition = RelativeHorizontalPosition.Page;
        watermark.RelativeVerticalPosition = RelativeVerticalPosition.Page;

        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;

        builder.MoveTo(run);
        builder.InsertNode(watermark);

        pageIndex++;
    }
}

doc.Save(MyDir + @"output\18.3.doc");
///////////////////////////////////////
private static Run SplitRun(Run run, int position)
{
    Run afterRun = (Run)run.Clone(true);
    afterRun.Text = run.Text.Substring(position);
    run.Text = run.Text.Substring((0), (0) + (position));
    run.ParentNode.InsertAfter(afterRun, run);
    return afterRun;
}

希望,这会有所帮助。我与 Aspose 合作,担任开发人员宣传员。

【讨论】:

  • 谢谢!这解决了我的 Word 文档问题!
猜你喜欢
  • 2014-04-29
  • 1970-01-01
  • 2014-01-12
  • 2013-11-12
  • 1970-01-01
  • 2015-07-10
  • 1970-01-01
  • 2017-03-13
  • 2014-05-25
相关资源
最近更新 更多