如何生成格式化页码?

什么是格式化页码?

在福昕PDF编辑器左侧的侧边栏中,打开缩略图,选中一个缩略图后右键,可以看见编辑器中有格式化页码的功能,可以让原本是“1,2,3,4”格式的页码,增加前缀,或改为罗马数字等样式。

在区分文档目录、文档章节时比较常见,在用户通过缩略图查找内容时能给予提示用于区分不同章节等信息,如下图所示:

通过SDK实现的示例代码如下:


void addPageLanbles()
{
	FR_Document frDocument = FRAppGetActiveDocOfPDDoc();
	FPD_Document fpdDocument = FRDocGetPDDoc(frDocument);
	FPD_Object docObj= FPDDocGetRoot(fpdDocument);
	docObj = FPDObjectGetDict(docObj);

	FPD_Object pageLablesObj= FPDDictionaryNew();
	FPD_Object numsArray = FPDArrayNew();
	//从第0页开始,是阿拉伯数字形式的页码
	int startPageIndex = 0;
	FPD_Object pageLable = FPDDictionaryNew();
	//页码序号类型: D 十进制阿拉伯数字;R 大写罗马数字;r 小写罗马数字; A 大写字母; a小写字母
	FPDDictionaryAddValue(pageLable, "S", FPDNameNew( "D"));
	FPDDocAddIndirectObject(fpdDocument, pageLable);
	FPDArrayAddInteger(numsArray, startPageIndex);
	FPDArrayAddReference2ToDoc(numsArray, fpdDocument, pageLable);

	//从第3页开始,自定义的前缀
	startPageIndex = 3;
	pageLable = FPDDictionaryNew();
	FPDDictionaryAddValue(pageLable, "S", FPDNameNew("R"));//罗马数字
	FPDDictionaryAddValue(pageLable, "P", FPDStringNewW(L"foxit福昕_"));
	//该前缀出现的第一页,页码号从1开始,
	FS_INT32 prefixSatrt = 1;
	FPDDictionaryAddValue(pageLable, "St",FPDNumberNewByInt(prefixSatrt));
	FPDDocAddIndirectObject(fpdDocument, pageLable);
	FPDArrayAddInteger(numsArray, startPageIndex);//从第三也开始显示带有前缀的前缀页码
	FPDArrayAddReference2ToDoc(numsArray, fpdDocument, pageLable);

	//从第6页开始不显示页码
	startPageIndex = 6;
	FPD_Object pageLable2= FPDDictionaryNew();
	FPDDictionaryAddValue(pageLable2, "P", FPDStringNewW(L""));//前缀为空,并且没有页码(S)
	FPDDocAddIndirectObject(fpdDocument, pageLable2);
	FPDArrayAddInteger(numsArray, startPageIndex);
	FPDArrayAddReference2ToDoc(numsArray, fpdDocument, pageLable2);


	FPDDictionaryAddValue(pageLablesObj, "Nums", numsArray);
	FPDDictionaryAddValue(docObj, "PageLabels", pageLablesObj);
	FPDDocSave(fpdDocument, "D:/test/AddPageLables.pdf", 0, false);
}

效果如下: