Как отправить форму на передний план в Aspose.Words - PullRequest
0 голосов
/ 21 мая 2018

Я помещаю водяной знак в документ, но иногда водяной знак оказывается за каким-то изображением, и я не могу вывести его вперед.Я попытался установить для свойств ZOrderPosition и ZOrder высокие значения, например 99, но оно все еще не перед всем остальным.

1 Ответ

0 голосов
/ 22 мая 2018

Проблема возникает из-за того, что форма водяного знака находится внутри нижнего колонтитула документа Word, а основное содержимое - внутри основного текста (см. Класс истории ).Если вы вставите водяной знак с помощью 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 в качестве разработчика Evangelist.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...