Word文档在每一页插入一个图片


#1

是否可以不通过页眉页脚然后在每一页中插入一张图片,
我现在需要在每一页加入一张水印图片来覆盖页面,
但是使用页眉页脚方式在iphone的web预览中不起作用,
不知道有没有其他可以每页插入图片的方式


#2

@wdacat

谢谢你的询问。 请使用以下代码示例在文档的每页上插入水印图像。 希望这对你有所帮助。

public static void InsertWatermarkImageAtEachPage (Document doc, String watermarkImagePath) throws Exception
{
    DocumentBuilder builder = new DocumentBuilder(doc);

    LayoutCollector collector = new LayoutCollector(doc);

    int pageIndex = 1;
    for (Section section : doc.getSections())
    {
        NodeCollection paragraphs = section.getBody().getChildNodes(NodeType.PARAGRAPH, true);
        for(Paragraph para : (Iterable<Paragraph>)paragraphs)
        {
            if (collector.getStartPageIndex(para) == pageIndex)
            {
                builder.moveToParagraph(paragraphs.indexOf(para), 0);
                builder.startBookmark("BM_Page" + pageIndex);
                builder.endBookmark("BM_Page" + pageIndex);
                pageIndex++;
            }
        }
    }

    collector = new LayoutCollector(doc);
    LayoutEnumerator layoutEnumerator = new LayoutEnumerator(doc);

    int PageRelativeY = 50;
    int PageRelativeX = 50;

    for (Bookmark bookmark : doc.getRange().getBookmarks())
    {
        if (bookmark.getName().startsWith("BM_"))
        {
            Paragraph para = (Paragraph)bookmark.getBookmarkStart().getParentNode();

            Shape watermark = new Shape(doc, ShapeType.TEXT_PLAIN_TEXT);

            
            watermark.setTop(PageRelativeY);
            watermark.setLeft(PageRelativeX);

            watermark.getImageData().setImage(watermarkImagePath);
            //Set the width height according to your requirements
            watermark.setWidth(400);
            watermark.setHeight(600);
            watermark.setBehindText(true);

            para.appendChild(watermark);

            watermark.setRelativeHorizontalPosition(RelativeHorizontalPosition.PAGE);
            watermark.setRelativeVerticalPosition(RelativeVerticalPosition.PAGE);

            Boolean isInCell = bookmark.getBookmarkStart().getAncestor(NodeType.CELL) != null;
            if (isInCell)
            {
                Object renderObject = collector.getEntity(bookmark.getBookmarkStart());
                layoutEnumerator.setCurrent(renderObject);

                layoutEnumerator.moveParent(LayoutEntityType.CELL);

                watermark.setTop(PageRelativeY - layoutEnumerator.getRectangle().getY());
                watermark.setLeft(PageRelativeX - layoutEnumerator.getRectangle().getX());
            }
        }
    }
}

#3

谢谢您提供的方案
我在本地测试时是可行的
但是在iphone上预览并不理想,我们还在权衡
感谢您的帮助


#4

word报错.zip (272.3 KB)
在使用您的例子时我遇到了一个问题请您帮忙查看一下是什么错误
压缩包中有示例代码,出错截图和原始文档
谢谢


#5

@wdacat

谢谢你的询问。 我们测试了这个场景,并设法在我们这边重现了同样的问题。 LayoutCollector.GetStartPageIndex方法抛出此异常。 为了更正,我们在问题跟踪系统中将此问题记录为 WORDSNET-17767。 解决此问题后,您将通过此论坛主题通知您。

对由您带来的不便,我们深表歉意。