Java 如何使用docx4j添加PPT注释

Java 如何使用docx4j添加PPT注释,java,powerpoint,docx4j,Java,Powerpoint,Docx4j,我正在使用库docx4j创建PPT文件。我已经能够创建包含文本和图像的幻灯片,但我无法为它们添加注释 我制作的幻灯片如下所示: MainPresentationPart pp = (MainPresentationPart)presentationParts.get(new PartName("/ppt/presentation.xml")); SlideLayoutPart layoutPart = (SlideLayoutPart)presentationParts.get(new Part

我正在使用库docx4j创建PPT文件。我已经能够创建包含文本和图像的幻灯片,但我无法为它们添加注释

我制作的幻灯片如下所示:

MainPresentationPart pp = (MainPresentationPart)presentationParts.get(new PartName("/ppt/presentation.xml"));
SlideLayoutPart layoutPart = (SlideLayoutPart)presentationParts.get(new PartName("/ppt/slideLayouts/slideLayout1.xml"));
SlidePart slidePart = PresentationMLPackage.createSlidePart(pp, layoutPart, new PartName("/ppt/slides/slide" + ++slideNumber + ".xml"));
因此,我可以向正文中添加文本或图像,但当我尝试访问字段slidePart.notes时,它为空。我已尝试初始化它

slidePart.setPartShortcut(new NotesSlidePart());
但是notes里面的所有东西都是空的,我什么也没做

那么,有没有人有一个如何向PPT文件添加注释的工作示例

非常感谢

这还不够:

slidePart.setPartShortcut(new NotesSlidePart());
您需要通过调用addTargetPart将notes幻灯片部分显式添加到幻灯片部分(以便正确设置关系)

但鉴于pptx格式的工作方式,您还需要做更多的工作。要查看需要哪些部件,请将pptx上载到docx4j webapp。以下是我刚才基于此编写的代码:

    // Now add notes slide.
    // 1. Notes master
    NotesMasterPart nmp = new NotesMasterPart();
    NotesMaster notesmaster = (NotesMaster)XmlUtils.unmarshalString(notesMasterXml, Context.jcPML);
    nmp.setJaxbElement(notesmaster);
    // .. connect it to /ppt/presentation.xml
    Relationship ppRelNmp = pp.addTargetPart(nmp);
    /*
     *  <p:notesMasterIdLst>
            <p:notesMasterId r:id="rId3"/>
        </p:notesMasterIdLst>
     */
    pp.getJaxbElement().setNotesMasterIdLst(createNotesMasterIdListPlusEntry(ppRelNmp.getId()));

    // .. NotesMasterPart typically has a rel to a theme 
    // .. can we get away without it? 
    // Nope .. read this in from a file
    ThemePart themePart = new ThemePart(new PartName("/ppt/theme/theme2.xml"));
        // TODO: read it from a string instead
    themePart.unmarshal(
            FileUtils.openInputStream(new File(System.getProperty("user.dir") + "/theme2.xml"))
        );      
    nmp.addTargetPart(themePart);

    // 2. Notes slide
    NotesSlidePart nsp = new NotesSlidePart();
    Notes notes = (Notes)XmlUtils.unmarshalString(notesXML, Context.jcPML);
    nsp.setJaxbElement(notes);
    // .. connect it to the slide
    slidePart.addTargetPart(nsp);
    // .. it also has a rel to the slide
    nsp.addTargetPart(slidePart);
    // .. and the slide master
    nsp.addTargetPart(nmp);
//现在添加注释幻灯片。
// 1. 笔记大师
NotesMasterPart nmp=新的NotesMasterPart();
NotesMaster NotesMaster=(NotesMaster)XmlUtils.unmarshalString(notesMasterXml,Context.jcPML);
nmp.setJaxbElement(notesmaster);
// .. 将其连接到/ppt/presentation.xml
关系ppRelNmp=pp.addTargetPart(nmp);
/*
*  
*/
pp.getJaxbElement().setNotesMasterIdLst(createNotesMasterIdListPlusEntry(ppRelNmp.getId());
// .. NotesMasterPart通常与主题相关
// .. 没有它我们能逃脱吗?
//没有。。从文件中读入此文件
ThemePartThemePart=newThemePart(新部件名(“/ppt/theme/theme2.xml”);
//TODO:改为从字符串读取它
unmarshal部长(
FileUtils.openInputStream(新文件(System.getProperty(“user.dir”)+“/theme2.xml”))
);      
nmp.添加目标部件(部件);
// 2. 便笺幻灯片
NotesSlidePart nsp=新NotesSlidePart();
Notes=(Notes)XmlUtils.unmarshalString(notesXML,Context.jcPML);
nsp.setJaxbElement(注释);
// .. 将其连接到幻灯片
slidePart.addTargetPart(nsp);
// .. 它还与幻灯片有关联
nsp.addTargetPart(slidePart);
// .. 还有幻灯片母版
nsp.addTargetPart(nmp);

您可以在

找到完整的示例,非常感谢。明天我会试试的!:)它工作得很好。由于需要各种注释,我初始化了NotesSlidePart,如下所示:NotesSlidePart nsp=newNotesSlidePart(“note”+slideNumber+“.xml”);我也试着在没有Notes Master的情况下完成它,它成功了。添加它只是一种很好的做法吗?Guito,你能提供一些你添加了文本和图像的示例吗?我发现很难理解,而且没有好的教程(@ItiTyagi很抱歉,我再也没有任何例子了。