# Stamp及其自定义
Foxit PDF SDK for Web 提供了丰富的stamp功能,用户可以通过 API 和默认图标来实现这些功能。本节将引导您了解如何管理stamp,以及如何向PDF文档中添加stamp。
# 默认stamp列表
Foxit PDF SDK for Web 在Viewer中提供了默认的stamp列表,如下所示:
{
"stamp": {
"Static": {
"Approved": {
"url": "xxx://url.url",
"fileType": "pdf"
},
"Completed": {
"url": "xxx://url.url",
"fileType": "pdf"
},
"Confidential": {
"url": "xxx://url.url",
"fileType": "pdf"
},
"Draft": {
"url": "xxx://url.url",
"fileType": "pdf"
},
"Revised": {
"url": "xxx://url.url",
"fileType": "pdf"
},
"Emergency": {
"url": "xxx://url.url",
"fileType": "pdf"
},
"Expired": {
"url": "xxx://url.url",
"fileType": "pdf"
},
"Final": {
"url": "xxx://url.url",
"fileType": "pdf"
},
"Received": {
"url": "xxx://url.url",
"fileType": "pdf"
},
"Reviewed": {
"url": "xxx://url.url",
"fileType": "pdf"
}
},
"SignHere": {
"Accepted": {
"url": "xxx://url.url",
"fileType": "pdf"
},
"Initial": {
"url": "xxx://url.url",
"fileType": "pdf"
},
"Rejected": {
"url": "xxx://url.url",
"fileType": "pdf"
},
"SignHere": {
"url": "xxx://url.url",
"fileType": "pdf"
},
"Witness": {
"url": "xxx://url.url",
"fileType": "pdf"
}
},
"Dynamic": {
"Approved": {
"url": "xxx://url.url",
"fileType": "pdf"
},
"Confidential": {
"url": "xxx://url.url",
"fileType": "pdf"
},
"Received": {
"url": "xxx://url.url",
"fileType": "pdf"
},
"Reviewed": {
"url": "xxx://url.url",
"fileType": "pdf"
},
"Revised": {
"url": "xxx://url.url",
"fileType": "pdf"
}
}
}
}
# 管理stamp列表
默认stamp列表是不允许更改的。但是,您可以创建自己的stamp来替换默认的stamp,然后对其进行编辑。首先需要制作一个PDF文件以及相应的svg文件,可以参考lib\stamps\en-US\DynamicStamps
文件夹下的示例。
# 创建自定义stamp列表
自定义stamp列表可以通过API pdfViewer.initAnnotationIcons() 来进行预定义,然后将其加载到viewer中。运行如下代码后,默认stamp列表将被覆盖。
var initIcons = {
MyCategory1: {
StampName1: {
fileType: "jpg",
url: "http://stamp.jpg"
}
},
MyCategory2: {
StampName2: {
fileType: "png",
url: "stamp.png"
}
},
...
};
var pdfViewer = await pdfui.getPDFViewer();
await pdfViewer.initAnnotationIcons({ stamp: initIcons });
# 移除自定义stamp
//remove a stamp with the category and name as 'MyCategory1' and 'StampName1' from you stamp list
var pdfViewer = await pdfui.getPDFViewer();
await pdfViewer.removeAnnotationIcon('stamp','MyCategory1','StampName1')
//clear the whole stamp list
var pdfViewer = await pdfui.getPDFViewer();
await pdfViewer.removeAnnotationIcon('stamp','','StampName1')
//clear all stampes under 'MyCategory1'
var pdfViewer = await pdfui.getPDFViewer();
await pdfViewer.removeAnnotationIcon('stamp','MyCategory1','')
# 添加一个新的自定义stamp
var icons = {
annotType: "stamp",
fileType: "png",
url: "http://stamp.png",
// width:80,
// height:30,
category: "MyCategory",
name: "MyStamp"
};
var pdfViewer = await pdfui.getPDFViewer();
await pdfViewer.addAnnotationIcon(icons);
# stamp category及name
Stamp是按category和name进行组织管理的。要找出列表中已经存在的stamp,简单的方法就是调用pdfui.getAnnotationIcons() 来获取category和name信息。下面是代码示例。
# 获取stamp的category及name
//list all availble stamps
await pdfui.getAnnotationIcons("stamp", false);
//list only custom stamps
await pdfui.getAnnotationIcons("stamp", true);
您还可以执行以下代码来输出列表中已存在的stamp。
var allIcons = pdfui.getAnnotationIcons("stamp", false);
var iconNames = [];
for (var categoryKey in allIcons) {
var category = allIcons[categoryKey];
for (var name in category) {
iconNames.push({
category: categoryKey,
name
});
}
}
console.log(iconNames);
# 在Viewer中将stamp添加到页面
在Viewer的Comments选项卡中,下拉stamp工具,可以看到stamp列表。您可以点击stamp图标,然后将其放置在页面所需的位置。
如果您需要在页面上添加一个自定义的stamp,请按照如下的步骤:
在Advanced Web Viewer中,点击Comment tab,下拉stamp tool,选择
Custom Stamps
。在弹出的
Create Custom Stamp
对话框中, 点击File -> Browse...
并选择一个图片文件,或者点击File -> Enter File URL
, 输入PDF和SVGA文件所存放的URL地址。填写category,name,width,height, 以及从下拉菜单中选择type,创建stamp。 创建完成后,自定义的stamp就会显示在Stamp 列表中。
点击自定义的stamp图标,然后将其放置在页面所需的位置。
# 通过API在页面上添加自定义stamp
在调用PDFPage.addAnnot添加stamp列表中不存在的自定义stamp时,您需要调用PDFViewer.addAnnotationIcon() 将其添加到stamp列表。如果没有添加,则该stamp的外观在页面上将不能正确地显示。
var icons = {
annotType: "stamp",
fileType: "png",
url: "http://stamp.png",
// width:80,
// height:30,
category: "MyCategory",
name: "MyStamp"
};
var stamp = {
type:'stamp',
rect:{left:0,bottom:0,right:200,top:100},
icon:'MyStamp',
iconCategory:'MyCategory'
};
var pdfViewer = await pdfui.getPDFViewer();
var pdfDoc = await pdfViewer.getCurrentPDFDoc();
var page = await pdfDoc.getPageByIndex(0);
await pdfViewer.addAnnotationIcon(icons);
await page.addAnnot(stamp)
如果只需要在页面上添加新的stamp,而不需要在viewer的stamp列表中添加stamp图标,可以运行如下的代码:
pdfpage.addAnnot({
type: PDFViewCtrl.PDF.annots.constant.Annot_Type.stamp,
rect: { left: 0, right: 300, top: 450, bottom: 0 },
iconInfo: {
annotType: PDFViewCtrl.PDF.annots.constant.Annot_Type.stamp,
category: "category",
name: "name",
fileType: "pdf",
url: "http://path/file.pdf"
}
});
# 在Viewer中将特定的stamp设置为默认工具
使用 PDFUI 构造函数将stamp定义为默认工具:
pdfui = new UIExtension.PDFUI({
customs: {
defaultStateHandler: PDFViewCtrl.STATE_HANDLER_NAMESSTATE_HANDLER_CREATE_STAMP
handlerParams: {
category: 'SignHere',
name: 'SignHere'
}
};
})
使用API StateHandlerManager.switchTo() 设置默认工具:
pdfui.getStateHandlerManager().then(handlerManager =>
handlerManager.switchTo(
PDFViewCtrl.STATE_HANDLER_NAMES.STATE_HANDLER_CREATE_STAMP,
{
category: "SignHere",
name: "SignHere"
url: "http://xxx/xx.png", // or "blob:http://xxxxx"
showUrl: "http://xxx/xx.png", // or "blob:http://xxxxx"
fileType:'png',
width: 80,
height: 30,
})
);
# 相关API
API | 描述 |
---|---|
PDFViewer.initAnnotationIcons(icons) | 初始化注释的图标(设置后,默认的图标将不会显示) |
PDFViewer.addAnnotationIcon(icon) | 添加单个图标 |
PDFViewer.removeAnnotationIcon(type,category,name) | 移除单个图标 |
PDFUI.getAnnotationIcons(annotType,onlyCustomized) | 获取自定义图标 |
StateHandlerManager.switchTo(name,params) | 切换到addStampStateHandler |
PDFViewer.setFormatOfDynamicStamp(seperator,timeFormat) | 设置动态信息的格式 |
PDFPage.addAnnot(json) | 指定现有图标作为stamp样式来添加stamp |