我已经使用ibex库来创建动态 pdf,但我现在想要的是将视频文件动态嵌入到 pdf 中,但不知道是否可行。如果可能,请建议ibex的方法,如果不可能,请建议另一个开源库。
问问题
75 次
2 回答
1
使用 IBEX 库无法嵌入视频。
请查看Ibex 程序员指南了解支持的功能。
于 2021-12-20T06:34:46.070 回答
0
PDF 文件格式本身支持在 PDF 文件内添加附件。
但不幸的是,基于它的指南, ibex 还没有这样的 API 。
替代解决方案
选项1.-尝试此处指定的iText
iText API ,看起来像
- 在 PDF 文件中添加附件
PdfFileSpec fs = PdfFileSpec.createEmbeddedFileSpec(pdfDoc, …);
pdfDoc.addFileAttachment("specificname", fs);
- 添加链接以打开附件
PdfTargetDictionary target = new PdfTargetDictionary(PdfName.P);
target.setName("specificname");
PdfAction action = PdfAction.createGoToE(PdfExplicitDestination.createFit(1), false, target);
笔记。
Cost
- 在您也免费分发软件的情况下,可以免费使用 iText。一旦您想在封闭源代码的专有环境中使用 iText,您就必须为使用 iText 付费。Disclaimer
- 我与 iText 没有任何联系
选项 2. Apache PDF Box
- 遵循此处的示例
PDF 可以包含通过文件系统或指向远程位置的 URL 对外部文件的引用。也可以将二进制文件嵌入到 PDF 文档中。
PDEmbeddedFilesNameTreeNode efTree = new PDEmbeddedFilesNameTreeNode();
//first create the file specification, which holds the embedded file
PDComplexFileSpecification fs = new PDComplexFileSpecification();
fs.setFile( "Test.txt" );
InputStream is = ...;
PDEmbeddedFile ef = new PDEmbeddedFile(doc, is );
//set some of the attributes of the embedded file
ef.setSubtype( "test/plain" );
ef.setSize( data.length );
ef.setCreationDate( new GregorianCalendar() );
fs.setEmbeddedFile( ef );
//now add the entry to the embedded file tree and set in the document.
Map efMap = new HashMap();
efMap.put( "My first attachment", fs );
efTree.setNames( efMap );
//attachments are stored as part of the "names" dictionary in the document catalog
PDDocumentNameDictionary names = new PDDocumentNameDictionary( doc.getDocumentCatalog() );
names.setEmbeddedFiles( efTree );
doc.getDocumentCatalog().setNames( names );
笔记
PDFBox
在 Apache 许可证 2 下
于 2021-12-20T08:03:34.963 回答