福昕 PDF SDK(Mac)
福昕 PDF SDK(Mac)支持开发自定义PDF阅读器,从中可选择添加PDF相关功能。只需要几行代码和一个优秀的功能库就可以添加注释、填写表单和签名功能。福昕核心API可以帮助开发人员开发PDF阅读器/编辑器或后台PDF工作流,满足企业目标需求。
功能
查看PDF
我们的核心API针对桌面和移动平台进行了优化,可以提供高保真度PDF文档渲染体验。
数字签名
无需打印文件,用户可以在其电子设备上签署文件,加速业务处理,并给用户带来舒适的体验。
PDF表单
支持使用电子设备填写数字表单,使之更高效、快捷。
权限管理
福昕 PDF SDK可以通过加密/解密服务或集成自定义数字权限管理(DRM)或信息权限管理(IRM)系统生成受保护的PDF文件。福昕的PDF SDK集成了微软权限管理服务(RMS)。
PDF注释
福昕 PDF SDK提供丰富的注释和标记功能,支持创建、编辑、导入和导出注释等。
全文搜索
采用SQLite数据库,支持对多种语言类型的PDF文档进行全文检索,提供快速、便捷的搜索体验。
福昕 PDF SDK 简介
我们的高性能库使用最流行的开发语言及环境,为所有平台的企业、移动和云应用程序助力,提供强大的PDF功能。
福昕PDF (WEB) 10.0版本突破性的改变将多维度升级您的使用体验!
我们通过重构书签模块提高了书签加载的时间效率。停止对ASM.JS引擎的支持,并放弃了对Safari V.11以下旧版本的支持;从而压缩SDK包体积,专注于维护更现代和高效的技术。引入新库加载模式,将静态库加载方法切换为动态库加载方法;由一个主模块和几个副模块组成。提供更快的初始加载时间和更少的内存使用。
于此同时,我们支持PDF 3D模型。实现动态XFA表单脚本功能,并使XFA表单在我们的Web SDK中真正具有交互性和数据驱动性。使用 /V字典来创建签名等等特色新的功能,我们期待您的试用与宝贵的意见交互!
福昕 PDF SDK 6.3
PDF SDK6.3增加了不少新功能,包括:从URL打开PDF时存储缓存的支持,新增了阅读视图模式,以及JavaScript中增加了SignatureInfo和Doc / WillClose功能,等等!
同时全面更新了文档资料,为您提供新版的开发人员指南以及大量新的代码示例,帮助开发人员快速上手。
高级技术
XFA表单
XFA表单是基于XML的表单。能够安全获取、呈现、移动、处理、输出、更新和打印与静态和动态XFA表单相关的信息。使用XFA表单能简化您的数据共享、数据和获取。
权限管理
将应用程序和文件连接到微软的权限管理服务平台,保护PDF文档的安全。福昕 PDF SDK支持集成自定义IRM和DRM解决方案。
密文处理
出于合法或安全的考虑,通过编程实现搜索和审查文档的敏感信息,确保您的客户和员工的信息安全。通过福昕强大的技术加密文档,使得文档符合通用数据保护条例(GDPR)。
优点
集成开发
福昕 PDF SDK(Mac)专为Apple开发者构建,已经Mac和iOS开发人员测试。启动Xcode或您的集成开发环境,尽享程序开发体验。
易于集成
我们开发Mac PDF库时将平台作为首要考虑因素。我们遵循Mac的命名规定和编码规定,使我们的程序符合Mac应用程序标准。
功能丰富
我们的产品功能在移动端和桌面端保持一致,使得跨平台开发更加简单顺畅。我们会不断更新功能集,欢迎关注我们的产品页面。
福昕核心技术支持
福昕 PDF SDK的核心技术已经存在多年,并且受到许多知名公司的信任。福昕强大的引擎使文档在不同平台上都可以快速查看并且保持一致。
使用Xcode加载文件和添加图像
class SdkLibMgr { public: SdkLibMgr() : isInitialize(false){}; ErrorCode Initialize() { ErrorCode error_code = Library::Initialize(sn, key); if (error_code != foxit::e_ErrSuccess) { printf("Library Initialize Error: %d\n", error_code); } else { isInitialize = true; } return error_code; } ~SdkLibMgr(){ if(isInitialize) Library::Release(); } private: bool isInitialize; }; WString output_directory = output_path + L"pdf2image/"; void Save2Image(Bitmap& bitmap, int nPageIndex, const char* sExt) { // Add the bitmap to image and save the image. Image image; image.AddFrame(bitmap); WString s; s.Format((FX_LPCWSTR)L"AboutFoxit_%d",nPageIndex); s = output_directory + s + WString::FromLocal(sExt); image.SaveAs(s); cout << "Save page " << nPageIndex << " into a picture of " << sExt << " format." << endl; } void Save2Image(Image& image, const char* sExt) { WString s = L"AboutFoxit"; s = output_directory + s + WString::FromLocal(sExt); image.SaveAs(s); cout << "Save pdf file into a picture of " << sExt << " format." << endl; } int main(int argc, char *argv[]) { #if defined(_WIN32) || defined(_WIN64) _mkdir(String::FromUnicode(output_directory)); #else mkdir(String::FromUnicode(output_directory), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); #endif int err_ret = 0; WString input_file = input_path + L"AboutFoxit.pdf"; const char* support_image_extends[] = {".bmp", ".jpg", ".jpeg", ".png", ".jpx", ".jp2"}; const char* support_multi_image[] = {".tif", ".tiff"}; SdkLibMgr spSdkLibMgr; ErrorCode error_code = spSdkLibMgr.Initialize(); if (error_code != foxit::e_ErrSuccess) { return 1; } try { PDFDoc doc=PDFDoc(input_file); ErrorCode error_code = doc.Load(); if (error_code != foxit::e_ErrSuccess) { printf("The Doc [%s] Error: %d\n", (const char*)String::FromUnicode(input_file), error_code); return 1; } Image image; // get page count int nPageCount = doc.GetPageCount(); for(int i=0;i<nPageCount;i++) { PDFPage page = doc.GetPage(i); // Parse page. page.StartParse(foxit::pdf::PDFPage::e_ParsePageNormal, NULL, false); int width = static_cast<int>(page.GetWidth()); int height = static_cast<int>(page.GetHeight()); Matrix matrix = page.GetDisplayMatrix(0, 0, width, height, page.GetRotation()); // Prepare a bitmap for rendering. Bitmap bitmap(width, height, foxit::common::Bitmap::e_DIBArgb, NULL, 0); bitmap.FillRect(0xFFFFFFFF, NULL); // Render page Renderer render(bitmap, false); render.StartRender(page, matrix, NULL); image.AddFrame(bitmap); for(unsigned int j=0;j<sizeof(support_image_extends)/sizeof(support_image_extends[0]);j++) { const char* extend = support_image_extends[j]; Save2Image(bitmap,i,extend); } } for(unsigned int j=0;j<sizeof(support_multi_image)/sizeof(support_multi_image[0]);j++) { const char* extend = support_multi_image[j]; Save2Image(image,extend); } } catch (const Exception& e) { cout << e.GetMessage() << endl; err_ret = 1; } catch(...) { cout << "Unknown Exception" << endl; err_ret = 1; } return err_ret; }