我想创建pptx文件,使用ApachePOI在幻灯片中链接视频。
我有一个Apache示例代码示例
POI-4.1.2\src\scalchpad\testcase\org\apache\poi\hslf\Model\TestMovie Shape。
使用这个例子,我可以创建. ppt文件,但它不是创建. pptx文件。
此外,使用此示例时,媒体控件不可见。
与嵌入式视频盒相反,只需更改几行
视频URI不是真正的URI,只是一个相对的URI。mp4文件名在同一目录中。虽然我还没有测试过,但绝对文件URI也应该可以工作。
我还没有实现帧提取,就像嵌入式示例中提到的那样——所以要么寻找xuggler的存档版本,要么找到另一个库来提取预览图像。
使用Powerpoint 2016/POI 5.0.0-Snapshot进行测试。
import org.apache.poi.openxml4j.opc.PackagePart;
import org.apache.poi.openxml4j.opc.PackageRelationship;
import org.apache.poi.openxml4j.opc.TargetMode;
import org.apache.poi.sl.usermodel.PictureData;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFPictureData;
import org.apache.poi.xslf.usermodel.XSLFPictureShape;
import org.apache.poi.xslf.usermodel.XSLFSlide;
import org.apache.xmlbeans.XmlCursor;
import org.openxmlformats.schemas.drawingml.x2006.main.CTHyperlink;
import org.openxmlformats.schemas.presentationml.x2006.main.*;
import javax.xml.namespace.QName;
import java.awt.*;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import static org.apache.poi.openxml4j.opc.PackageRelationshipTypes.CORE_PROPERTIES_ECMA376_NS;
public class LinkVideoToPptx {
public static void main(String[] args) throws IOException, URISyntaxException {
XMLSlideShow pptx = new XMLSlideShow();
String videoFileName = "file_example_MP4_640_3MG.mp4";
XSLFSlide slide1 = pptx.createSlide();
PackagePart pp = slide1.getPackagePart();
URI mp4uri = new URI("./"+videoFileName);
PackageRelationship prsEmbed1 = pp.addRelationship(mp4uri, TargetMode.EXTERNAL, "http://schemas.microsoft.com/office/2007/relationships/media");
PackageRelationship prsExec1 = pp.addRelationship(mp4uri, TargetMode.EXTERNAL, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/video");
File previewJpg = new File("preview.jpg");
XSLFPictureData snap = pptx.addPicture(previewJpg, PictureData.PictureType.JPEG);
XSLFPictureShape pic1 = slide1.createPicture(snap);
pic1.setAnchor(new Rectangle(100, 100, 500, 400));
CTPicture xpic1 = (CTPicture)pic1.getXmlObject();
CTHyperlink link1 = xpic1.getNvPicPr().getCNvPr().addNewHlinkClick();
link1.setId("");
link1.setAction("ppaction://media");
CTApplicationNonVisualDrawingProps nvPr = xpic1.getNvPicPr().getNvPr();
nvPr.addNewVideoFile().setLink(prsExec1.getId());
CTExtension ext = nvPr.addNewExtLst().addNewExt();
ext.setUri("{DAA4B4D4-6D71-4841-9C94-3DE7FCFB9230}");
String p14Ns = "http://schemas.microsoft.com/office/powerpoint/2010/main";
XmlCursor cur = ext.newCursor();
cur.toEndToken();
cur.beginElement(new QName(p14Ns, "media", "p14"));
cur.insertNamespace("p14", p14Ns);
cur.insertAttributeWithValue(new QName(CORE_PROPERTIES_ECMA376_NS, "link"), prsEmbed1.getId());
cur.dispose();
CTSlide xslide = slide1.getXmlObject();
CTTimeNodeList ctnl;
if (!xslide.isSetTiming()) {
CTTLCommonTimeNodeData ctn = xslide.addNewTiming().addNewTnLst().addNewPar().addNewCTn();
ctn.setDur(STTLTimeIndefinite.INDEFINITE);
ctn.setRestart(STTLTimeNodeRestartType.NEVER);
ctn.setNodeType(STTLTimeNodeType.TM_ROOT);
ctnl = ctn.addNewChildTnLst();
} else {
ctnl = xslide.getTiming().getTnLst().getParArray(0).getCTn().getChildTnLst();
}
CTTLCommonMediaNodeData cmedia = ctnl.addNewVideo().addNewCMediaNode();
cmedia.setVol(80000);
CTTLCommonTimeNodeData ctn = cmedia.addNewCTn();
ctn.setFill(STTLTimeNodeFillType.HOLD);
ctn.setDisplay(false);
ctn.addNewStCondLst().addNewCond().setDelay(STTLTimeIndefinite.INDEFINITE);
cmedia.addNewTgtEl().addNewSpTgt().setSpid(""+pic1.getShapeId());
try (FileOutputStream fos = new FileOutputStream("mp4test-poi.pptx")) {
pptx.write(fos);
}
}
}
我知道如何使用apache poi从ppt文件中提取文本,如下所示 但它提取了所有页脚,幻灯片编号,我不想要 那么如何提取除页脚和幻灯片编号以外的文本 预先感谢
我想使用Apache POIJava库将pptx幻灯片拆分为几个幻灯片,每个幻灯片只包含一张幻灯片。 创建一个新的XMLSlideSheet并添加幻灯片,如在几个地方(例如 https://www.tutorialspoint.com/apache_poi_ppt/apache_poi_ppt_merging.htm)所述,对我来说不起作用,因为某些布局没有正确导入:字体被更改,文本的位置被更改等
问题内容: 到目前为止,我只有一个有效的代码可以从ppt幻灯片笔记中检索文本 但是,如何从pptx幻灯片笔记中检索文本? 问题答案: 经过不断的反复试验,找到了解决方案。
到目前为止,我只有一个从ppt幻灯片笔记中检索文本的工作代码 但如何从pptx幻灯片笔记中检索文本呢?
本文向大家介绍如何使用CSS和JavaScript创建报价幻灯片?,包括了如何使用CSS和JavaScript创建报价幻灯片?的使用技巧和注意事项,需要的朋友参考一下 要使用CSS和JavaScript创建报价幻灯片,代码如下- 示例 输出结果 上面的代码将产生以下输出-
我试图建立一个相当粗糙的工具,将ppt/pptx文件转换为超文本标记语言格式。 我发现,不幸的是,apache poi没有为处理Power point文件提供统一的编程模型,必须编写代码来解析每种格式。 我觉得pptx文件支持比ppt支持有限得多。我面临的一个问题是获取有关pptx幻灯片背景(颜色、图案、背景图像)的信息。 我发现XSLFbackground(pptx api)类比其相应的背景类(