Foxit PDF SDK(UWP版)

Foxit PDF SDK(UWP版) 专注于帮助开发者轻松地将PDF技术集成到应用程序中。通过Foxit PDF SDK(UWP版),开发人员可以享受原生开发体验,使用完整的源代码控件和内置PDF阅读器来开发UWP应用程序。即使开发人员对PDF知识了解有限,也可以通过几行代码快速开发专业的、定制的阅读器。我们的软件开发工具包拥有您应用程序所需的文本处理功能。

使用Foxit PDF SDK(UWP版)开发PDF软件

开发人员可以使用Foxit PDF SDK(UWP版)轻松开发可以查看、创建和编辑PDF文档的UWP应用程序。我们的UI扩展组件提供了一个完全可定制的用户界面,内置文本标记、绘图、填写表单、全文搜索等工具。使用我们的核心API,开发人员可以快速、熟练地使用我们的PDF库。开发人员可以利用福昕强大的PDF SDK技术为您的客户提供一个出色的产品。我们的PDF SDK是根据UWP流畅的设计指南创建的,它是UWP移动应用的理想辅助开发工具。

UWP PDF SDK Support

功能

查看PDF

我们的核心API针对桌面和移动平台进行了优化,可以提供高保真度PDF文档渲染体验。

数字签名

无需打印文件,用户可以在其电子设备上签署文件,加速业务处理,并给用户带来舒适的体验。

PDF表单

支持使用电子设备填写数字表单,使之更高效、快捷。

权限管理

Foxit PDF SDK可以通过加密/解密服务或集成自定义数字权限管理(DRM)或信息权限管理(IRM)系统生成受保护的PDF文件。福昕的PDF SDK集成了微软权限管理服务(RMS)。

PDF注释

Foxit PDF SDK提供丰富的注释和标记功能,支持创建、编辑、导入和导出注释等。

全文搜索

采用SQLite数据库,支持对多种语言类型的PDF文档进行全文检索,提供快速、便捷的搜索体验。
 

FOXIT PDF SDK 6.4  

PDF SDK 6.4为用户带来了全新的功能,包括备受欢迎的OCR附加组件、PDF比较工具、PDF合规性附加组件等等。除了新增这些功能外,我们还增强改进了注释功能(单个注释的旋转、扁平化)和XFA表单的签名功能,针对Cordova插件提供新的API,并更新了示例代码和开发人员指南,同时修复了若干问题。

高级技术

XFA表单

XFA表单是基于XML的表单。能够安全获取、呈现、移动、处理、输出、更新和打印与静态和动态XFA表单相关的信息。使用XFA表单能简化您的数据共享、数据和获取。

权限管理

将应用程序和文件连接到微软的权限管理服务平台,保护PDF文档的安全。Foxit PDF SDK支持集成自定义IRM和DRM解决方案。
 
 

密文处理

出于合法或安全的考虑,通过编程实现搜索和审查文档的敏感信息,确保您的客户和员工的信息安全。通过福昕强大的技术加密文档,使得文档符合通用数据保护条例(GDPR)。

试用福昕技术

福昕阅读器(UWP版)是使用PDF SDK(UWP版)开发而成,可以从微软商店免费下载。欢迎立即试用。

优点

原生用户界面

PDF SDK(UWP版)专为开发人员构建。我们提供了内置PDF阅读器,使您开发工作量减半,并允许您自定义此阅读器。

易于集成

我们开发UWP PDF库时将平台作为首要考虑因素。我们遵循UWP的命名规定和流畅设计原则,使我们的程序符合UWP应用程序标准。

功能丰富

我们的产品功能在移动端和桌面端保持一致,使得跨平台开发更加简单顺畅。我们会不断更新功能集,欢迎关注我们的产品页面。

福昕核心技术支持

Foxit PDF SDK的核心技术已经存在多年,并且受到许多知名公司的信任。福昕强大的引擎使文档在不同平台上都可以快速查看并且保持一致。

系统要求

 

  • Windows 10
  • Visual Studio 2015或更高版本

Foxit PDF SDK(UWP版)样例

//Edit the bookmarks title, color, style... then save them to a new pdf.
void FunctionDemo::MainPage::outline_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
	StorageFolder^ documentFolder = Windows::Storage::KnownFolders::DocumentsLibrary;
	create_task(documentFolder->GetFileAsync("Outline.pdf")).then([=](StorageFile^ file) {
		try
		{
			m_doc = ref new FSPDFDoc(file,0);
			if (!m_doc)
			{
				return;
			}
			FSErrorCode code = m_doc->Load("");
			if (code != FSErrorCode::e_errSuccess) {
				return;
			}

			FSBookmark^ root = m_doc->GetFirstBookmark();
			this->setProperties(root);
		}
		catch (Platform::Exception^ e)
		{
			OutputDebugString(e->Message->Data());
		}
	}).then([=]()
	{
		return documentFolder->CreateFileAsync("Output_Outline.pdf", CreationCollisionOption::ReplaceExisting);
	}).then([=](StorageFile^ file)
	{
		try
		{
			m_doc->SaveAs(file, 0);
			this->showMesseageDialog("", "The output file is saved to:" + file->Path);
		}
		catch (Platform::Exception^ e)
		{
		}
	});
}


void FunctionDemo::MainPage::setProperties(FSBookmark^ bookmark)
{
	FSBookmark^ bm = nullptr;
	for (bm = bookmark->GetFirstChild(); bm != nullptr; bm = bm->GetNextSibling())
	{
		String^ title = bm->GetTitle();
		bm->SetTitle(title + "_renamed");
		bm->SetColor(0x0000ffff);
		bm->SetStyle((int)FSBookmarkStyle::e_bookmarkStyleBold);

		FSBookmark^ child = bm->GetFirstChild();
		if (child)
		{
			this->setProperties(bm);
		}
	}
}

void FunctionDemo::MainPage::showMesseageDialog(Platform::String^ title, Platform::String^ content)
{
	auto messageDialog = ref new Windows::UI::Popups::MessageDialog(content, title);
	messageDialog->Commands->Append(ref new Windows::UI::Popups::UICommand("OK", nullptr, PropertyValue::CreateInt32(0)));
	messageDialog->DefaultCommandIndex = 0;
	messageDialog->ShowAsync();
}
//Render the pdf page, then save it to a bitmap file.
void FunctionDemo::MainPage::render_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
	StorageFolder^ documentFolder = Windows::Storage::KnownFolders::DocumentsLibrary;
	std::shared_ptr<fsbitmap^> spBitmap = std::make_shared<fsbitmap^>(nullptr);
	create_task(documentFolder->GetFileAsync("FoxitBigPreview.pdf")).then([=](StorageFile^ file) {
		try
		{
			m_doc = ref new FSPDFDoc(file, 0);
			if (!m_doc)
			{
				return;
			}
			
			FSErrorCode code = m_doc->Load("");
			if (code != FSErrorCode::e_errSuccess) {
				return;
			}

			FSPDFPage^ page = m_doc->GetPage(0);
			if (!page->IsParsed())
			{
				page->StartParse(0, nullptr, false);
			}
			//create bitmap
			int pageWidth = (int)page->GetWidth();
			int pageHeight = (int)page->GetHeight();
			*spBitmap = ref new FSBitmap(pageWidth, pageHeight, FSDIBFormat::e_dibRgb32, nullptr, 0);
			if (!(*spBitmap)) {
				return;
			}
			(*spBitmap)->FillRect(0xffffffff, nullptr);

			//init renderer
			FSRenderer^ render = ref new FSRenderer((*spBitmap), false);
			if (!render) {
				return;
			}

			//set different kinds of properties
			render->SetRenderContentFlags((int)FSRenderContentFlag::e_renderPage);
			render->SetTransformAnnotIcon(true);
			render->SetColorMode(FSRenderColorMode::e_colorModeNormal);
			render->SetForceHalftone(true);

			FSMatrix^ matrix = page->GetDisplayMatrix(0, 0, pageWidth, pageHeight, FSRotation::e_rotation0);
			render->StartRender(page, matrix, nullptr);

		}
		catch (Platform::Exception^ e)
		{
			OutputDebugString(e->Message->Data());
		}
	}).then([=]()
	{
		return documentFolder->CreateFileAsync("Output_Render.bmp", CreationCollisionOption::ReplaceExisting);
	}).then([=](StorageFile^ file)
	{
		FSImage^ img = ref new FSImage();
		img->AddFrame((*spBitmap));
		if(img->SaveAs(file, "bmp"))
			this->showMesseageDialog("", "The output file is saved to:" + file->Path);
		else
			this->showMesseageDialog("", "error!");
	});
	
}