PDF 文件集 (PDF Portfolio)
PDF 文件集 (PDF Portfolio) 是一种特殊的 PDF 文档格式,它可以将多种不同格式的文件组合在一起。Portfolio 文件本身是一个 PDF 文档,而各种类型的文件(例如 Word 文档、Excel 表格、图片、视频等)都可以作为独立的组件嵌入到这个 PDF 容器中。
系统需求
平台: Windows, Linux, Mac
开发语言: C, C++, Java, C#, Python, Objective-C, Node.js
授权许可: 需要包含 Standard
模块的授权码
SDK 版本:
- 福昕 PDF SDK (C, C++, Java, C#, Objective-C): 7.6 或更高版本
- 福昕 PDF SDK (Python): 8.3 或更高版本
- 福昕 PDF SDK (Node.js): 10.0 或更高版本
创建一个新的空白的 PDF Portfolio 文档
c++
#include "include/common/fs_common.h"
#include "include/pdf/fs_portfolio.h"
#include "include/pdf/fs_pdfdoc.h"
using namespace foxit;
using namespace foxit::common;
using namespace pdf;
using namespace portfolio;
// Make sure that SDK has already been initialized successfully.
Portfolio new_portfolio = Portfolio::CreatePortfolio();
// Set properties, add file/folder node to the new portfolio.
...
// Get portfolio PDF document object.
PDFDoc portfolio_pdf_doc = new_portfolio.GetPortfolioPDFDoc();
C
#include "include/fs_basictypes_c.h"
#include "include/fs_common_c.h"
#include "include/fs_portfolio_c.h"
// Make sure that SDK has already been initialized successfully.
FS_PORTFOLIO_HANDLE new_portfolio = NULL;
FSDK_Portfolio_CreatePortfolio(&new_portfolio);
// Set properties, add file/folder node to the new portfolio.
...
// Get portfolio PDF document object.
FS_PORTFOLIONODE_HANDLE root_node = NULL;
FSDK_Portfolio_GetRootNode(new_portfolio, &root_node);
...
// Release handles when no need to use them any more.
if (root_node) {
FSDK_PortfolioNode_Release(root_node);
root_node = NULL;
}
if (new_portfolio) {
FSDK_Portfolio_Release(new_portfolio);
new_portfolio = NULL;
}
java
import com.foxit.sdk.common.Library;
import com.foxit.sdk.pdf.Portfolio;
import com.foxit.sdk.common.Constants;
// Make sure that SDK has already been initialized successfully.
Portfolio new_portfolio = Portfolio.createPortfolio();
// Set properties, add file/folder node to the new portfolio.
...
// Get portfolio PDF document object.
PDFDoc portfolio_pdf_doc = new_portfolio.getPortfolioPDFDoc();
py
import sys
import site
if sys.version_info.major == 2:
_PYTHON2_ = True
else:
_PYTHON2_ = False
if _PYTHON2_:
# replace with the python2 lib path
site.addsitedir(‘../../../’)
from FoxitPDFSDKPython2 import *
else:
from FoxitPDFSDKPython3 import *
...
# Make sure that SDK has already been initialized successfully.
new_portfolio = Portfolio.CreatePortfolio()
# Set properties, add file/folder node to the new portfolio.
...
# Get portfolio PDF document object.
portfolio_pdf_doc = new_portfolio.GetPortfolioPDFDoc()
objc
#include "FSPDFObjC.h"
// Make sure that SDK has already been initialized successfully.
FSPortfolio* new_portfolio = [FSPortfolio createPortfolio];
// Set properties, add file/folder node to the new portfolio.
...
// Get portfolio PDF document object.
FSPDFDoc*portfolio_pdf_doc = [new_portfolio getPortfolioPDFDoc];
js
const FSDK = require("@foxitsoftware/foxit-pdf-sdk-node");
...
// Make sure that SDK has already been initialized successfully.
let new_portfolio = FSDK.Portfolio.CreatePortfolio();
// Set properties, add file/folder node to the new portfolio.
...
// Get portfolio PDF document object.
let portfolio_pdf_doc = new_portfolio.GetPortfolioPDFDoc();
csharp
using foxit;
using foxit.common;
using foxit.common.fxcrt;
using foxit.pdf;
// Make sure that SDK has already been initialized successfully.
using (Portfolio new_portfolio = Portfolio.CreatePortfolio())
{
// Set properties, add file/folder node to the new portfolio.
...
// Get portfolio PDF document object.
using (PDFDoc portfolio_pdf_doc = new_portfolio.GetPortfolioPDFDoc())
{
...
}
}
从一个 PDF portfolio 文档创建一个 Portfolio 对象
c++
#include "include/common/fs_common.h"
#include "include/pdf/fs_portfolio.h"
#include "include/pdf/fs_pdfdoc.h"
using namespace foxit;
using namespace foxit::common;
using namespace pdf;
using namespace portfolio;
// Make sure that SDK has already been initialized successfully.
PDFDoc portfolio_pdf_doc("portfolio.pdf");
ErrorCode error_code = portfolio_pdf_doc.Load();
if (foxit::e_ErrSuccess == error_code) {
if (portfolio_pdf_doc.IsPortfolio()) {
Portfolio existed_portfolio = Portfolio::CreatePortfolio(portfolio_pdf_doc);
}
}
C
#include "include/fs_basictypes_c.h"
#include "include/fs_common_c.h"
#include "include/fs_pdfdoc_c.h"
#include "include/fs_portfolio_c.h"
// Make sure that SDK has already been initialized successfully.
FS_PDFDOC_HANDLE portfolio_pdf_doc = NULL;
FSDK_PDFDoc_Create0(portfolio_file_path, &portfolio_pdf_doc);
FSErrorCode error_code = FSDK_PDFDoc_Load(portfolio_pdf_doc, NULL);
if (e_FSErrSuccess == error_code) {
FS_BOOL is_portfolio = FALSE;
FSDK_PDFDoc_IsPortfolio(pdf_doc, &is_portfolio);
if (is_portfolio) {
FS_PORTFOLIO_HANDLE existed_portfolio = NULL;
FSDK_Portfolio_CreatePortfolio0(pdf_doc, &existed_portfolio);
...
// Release handles when no need to use them any more.
if (existed_portfolio) {
FSDK_Portfolio_Release(existed_portfolio);
existed_portfolio = NULL;
}
}
}
...
// Release handles when no need to use them any more.
if (portfolio_pdf_doc) {
FSDK_PDFDoc_Release(portfolio_pdf_doc);
portfolio_pdf_doc = NULL;
}
java
import com.foxit.sdk.common.Library;
import com.foxit.sdk.pdf.PDFDoc;
import com.foxit.sdk.pdf.Portfolio;
import com.foxit.sdk.common.Constants;
// Make sure that SDK has already been initialized successfully.
PDFDoc pdf_doc = new PDFDoc("portfolio.pdf");
int error_code = portfolio_pdf_doc.load(null);
if (Constants.e_ErrSuccess == error_code) {
if (portfolio_pdf_doc.isPortfolio()) {
Portfolio existed_portfolio = Portfolio.createPortfolio(portfolio_pdf_doc);
}
}
py
import sys
import site
if sys.version_info.major == 2:
_PYTHON2_ = True
else:
_PYTHON2_ = False
if _PYTHON2_:
# replace with the python2 lib path
site.addsitedir(‘../../../’)
from FoxitPDFSDKPython2 import *
else:
from FoxitPDFSDKPython3 import *
...
# Make sure that SDK has already been initialized successfully.
portfolio_pdf_doc = PDFDoc("portfolio.pdf")
error_code = portfolio_pdf_doc.Load("")
if e_ErrSuccess == error_code:
if portfolio_pdf_doc.IsPortfolio():
existed_portfolio = Portfolio.CreatePortfolio(portfolio_pdf_doc)
objc
#include "FSPDFObjC.h"
// Make sure that SDK has already been initialized successfully.
FSPDFDoc* portfolio_pdf_doc = [[FSPDFDoc alloc] initWithPath:@"portfolio.pdf"];
FSErrorCode error_code = [portfolio_pdf_docload:nil];
if (FSErrSuccess == error_code) {
if (YES == [portfolio_pdf_doc isPortfolio]) {
FSPortfolio* existed_portfolio = [FSPortfolio createPortfolioWithPDFDoc:portfolio_pdf_doc];
}
}
js
const FSDK = require("@foxitsoftware/foxit-pdf-sdk-node");
...
// Make sure that SDK has already been initialized successfully.
let pdf_doc = new FSDK.PDFDoc(portfolio_file_path);
let error_code = pdf_doc.Load("");
if (error_code != FSDK.e_ErrSuccess) {
return;
}
if (false == pdf_doc.IsPortfolio()) {
let exist_portfolio = FSDK.Portfolio.CreatePortfolio(pdf_doc);
}
csharp
using foxit;
using foxit.common;
using foxit.common.fxcrt;
using foxit.pdf;
// Make sure that SDK has already been initialized successfully.
using (PDFDoc portfolio_pdf_doc = new PDFDoc("portfolio.pdf"))
{
ErrorCode error_code = portfolio_pdf_doc.Load(null);
if (ErrorCode.e_ErrSuccess == error_code)
{
if (portfolio_pdf_doc.IsPortfolio())
{
using (Portfolio existed_portfolio = Portfolio.CreatePortfolio(portfolio_pdf_doc))
{
...
}
}
}
}
获取 portfolio nodes
c++
#include "include/common/fs_common.h"
#include "include/pdf/fs_portfolio.h"
#include "include/pdf/fs_pdfdoc.h"
#include "include/pdf/fs_filespec.h"
using namespace foxit;
using namespace foxit::common;
using namespace pdf;
using namespace portfolio;
// Make sure that SDK has already been initialized successfully.
// Portfolio object has been created, assume it is named "portfolio".
...
PortfolioNode root_node = portfolio.GetRootNode();
PortfolioFolderNode root_folder(root_node);
PortfolioNodeArray sub_nodes = root_folder.GetSortedSubNodes();
for (size_t index = 0; index < sub_nodes.GetSize(); index++) {
PortfolioNode node = sub_nodes[index];
switch (node.GetNodeType()) {
case PortfolioNode::e_TypeFolder: {
PortfolioFolderNode folder_node(node);
// Use PortfolioFolderNode's getting method to get some properties.
...
PortfolioNodeArray sub_nodes_2 = folder_node.GetSortedSubNodes();
...
break;
}
case PortfolioNode::e_TypeFile: {
PortfolioFileNode file_node(node);
// Get file specification object from this file node, and then get/set information from/to this file specification object.
FileSpec file_spec = file_node.GetFileSpec();
...
break;
}
}
}
C
#include "include/fs_basictypes_c.h"
#include "include/fs_common_c.h"
#include "include/fs_filespec_c.h"
#include "include/fs_pdfdoc_c.h"
#include "include/fs_portfolio_c.h"
// Make sure that SDK has already been initialized successfully.
// Portfolio object has been created, assume it is named "portfolio".
FS_PORTFOLIONODE_HANDLE root_node = NULL;
FSDK_Portfolio_GetRootNode(portfolio, &root_node);
FS_PORTFOLIOFOLDERNODE_HANDLE root_folder = NULL;
FSDK_PortfolioFolderNode_Create(root_node, &root_folder);
FS_PORTFOLIONODE_HANDLE* sub_node_array = NULL;
FS_UINT32 array_length = 0;
FSDK_PortfolioFolderNode_GetSortedSubNodes(root_folder, sub_node_array, array_length);
sub_node_array = malloc( sizeof(FS_PORTFOLIONODE_HANDLE) * array_length];
FSDK_PortfolioFolderNode_GetSortedSubNodes(root_folder, sub_node_array, array_length);
for (FS_UINT32index = 0; index < array_length; index++) {
FS_PORTFOLIONODE_HANDLE node = sub_node_array[index];
FSPortfolioNodeType node_type = e_FSPortfolioNodeTypeTypeUnknown;
FSDK_PortfolioNode_GetNodeType(node, &node_type);
switch (node_type) {
case e_FSTypeFolder: {
FS_PORTFOLIOFOLDERNODE_HANDLE folder_node = NULL;
FSDK_PortfolioFolderNode_Create(node, &folder_node);
// Use PortfolioFolderNode's getting method to get some properties.
...
FS_PORTFOLIONODE_HANDLE* sub_node_array_2 = NULL;
FS_UINT32 array_length_2 = 0;
FSDK_PortfolioFolderNode_GetSortedSubNodes(root_folder, sub_node_array_2, &array_length_2);
sub_node_array_2 = malloc(siezof(FS_PORTFOLIONODE_HANDLE) * array_length_2];
FSDK_PortfolioFolderNode_GetSortedSubNodes(root_folder, sub_node_array_2, &array_length_2);
...
// Release handle
for (FS_UINT32 i = 0; i < array_length_2; i++) {
FSDK_PortfolioNode_Release(sub_node_array_2[i]);
}
free(sub_node_array_2);
if (folder_node) {
FSDK_PortfolioFolderNode_Release(folder_node);
folder_node = NULL;
}
break;
}
case e_FSTypeFile: {
FS_PORTFOLIOFILENODE_HANDLE file_node = NULL;
FSDK_PortfolioFileNode_Create(node, &file_node);
// Get file specification from this file node, and then get/set information from/to this file specification object.
FS_FILESPEC_HANDLE file_spec = NULL;
FSDK_PortfolioFileNode_GetFileSpec(file_node, &file_spec);
...
// Release handle.
if (file_spec) {
FSDK_FileSpec_Release(file_spec);
file_spec = NULL;
}
if (file_node) {
FSDK_PortfolioFileNode_Release(file_node);
file_node = NULL;
}
break;
}
}
}
...
// Release handles when no need to use them any more.
for (FS_UINT32 i = 0; i < array_length; i++) {
FSDK_PortfolioNode_Release(sub_node_array[i]);
}
free(sub_node_array);
if (root_folder) {
FSDK_PortfolioFolderNode_Release(root_folder);
root_folder = NULL;
}
if (root_node) {
FSDK_PortfolioNode_Release(root_node);
root_node = NULL;
}
java
import com.foxit.sdk.common.Library;
import com.foxit.sdk.pdf.PDFDoc;
import com.foxit.sdk.pdf.Portfolio;
import com.foxit.sdk.pdf.SchemaField;
import com.foxit.sdk.pdf.SchemaFieldArray;
import com.foxit.sdk.pdf.PortfolioNode;
import com.foxit.sdk.pdf.PortfolioNodeArray;
import com.foxit.sdk.pdf.PortfolioFileNode;
import com.foxit.sdk.pdf.PortfolioFolderNode;
import com.foxit.sdk.pdf.FileSpec;
import com.foxit.sdk.common.Constants;
// Make sure that SDK has already been initialized successfully.
// Portfolio object has been created, assuming it is named "portfolio".
...
PortfolioNode root_node = portfolio.getRootNode();
PortfolioFolderNode root_folder = new PortfolioFolderNode(root_node);
PortfolioNodeArray sub_nodes = root_folder.getSortedSubNodes();
for (int index = 0; index < sub_nodes.getSize(); index++) {
PortfolioNode node = sub_nodes.getAt(index);
switch(node.getNodeType()) {
case PortfolioNode::e_TypeFolder: {
PortfolioFolderNode folder_node = new PortfolioFolderNode(node);
// Use PortfolioFolderNode's methods to get some properties.
...
PortfolioNodeArray sub_nodes_2 = folder_node.getSortedSubNodes();
...
break;
}
case PortfolioNode::e_TypeFile: {
PortfolioFileNode file_node = new PortfolioFileNode(node);
// Get file specification object from this file node, and then get/set information from/to this file specification object.
FileSpec file_spec = file_node.getFileSpec();
...
break;
}
}
}
py
import sys
import site
if sys.version_info.major == 2:
_PYTHON2_ = True
else:
_PYTHON2_ = False
if _PYTHON2_:
# replace with the python2 lib path
site.addsitedir(‘../../../’)
from FoxitPDFSDKPython2 import *
else:
from FoxitPDFSDKPython3 import *
…
# Make sure that SDK has already been initialized successfully.
# Portfolio object has been created, assume it is named "portfolio".
...
root_node = portfolio.GetRootNode()
root_folder = PortfolioFolderNode (root_node)
sub_nodes = root_folder.GetSortedSubNodes()
sub_size = sub_nodes.GetSize()
for index in range(0, sub_size):
node = sub_nodes[index]
note_type = node.GetNodeType()
if note_type == PortfolioNode.e_TypeFolder:
folder_node = PortfolioFolderNode(node)
# Use PortfolioFolderNode's getting method to get some properties.
...
sub_nodes_2 = folder_node.GetSortedSubNodes()
...
elif note_type == PortfolioNode.e_TypeFile:
file_node = PortfolioFileNode (node)
# Get file specification object from this file node, and then get/set information from/to this file specification object.
file_spec = file_node.GetFileSpec()
...
objc
#include "FSPDFObjC.h"
// Make sure that SDK has already been initialized successfully.
FSPortfolioNode* root_node = [portfolio getRootNode];
FSPortfolioFolderNode* root_folder = [[FSPortfolioFolderNode alloc] initWithOther:root_node];
FSPortfolioNodeArray* sub_nodes = [root_folder getSortedSubNodes];
for (unsigned long index = 0; index < [sub_nodes getSize]; index++) {
FSPortfolioNode* node = [sub_nodes getAt:index];
switch([node getNodeType]) {
case FSPortfolioNodeTypeFolder: {
FSPortfolioFolderNode* folder_node = [[FSPortfolioFolderNode alloc] initWithOther:node];
// Use PortfolioFolderNode's getting method to get some properties.
...
FSPortfolioNodeArray* sub_nodes_2 = [folder_node getSortedSubNodes];
break;
}
case FSPortfolioNodeTypeFile: {
FSPortfolioFileNode* file_node = [[FSPortfolioFileNode alloc] initWithOther:node];
// Get file specification object from this file node, and then get/set information from/to this file specification object.
FSFileSpec* file_spec = [file_node getFileSpec];
break;
}
}
}
js
const FSDK = require("@foxitsoftware/foxit-pdf-sdk-node");
…
// Make sure that SDK has already been initialized successfully.
// Portfolio object has been created, assume it is named "portfolio".
...
let root_node = exist_portfolio.GetRootNode();
let root_folder = new FSDK.PortfolioFolderNode(root_node);
let sub_nodes = root_folder.GetSortedSubNodes();
for (let index = 0; index < sub_nodes.GetSize(); index++) {
let node = sub_nodes.GetAt(index);
let node_type = new FSDK.PortfolioNode(node).GetNodeType();
switch (node_type) {
case FSDK.PortfolioNode.e_TypeFolder:
let folder_node = new FSDK.PortfolioFolderNode(node);
break;
case FSDK.PortfolioNode.e_TypeFile:
let file_node = new FSDK.PortfolioFileNode(node);
let file_spec = file_node.GetFileSpec();
break;
default:
break;
}
}
csharp
using foxit;
using foxit.common;
using foxit.common.fxcrt;
using foxit.pdf;
// Make sure that SDK has already been initialized successfully.
// Portfolio object has been created, assume it is named "portfolio".
...
using (PortfolioNode root_node = portfolio.GetRootNode())
{
using (PortfolioFolderNode root_folder = new PortfolioFolderNode(root_node))
{
using (PortfolioNodeArray sub_nodes = root_folder.GetSortedSubNodes())
{
for (uintindex = 0; index < sub_nodes.GetSize(); index++)
{
using (PortfolioNode node = sub_nodes.GetAt(index))
{
switch (node.GetNodeType())
{
case PortfolioNode::e_TypeFolder:
{
using (PortfolioFolderNode folder_node = new PortfolioFolderNode(node))
{
// Use PortfolioFolderNode's getting method to get some properties.
...
PortfolioNodeArray sub_nodes_2 = folder_node.GetSortedSubNodes();
...
break;
}
}
case PortfolioNode::e_TypeFile:
{
using (PortfolioFileNode file_node = new PortfolioFileNode(node))
{
// Get file specification object from this file node, and then get/set information from/to this file specification object.
using (FileSpec file_spec = file_node.GetFileSpec())
{
...
break;
}
}
}
}
}
}
}
}
}
添加 file node 或者 folder node
c++
#include "include/common/fs_common.h"
#include "include/pdf/fs_portfolio.h"
#include "include/pdf/fs_pdfdoc.h"
#include "include/pdf/fs_filespec.h"
using namespace foxit;
using namespace foxit::common;
using namespace pdf;
using namespace portfolio;
// Make sure that SDK has already been initialized successfully.
// Portfolio object has been created, and the root folder node has been retrieved, assume it is named "root_folder".
...
// Add file from path.
wchar_t* path_to_a_file = L"directory/Sample.txt";
PortfolioFileNode new_file_node_1 = root_folder.AddFile(path_to_a_file);
// User can update properties of file specification for new_file_node_1 if necessary.
...
// Add file from MyStreamCallback which is inherited from StreamCallback and implemented by user.
MyStreamCallback* my_stream_callback = new MyStreamCallback();
PortfolioFileNode new_file_node_2 = root_folder.AddFile(my_stream_callback, L"file_name");
// Please get file specification of new_file_node_2 and update properties of the file specification by its setting methods.
...
// Add a loaded PDF file.
// Open and load a PDF file, assume it is named "test_pdf_doc".
...
PortfolioFileNode new_file_node_3 = root_folder.AddPDFDoc(test_pdf_doc, L"pdf_file_name");
// User can update properties of file specification for new_file_node_3 if necessary.
...
// Add a sub folder in root_folder.
PortfolioFolderNode new_sub_foldernode = root_folder.AddSubFolder(L"Sub Folder-1");
// User can add file or folder node to new_sub_foldernode.
...
C
#include "include/fs_basictypes_c.h"
#include "include/fs_common_c.h"
#include "include/fs_pdfdoc_c.h"
#include "include/fx_stream_c.h"
#include "include/fs_portfolio_c.h"
// Make sure that SDK has already been initialized successfully.
// Add file from path.
const wchar_t* path_to_a_file = L"directory/Sample.txt";
FS_PORTFOLIOFILENODE_HANDLE new_file_node_1 = NULL;
FSDK_PortfolioFolderNode_AddFile(root_folder, path_to_a_file, &new_file_node_1);
// User can update properties of file specification for new_file_node_1 if necessary.
...
// Add file from MyStreamCallback which is inherited from FSStreamCallback and implemented by user.
FILE* filestream = NULL;
callback_filestream_word = (FSStreamCallback*)malloc(sizeof(FSStreamCallback));
_wfopen_s(&filestream, saved_word_file_path_stream, L"wb");
my_stream_callback->Flush = gFlushFileStream;
my_stream_callback->GetPosition = gGetPositionFileStream;
my_stream_callback->GetSize = gGetSizeFileStream;
my_stream_callback->IsEOF = gIsEOFFileStream;
my_stream_callback->WriteBlock = gWriteBlockFileStream;
my_stream_callback->ReadBlock = gReadBlockFileStream;
my_stream_callback->ReadBlock0 = gReadBlock0FileStream;
my_stream_callback->Release = gReleaseFileStream;
my_stream_callback->Retain = gRetainFileStream;
my_stream_callback->user_data = callback_filestream_word;
FS_PORTFOLIOFILENODE_HANDLE new_file_node_2 = NULL;
FSDK_PortfolioFolderNode_AddFile0(root_folder, my_stream_callback, L"file_name", &new_file_node_2);
// Please get file specification of new_file_node_2 and update properties of the file specification by its setting methods.
...
// Add a loaded PDF file.
// Open and load a PDF file, assume it is named "test_pdf_doc".
...
FS_PORTFOLIOFILENODE_HANDLE new_file_node_3 = NULL;
FSDK_PortfolioFolderNode_AddPDFDoc(root_folder, test_pdf_doc, L"pdf_file_name", &new_file_node_3);
// User can update properties of file specification for new_file_node_3 if necessary.
...
// Add a sub folder in root_folder.
FS_PORTFOLIOFOLDERNODE_HANDLE new_sub_foldernode = NULL;
FSDK_PortfolioFolderNode_AddSubFolder(root_folder, L"Sub Folder-1", &new_sub_foldernode);
// User can add file or folder node to new_sub_foldernode.
...
// Release handles when no need to use them any more.
if (new_sub_foldernode) {
FSDK_PortfolioFolderNode_Release(new_sub_foldernode);
new_sub_foldernode = NULL;
}
if (new_sub_filenode_3) {
FSDK_PortfolioFileNode_Release(new_sub_filenode_3);
new_sub_filenode_3 = NULL;
}
if (new_sub_filenode_2) {
FSDK_PortfolioFileNode_Release(new_sub_filenode_2);
new_sub_filenode_2 = NULL;
}
if (new_sub_filenode_1) {
FSDK_PortfolioFileNode_Release(new_sub_filenode_1);
new_sub_filenode_1 = NULL;
}
java
import com.foxit.sdk.common.Library;
import com.foxit.sdk.pdf.PDFDoc;
import com.foxit.sdk.pdf.Portfolio;
import com.foxit.sdk.pdf.SchemaField;
import com.foxit.sdk.pdf.SchemaFieldArray;
import com.foxit.sdk.pdf.PortfolioNode;
import com.foxit.sdk.pdf.PortfolioNodeArray;
import com.foxit.sdk.pdf.PortfolioFileNode;
import com.foxit.sdk.pdf.PortfolioFolderNode;
import com.foxit.sdk.pdf.FileSpec;
import com.foxit.sdk.common.Constants;
// Make sure that SDK has already been initialized successfully.
// Add file from path.
String path_to_a_file = "directory/Sample.txt";
PortfolioFileNode new_file_node_1 = root_folder.addFile(path_to_a_file);
// User can update properties of file specification for new_file_node_1 if necessary.
...
// Add file from MyStreamCallback which is inherited from StreamCallback and implemented by user.
MyStreamCallback my_stream_callback = new MyStreamCallback();
PortfolioFileNode new_file_node_2 = root_folder.addFile(my_stream_callback, "file_name");
// Please get file specification of new_file_node_2 and update properties of the file specification by its setting methods.
...
// Add a loaded PDF file.
// Open and load a PDF file, assume it is named "test_pdf_doc".
...
PortfolioFileNode new_file_node_3 = root_folder.addPDFDoc(test_pdf_doc, "pdf_file_name");
// User can update properties of file specification for new_file_node_3 if necessary.
...
// Add a sub folder in root_folder.
PortfolioFolderNode new_sub_foldernode = root_folder.addSubFolder("Sub Folder-1");
// User can add file or folder node to new_sub_foldernode.
...
py
import sys
import site
if sys.version_info.major == 2:
_PYTHON2_ = True
else:
_PYTHON2_ = False
if _PYTHON2_:
# replace with the python2 lib path
site.addsitedir(‘../../../’)
from FoxitPDFSDKPython2 import *
else:
from FoxitPDFSDKPython3 import *
...
# Make sure that SDK has already been initialized successfully.
# Portfolio object has been created, and the root folder node has been retrieved, assume it is named "root_folder".
...
# Add file from path.
path_to_a_file = "directory/Sample.txt"
new_file_node_1 = root_folder.AddFile(path_to_a_file)
# User can update properties of file specification for new_file_node_1 if necessary.
...
# Add file from MyStreamCallback which is inherited from StreamCallback and implemented by user.
my_stream_callback = MyStreamCallback()
new_file_node_2 = root_folder.AddFile(my_stream_callback, "file_name")
# Please get file specification of new_file_node_2 and update properties of the file specification by its setting methods.
...
# Add a loaded PDF file.
# Open and load a PDF file, assume it is named "test_pdf_doc".
...
new_file_node_3 = root_folder.AddPDFDoc(test_pdf_doc, "pdf_file_name")
# User can update properties of file specification for new_file_node_3 if necessary.
...
# Add a sub folder in root_folder.
new_sub_foldernode = root_folder.AddSubFolder("Sub Folder-1")
# User can add file or folder node to new_sub_foldernode.
...
objc
#include "FSPDFObjC.h"
// Make sure that SDK has already been initialized successfully.
// Add file from path.
NSString* path_to_a_file = @"directory/Sample.txt";
FSPortfolioFileNode* new_file_node_1 = [root_folder addFile:path_to_a_file];
// User can update properties of file specification for new_file_node_1 if necessary.
...
// Add file from MyStreamCallback which is inherited from FSFileStreamCallback and implemented by user.
MyStreamCallback* my_stream_callback = [MyStreamCallback new];
FSPortfolioFileNode* new_file_node_2 = [root_folder addFileWithStreamCallback:my_stream_callback file_name:@"file_name"];
// Please get file specification of new_file_node_2 and update properties of the file specification by its setting methods.
...
// Add a loaded PDF file.
// Open and load a PDF file, assume it is named "test_pdf_doc".
...
FSPortfolioFileNode* new_file_node_3 = [root_folder addPDFDoc:test_pdf_doc file_name:@"pdf_file_name"];
// User can update properties of file specification for new_file_node_3 if necessary.
...
// Add a sub folder in root_folder.
FSPortfolioFolderNode* new_sub_foldernode = [root_folder addSubFolder:@"Sub Folder-1"];
// User can add file or folder node to new_sub_foldernode.
...
js
const FSDK = require("@foxitsoftware/foxit-pdf-sdk-node");
...
// Make sure that SDK has already been initialized successfully.
// Portfolio object has been created, and the root folder node has been retrieved, assume it is named "root_folder".
...
// Add a non-PDF file to root folder node.
let input_file_path = input_path + "FoxitLogo.jpg";
const FSDK = require("@foxitsoftware/foxit-pdf-sdk-node");
let new_sub_filenode = root_folder.AddFile(input_file_path);
// User can update properties of file specification for new_file_node_1 if necessary.
...
// Add file from MyStreamCallback which is inherited from StreamCallback and implemented by user.
let custom_streamcallback = new FileStream();
let stream_callback= new FSDK.StreamCallback(custom_streamcallback);
let new_file_node_2 = root_folder.AddFile(stream_callback, "file_name");
// Please get file specification of new_file_node_2 and update properties of the file specification by its setting methods.
...
// Add a loaded PDF file.
// Open and load a PDF file, assume it is named "test_pdf_doc".
...
let new_filenode_3 = new_sub_foldernode.AddPDFDoc(test_pdf_doc, "pdf_file_name");
// User can update properties of file specification for new_file_node_3 if necessary.
...
// Add a sub folder in root_folder.
let new_sub_foldernode = root_folder.AddSubFolder("Sub Folder-1");
// User can add file or folder node to new_sub_foldernode.
...
csharp
using foxit;
using foxit.common;
using foxit.common.fxcrt;
using foxit.pdf;
// Make sure that SDK has already been initialized successfully.
// Portfolio object has been created, and the root folder node has been retrieved, assume it is named "root_folder".
...
// Add file from path.
string path_to_a_file = "directory/Sample.txt";
using (PortfolioFileNode new_file_node_1 = root_folder.AddFile(path_to_a_file))
{
// User can update properties of file specification for new_file_node_1 if necessary.
...
}
// Add file from MyStreamCallback which is inherited from StreamCallback and implemented by user.
MyStreamCallback my_stream_callback = new MyStreamCallback();
using (PortfolioFileNode new_file_node_2 = root_folder.AddFile(my_stream_callback, "file_name"))
{
// Please get file specification of new_file_node_2 and update properties of the file specification by its setting methods.
...
}
// Add a loaded PDF file.
// Open and load a PDF file, assume it is named "test_pdf_doc".
...
using (PortfolioFileNode new_file_node_3 = root_folder.AddPDFDoc(test_pdf_doc, "pdf_file_name"))
{
// User can update properties of file specification for new_file_node_3 if necessary.
...
}
// Add a sub folder in root_folder.
using (PortfolioFolderNode new_sub_foldernode = root_folder.AddSubFolder("Sub Folder-1") {
// User can add file or folder node to new_sub_foldernode.
...
}
移除 node
c++
#include "include/common/fs_common.h"
#include "include/pdf/fs_portfolio.h"
#include "include/pdf/fs_pdfdoc.h"
using namespace foxit;
using namespace foxit::common;
using namespace pdf;
using namespace portfolio;
// Make sure that SDK has already been initialized successfully.
// Remove a child folder node from its parent folder node.
parent_folder_node.RemoveSubNode(child_folder_node);
// Remove a child file node from its parent folder node.
parent_folder_node.RemoveSubNode(child_file_node);
C
#include "include/fs_basictypes_c.h"
#include "include/fs_common_c.h"
#include "include/fs_portfolio_c.h"
// Make sure that SDK has already been initialized successfully.
// Remove a child folder node from its parent folder node.
FSDK_PortfolioFolderNode_RemoveSubNode(parent_folder_node, child_folder_node);
// Remove a child file node from its parent folder node.
FSDK_PortfolioFolderNode_RemoveSubNode(parent_folder_node, child_file_node);
java
import com.foxit.sdk.common.Library;
import com.foxit.sdk.pdf.PDFDoc;
import com.foxit.sdk.pdf.Portfolio;
import com.foxit.sdk.pdf.SchemaField;
import com.foxit.sdk.pdf.SchemaFieldArray;
import com.foxit.sdk.pdf.PortfolioNode;
import com.foxit.sdk.pdf.PortfolioNodeArray;
import com.foxit.sdk.pdf.PortfolioFileNode;
import com.foxit.sdk.pdf.PortfolioFolderNode;
import com.foxit.sdk.pdf.FileSpec;
import com.foxit.sdk.common.Constants;
// Make sure that SDK has already been initialized successfully.
// Remove a child folder node from its parent folder node.
parent_folder_node.removeSubNode(child_folder_node);
// Remove a child file node from its parent folder node.
parent_folder_node.removeSubNode(child_file_node);
py
import sys
import site
if sys.version_info.major == 2:
_PYTHON2_ = True
else:
_PYTHON2_ = False
if _PYTHON2_:
# replace with the python2 lib path
site.addsitedir(‘../../../’)
from FoxitPDFSDKPython2 import *
else:
from FoxitPDFSDKPython3 import *
...
# Make sure that SDK has already been initialized successfully.
# Remove a child folder node from its parent folder node.
parent_folder_node.RemoveSubNode(child_folder_node)
# Remove a child file node from its parent folder node.
parent_folder_node.RemoveSubNode(child_file_node)
objc
#include "FSPDFObjC.h"
// Make sure that SDK has already been initialized successfully.
// Remove a child folder node from its parent folder node.
[parent_folder_node removeSubNode:child_folder_node];
// Remove a child file node from its parent folder node.
[parent_folder_node removeSubNode:child_file_node];
js
const FSDK = require("@foxitsoftware/foxit-pdf-sdk-node");
...
// Make sure that SDK has already been initialized successfully.
// Remove a child folder node from its parent folder node.
parent_folder_node.RemoveSubNode(child_folder_node);
// Remove a child file node from its parent folder node.
parent_folder_node.RemoveSubNode(child_file_node);
csharp
using foxit;
using foxit.common;
using foxit.common.fxcrt;
using foxit.pdf;
// Make sure that SDK has already been initialized successfully.
// Remove a child folder node from its parent folder node.
parent_folder_node.RemoveSubNode(child_folder_node);
// Remove a child file node from its parent folder node.
parent_folder_node.RemoveSubNode(child_file_node);