使用ComPDFKit PDF SDK 构建iOS PDF阅读器
在当今以移动为先的世界中,为企业和开发人员创建一个iOS应用程序是必不可少的。随着对PDF文档处理需求的增加,使用ComPDFKit这个强大的PDF软件开发工具包(SDK)来构建iOS PDF阅读器和编辑器可以让最终用户轻松查看和编辑PDF文档。
在本博客中,我们将首先探讨整合ComPDFKit PDF SDK和使用它构建iOS PDF阅读器所需的步骤。
开始使用ComPDFKit iOS PDF SDK
ComPDFKit是一个强大的PDF软件开发工具包(SDK)。使用几行Objective-C代码,将ComPDFKit PDF SDK嵌入到您的iOS应用程序中非常简单。只需几分钟,就可以开始使用。
以下几个部分介绍了所需的要求、安装包的结构,以及如何使用ComPDFKit PDF SDK在Objective-C中创建iOS PDF阅读器
所需环境
开发使用ComPDFKit PDF SDK的程序需要以下开发环境。如果您的开发环境较低,可能无法正常使用ComPDFKit PDF SDK。
设备系统要求iOS10.0及以后的系统
IDE的版本:Xcode12及以后。在本博客中,我们使用Xcode14.0.1来演示示例
目前暂不支持在苹果Silicon系列上运行模拟器
对于早期版本的Xcode(如Xcode 13),默认情况下可能会打开Bitcode选项,因此需要关闭才能进行运行。具体的操作步骤如下图所示:
iOS包结构
您可以通过联系我们来获取我们的PDF SDK安装包。下载并解压缩ComPDFKit PDF SDK for iOS的安装包,您将在SDK包中看到以下所有文件。
ComPDFKit.xcframework - 包括ComPDFKit 动态库(arm64_armv7,x86_64-模拟器)以及相关的头文件
PDFViewer - 包含iOS(Objective-C)样例的工程
PDFViewer-Swift - 包含iOS(Swift)样例的工程
api_reference_ios - API 引用
developer_guide_ios.pdf- Developer guide
release_note - 版本发布相关的信息
legal.txt** - 法律相关的信息
使用Objective-C创建iOS预览App
这一部分将通过逐步说明,帮助您快速入门使用ComPDFKit PDF SDK以在Objective-C中制作iOS应用程序。通过以下步骤,您将获得一个能够显示指定PDF文件内容的简单应用程序。在本文中,我们以Xcode 14.0.1作为示例。
创建一个全新的项目
- 打开Xcode,选择File-> New -> Project,然后选择iOS app,再点过击Next按钮
- 新项目需要设置如下几个选项:
-
输入产品的名字,例如:PDFViewer
-
选择并登录您要发布应用的苹果开发者账号。
-
输入组织的名称:(com.example.pdfviewer)
-
在面版上选择故事版
-
编程语言选择"Objective-C"
-
点击"Next"按钮
-
设置project的位置,然后点击创建
添加ComPDFKit的SDK包
-
在ComPDFKit PDF SDK的安装包中找到ComPDFKit.xcframework。它包含了所有支持的架构的二进制文件。
-
打开新创建的iOS项目,并在右侧面板中选择General。然后找到Frameworks, Libraries, and Embedded Content部分,将ComPDFKit.xcframework直接拖放到该部分,并将Embed选项设置为Embed & Sign。
-
使用快捷键"Command_B"编译项目。如果没有报错,说明配置正确,您可以继续进行下一步。如果报告了一些错误,您需要检查错误的原因。如果您无法确定错误,可以联系我们的技术团队来解决问题
添加License Key
-
将头文件ComPDFKit/ComPDFKit.h 导入到AppDelegate中。
-
按照下面的代码,并在
didFinishLaunchingWithOptions
方法中调用CPDFKit setLicenseKey:@"LICENSE_KEY" secret:@"LICENSE_SECRET"
方法。您需要用您获得的许可证替换LICENSE_KEY和LICENSE_SECRET。
#import <ComPDFKit/ComPDFKit.h>@interface AppDelegate ()@end@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {// Override point for customization after application launch./*// Set your license key here. ComPDFKit is commercial software.// Each ComPDFKit license is bound to a specific app bundle id.// Notice: This is a demo project, presenting completed ComPDFKit functions.// The functions might be different based on the license you have purchased.// Please check the functions you chose work fine in this demo project.// BOOL tIsFeatureLocked = ![[CPDFKit sharedInstance] allowsFeature:CPDFKitFeatureSecurityWatermark];*/// [CPDFKit setLicenseKey:@"YOUR_LICENSE_KEY_GOES_HERE" secret:@"YOUR_LICENSE_SECRET_GOES_HERE"];[CPDFKit setLicenseKey:@"" secret:@""];NSString *tAnnotateAuther = CPDFKitShareConfig.annotationAuthor;NSLog(@"CPDFKit Annotation Author: \t %@", tAnnotateAuther);CPDFKitShareConfig.enableAnnotationNoRotate = YES;return YES;
}
编译并运行项目。如果控制台输出了"version information"(版本信息),则表示许可证已成功设置。否则,请查看本博客末尾的"故障排除"部分或检查控制台中的错误日志,以快速确定并解决问题。
展示pdf文档
准备一个测试的PDF文件,将其拖放到新创建的 pdfView 项目中。通过这种方式,您可以使用 NSBundle
加载和预览本地的PDF文档。下面的图片展示了将名为“Online5”的PDF文档导入项目的示例。
- 准备一个测试的PDF文件,将其拖放到新创建的 pdfView 项目中。通过这种方式,您可以使用
NSBundle
加载和预览本地的PDF文档。下面的图片展示了将名为“Online5”的PDF文档导入项目的示例。
NSString *pdfPath= [bunle pathForResource:@"Online5" ofType:@"pdf"];NSURL *url = [NSURL fileURLWithPath:pdfPath];CPDFDocument *document = [[[CPDFDocument alloc] initWithURL:url] autorelease];CGRect rect = self.view.bounds;CPDFView *pdfView = [[[CPDFView alloc] initWithFrame:rect] autorelease];pdfView.document = document;
- 将创建的 CPDFView 添加到当前控制器的视图中。示例代码如下:
[self.view addSubview:pdfView];
- 连接您的设备或模拟器,并使用快捷键"Command_R"运行应用程序。PDF文件将被打开并显示在屏幕上。
- 如果无法显示PDF内容,请检查创建的NSURL和"CPDFDocument"对象是否为空,或者创建的"CPDFView"的大小是否为零。它们不应该为空。
如果文件路径中包含特殊字符,您的NSURL将会为nil。请使用以下代码进行处理。
[pdfPath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
如果创建的CPDFView
的大小为零,按照以下代码调整pdfview
的大小。
pdfview.frame = self.view.frame.bounds
所有代码如下所示:
NSString *pdfPath= [bunle pathForResource:@"Online5" ofType:@"pdf"];NSURL *url = [NSURL fileURLWithPath:pdfPath];CPDFDocument *document = [[[CPDFDocument alloc] initWithURL:url] autorelease];if (document.error && document.error.code != CPDFDocumentPasswordError) {return;}// Initialize a CPDFView object with the size of the entire screenCPDFView *pdfView = [[[CPDFView alloc] initWithFrame:self.view.bounds] autorelease];// Set the document to displaypdfView.document = document;// Add the pdfView to the root view[self.view addSubview:pdfView];
问题排查
-
位码
即使所有配置都正确,仍可能出现编译错误。首先,请检查是否禁用了位码(bitcode)。在较旧的Xcode版本(如Xcode 13)中,默认情况下可能启用了位码选项。为了运行应用程序,需要将其设置为“否”。
-
License(许可证)
如果出现许可设置错误,请确保“通用设置”中的身份(Bundle ID)设置与您联系我们以获取许可时提供的Bundle ID匹配。如果出现已过期的许可消息,请联系ComPDFKit团队以获取最新的许可和密钥。
-
PDF无法展示
请检查我们传入的路径是否需要特殊编码,或者我们传入的本地路径是否存在
-
其他问题
如果在集成我们的ComPDFKit PDF SDK for iOS时遇到其他问题,请随时联系ComPDFKit团队
在当今以移动为先的世界中,为企业和开发人员创建一个iOS应用程序是必不可少的。随着对PDF文档处理需求的增加,使用ComPDFKit这个强大的PDF软件开发工具包(SDK)来构建iOS PDF阅读器和编辑器可以让最终用户轻松查看和编辑PDF文档。
在本博客中,我们将首先探讨整合ComPDFKit PDF SDK和使用它构建iOS PDF阅读器所需的步骤。
开始使用ComPDFKit iOS PDF SDK
ComPDFKit是一个强大的PDF软件开发工具包(SDK)。使用几行Objective-C代码,将ComPDFKit PDF SDK嵌入到您的iOS应用程序中非常简单。只需几分钟,就可以开始使用。
以下几个部分介绍了所需的要求、安装包的结构,以及如何使用ComPDFKit PDF SDK在Objective-C中创建iOS PDF阅读器
所需环境
开发使用ComPDFKit PDF SDK的程序需要以下开发环境。如果您的开发环境较低,可能无法正常使用ComPDFKit PDF SDK。
设备系统要求iOS10.0及以后的系统
IDE的版本:Xcode12及以后。在本博客中,我们使用Xcode14.0.1来演示示例
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vJRtAPYZ-1690448461859)(https://developer-private-1258344699.cos.ap-guangzhou.myqcloud.com/column/article/10679850/20230727-f12f15ef.jpg?x-cos-security-token=BJdJsHEW9tRdV4U1c2UC8j4hz1AQDOiad9eabc3fe036a764ae609698273ee434ELpcYO4-9LL7ugDY7fTqEzBaRJKrOsDTkDtXM7zGLaKwHKL2sAHtn3_6b6bBiHmb8QXsDi2ZSk4Mfij6vE6wrklmlNqWFKH6KdMOHGq0KHPxiL5SFiK0pzMJTc8Nl9m0YENqdo-fm7Hr_Rn9xhNTN5yvFRQgPJqSVSM72uOFS37MXhTfHBVUL3nORH5Vg_Til5TF8XdIoOYTVx3Ks1P5nPe_6aG3UASiZU_1E-9pjeDKpCweKAvgji3ETHiFjEjuKjOz2H0-4eWcFDDYYY3q9vbyD83V3BxwgoXRoFwAVmIJXWnJG2d1RBRO3sj-40Skgrs81_udF8paUXEPlEkrsoY5-7GeTE4JY2ROVS3RaHjyAm6I0szTNCikbbU3LO2PGVMH46Hw6PcqvNc92dyplg&q-sign-algorithm=sha1&q-ak=AKIDANg5dNM5f9D8uxxwgM3dVxpc5tfCPYqPpHqqYMKsHsXGLcIfh7r_y3gFkNRi1S9q&q-sign-time=1690448075%3B1690455270&q-key-time=1690448075%3B1690455270&q-header-list=host&q-url-param-list=x-cos-security-token&q-signature=c24998cfc572398f422139639a7ffb755bafb6d6)]
目前暂不支持在苹果Silicon系列上运行模拟器
对于早期版本的Xcode(如Xcode 13),默认情况下可能会打开Bitcode选项,因此需要关闭才能进行运行。具体的操作步骤如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7Ez2lkrs-1690448461860)(https://developer-private-1258344699.cos.ap-guangzhou.myqcloud.com/column/article/10679850/20230727-24aefc53.jpg?x-cos-security-token=2DvTlaTJkqLbUbKZEwEcLA7IMp51aNyaaf7adb55df5d8a1f6c416b6163835df8zpMHRHzjIezKVlcXhhCVpkroW1dNVtfYRN64iO0cGWgQPHbi0tnfSw76g15p5LXDQugdqEk1f8Zuzwka9VdrrLd3h2I0ev_eiZW-YiqR-Mwp0IO_vL6CkCoUOj5uREp6LzqBRVtrwuwf4n2-6PkYycz9Sl_wpw7Hww-t4J9sbwaz2hFF2gMxi577Tv2MOc8Odg6SUzW5ktFwCO5PsPKXEMtEkW7T2AEiyfBnSFqczblBpec7lKaOJvzRItVPBMb8JJaGybvhwgTg3oSwdcLMSFPYDM-Tpe9vz61GR52MIHLUf1cFGSsJfQfpv_XUVm6livJgKT93kQ_qJL4fLwTmjNysRYh36UWQNglUH8FegUM9cQz6QNOVDvGdTG9UupgqCuXOazgj_RxsfI47JEmizw&q-sign-algorithm=sha1&q-ak=AKIDVKhQ4uBgkTq_t-2pdw1vZhsOn1wlTJFx3kTUGaufm5AW6X8r635Sk3aIVZBoNpAg&q-sign-time=1690448083%3B1690455278&q-key-time=1690448083%3B1690455278&q-header-list=host&q-url-param-list=x-cos-security-token&q-signature=5ee26126e198659ceb1f68f6ceaeee27ccc75f35)]
iOS包结构
您可以通过联系我们来获取我们的PDF SDK安装包。下载并解压缩ComPDFKit PDF SDK for iOS的安装包,您将在SDK包中看到以下所有文件。
ComPDFKit.xcframework - 包括ComPDFKit 动态库(arm64_armv7,x86_64-模拟器)以及相关的头文件
PDFViewer - 包含iOS(Objective-C)样例的工程
PDFViewer-Swift - 包含iOS(Swift)样例的工程
api_reference_ios - API 引用
developer_guide_ios.pdf- Developer guide
release_note - 版本发布相关的信息
legal.txt** - 法律相关的信息
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A7PbvvGE-1690448461860)(https://developer-private-1258344699.cos.ap-guangzhou.myqcloud.com/column/article/10679850/20230727-688f1f3f.png?x-cos-security-token=2DvTlaTJkqLbUbKZEwEcLA7IMp51aNyacfd929f7e17b74f145b4f4dde7f09d42zpMHRHzjIezKVlcXhhCVplbHw0ZQcgA_4HcvHxN8DRIAqFbV0f5Txnup13H3GeRVFwmdWWTET8fQtCtNmCR-n70DqR_9PImNJ3K7loOjAa2fmhrn5_l0hZBFD2CjKoJHyz8A0HYmQpYJ-JWmBpjxZcEDJtCTkyAyW_EXW62AVvJSKgLmxiqUF-FRuohbDuqf52xHAG8c6k_-E0IYomA-LxCZvIF-ptmG-nrv6q27xjY_5RVmlHqae1fPicYoGnSeHBp4j2Gf-JFxDy0LcAJ1p18noTdtasSt3uZo9DJh–ThmZSa-3E1p6WiKxwRN33d3S10KzGsKsY6yMVXgBHUVT-ZiYaylN7f-KUxUkpoO8lCCq2UL_xisHcvPzTlNXeTU8OJkpoeWGptLZ605dSV9w&q-sign-algorithm=sha1&q-ak=AKIDocT-i4cCmMYCeVFuuP6orCVqxeplyXV8zkKP8tpCINHKTtbpqXg35hVYy9H0g59a&q-sign-time=1690448162%3B1690455357&q-key-time=1690448162%3B1690455357&q-header-list=host&q-url-param-list=x-cos-security-token&q-signature=f5e247a6504c506f70966825c97998e032d285db)]
使用Objective-C创建iOS预览App
这一部分将通过逐步说明,帮助您快速入门使用ComPDFKit PDF SDK以在Objective-C中制作iOS应用程序。通过以下步骤,您将获得一个能够显示指定PDF文件内容的简单应用程序。在本文中,我们以Xcode 14.0.1作为示例。
创建一个全新的项目
- 打开Xcode,选择File-> New -> Project,然后选择iOS app,再点过击Next按钮
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uNts5Iiz-1690448461860)(https://developer-private-1258344699.cos.ap-guangzhou.myqcloud.com/column/article/10679850/20230727-cf9b59e6.jpg?x-cos-security-token=2DvTlaTJkqLbUbKZEwEcLA7IMp51aNya146e45b438f870507952cf1569723a15zpMHRHzjIezKVlcXhhCVpo30aiDycHEY02_aUaUvPMfQEg-fu7kZAlZ1LesPkfSi8skn2c7mbrLHrDspb87loy4gbJtsJnckY1qepYw8PISzAi8gr95KeR_khbV2mwxofAThAsRccASCfWFtC3iRtvHjzEz39zwN5KPjv_6kjluBoYS-IjMvLjFEHt3BZ02I-A6t3YQ1t6VbuL95FcyFl_Jm6iKOQNNrlGUFwoR3d0g_XFeflmKouIrWHSSBrWZNsE1SHeepCWDxdH1PucjGlyTzm_U-DtSynqxaI780X72xTUF0kX4ND9IZZL9zEzCRRieoTYu93zuVYBbxZbm84aSEn4jTC_iiZzNlYO21utIongDUuP3MiJB1x4g2BjAi-E9Cvec7hdEqQe0B6ipTUg&q-sign-algorithm=sha1&q-ak=AKIDx0q6-e8XcN1zd5GPHfiLg9HS50q-mojLOv0XMcShRWclbfgwCe893KheHsQkvMI2&q-sign-time=1690448187%3B1690455382&q-key-time=1690448187%3B1690455382&q-header-list=host&q-url-param-list=x-cos-security-token&q-signature=6ae5611027a8965f209577e560e0d90a417dc2ef)]
- 新项目需要设置如下几个选项:
-
输入产品的名字,例如:PDFViewer
-
选择并登录您要发布应用的苹果开发者账号。
-
输入组织的名称:(com.example.pdfviewer)
-
在面版上选择故事版
-
编程语言选择"Objective-C"
-
点击"Next"按钮
-
设置project的位置,然后点击创建
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OEUihjG6-1690448461861)(https://developer-private-1258344699.cos.ap-guangzhou.myqcloud.com/column/article/10679850/20230727-59e4b3f0.jpg?x-cos-security-token=BJdJsHEW9tRdV4U1c2UC8j4hz1AQDOiaf4da32f8919a94517467ce57d6293e84ELpcYO4-9LL7ugDY7fTqEz6HgKIR9E1tig4O2Hpa8ErIROWyBrsRqzGudlEyg002RH7qvCHahg5tnJEUbyE6tsLB7tThV4Yvjh7cHGsjzgBExgIXW_G2peaMnEm3QJkHrMcu40a7S46coZk-BSj7AGRuAYTRZM9fkYR8NpJ56g-m8z5XsAN6ixX5TW5v6Hi9KL9SdTCgnn00LbJstCtTtYHrPf-Hj8jZN_CNc-JBvcvfTeViJ5qI4Bovp6QLYQuTU7F0mv8veXIUzHcvicDF-jxLSMDb9PQ5QxOTFjM-t-NBTgfFZtjeQsYTVQEQwfE3WtN4VBpd34t3-7MzFTtKEKwVsNBf7_uNaBvLNdIR_3KKCBfy2aBRyEFjdwgfREd8m9UOc_56WUwD05yDC014wA&q-sign-algorithm=sha1&q-ak=AKIDZx89zje9_yf8xTTwuOooH-ipJK7t0694fEoNqh0LmIXoEeX3RUSdwoBYcKW9jya6&q-sign-time=1690448310%3B1690455505&q-key-time=1690448310%3B1690455505&q-header-list=host&q-url-param-list=x-cos-security-token&q-signature=4fc1f7bea6722715fa978559a2f96cf3c8bf33b6)]
添加ComPDFKit的SDK包
-
在ComPDFKit PDF SDK的安装包中找到ComPDFKit.xcframework。它包含了所有支持的架构的二进制文件。
-
打开新创建的iOS项目,并在右侧面板中选择General。然后找到Frameworks, Libraries, and Embedded Content部分,将ComPDFKit.xcframework直接拖放到该部分,并将Embed选项设置为Embed & Sign。
-
使用快捷键"Command_B"编译项目。如果没有报错,说明配置正确,您可以继续进行下一步。如果报告了一些错误,您需要检查错误的原因。如果您无法确定错误,可以联系我们的技术团队来解决问题
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RoEW9p2b-1690448461861)(https://developer-private-1258344699.cos.ap-guangzhou.myqcloud.com/column/article/10679850/20230727-13b47eaa.jpg?x-cos-security-token=BJdJsHEW9tRdV4U1c2UC8j4hz1AQDOia4510ee2f0b75adf0638ee2ff43d58be2ELpcYO4-9LL7ugDY7fTqE1DAu7so_hZ0d-KTMmMc8lrqP391U9YzIcudjry39U1uWLThzIfs8tSw2i0Nm9Vh5A6fJp3pkQWB8F6XOYhaKcPAxdWzcrkqeaoPY1ujghnhWLnXv4FkmKN7Hoe6qvIw-POOvu5o3x9WqYNSoLv4X-vlDowv623Y5N4kyjvXt23meXofzR4QU7V8ZqAPzjTLZh9HaWkHbe9WnhrU9yq2pkNtqbic6h0kjQlYXRZzUjptO5-G5i3M3PXIFS36di7g9LbMYl4evcRSJeYzBwKsKIgylmf_Vom_eoFdKhTYdJ3emUqUfE1v6yQhkv7BlnFJEAMGg2inzAGiZ0UdLeZPhPJQg8lW006myeSby4SBhQ-LbvNyPmo-SiuHcy6y7udiNA&q-sign-algorithm=sha1&q-ak=AKIDVUWFagSBfmdFsbkPHxU2L5M4LgEks9yAJ3GqWiifcRnTKEaO3lgwmHwtCh0vjKwz&q-sign-time=1690448341%3B1690455536&q-key-time=1690448341%3B1690455536&q-header-list=host&q-url-param-list=x-cos-security-token&q-signature=384f6e4c7385b8732a6471578cb3fdc5ba383eba)]
添加License Key
-
将头文件ComPDFKit/ComPDFKit.h 导入到AppDelegate中。
-
按照下面的代码,并在
didFinishLaunchingWithOptions
方法中调用CPDFKit setLicenseKey:@"LICENSE_KEY" secret:@"LICENSE_SECRET"
方法。您需要用您获得的许可证替换LICENSE_KEY和LICENSE_SECRET。
#import <ComPDFKit/ComPDFKit.h>@interface AppDelegate ()@end@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {// Override point for customization after application launch./*// Set your license key here. ComPDFKit is commercial software.// Each ComPDFKit license is bound to a specific app bundle id.// Notice: This is a demo project, presenting completed ComPDFKit functions.// The functions might be different based on the license you have purchased.// Please check the functions you chose work fine in this demo project.// BOOL tIsFeatureLocked = ![[CPDFKit sharedInstance] allowsFeature:CPDFKitFeatureSecurityWatermark];*/// [CPDFKit setLicenseKey:@"YOUR_LICENSE_KEY_GOES_HERE" secret:@"YOUR_LICENSE_SECRET_GOES_HERE"];[CPDFKit setLicenseKey:@"" secret:@""];NSString *tAnnotateAuther = CPDFKitShareConfig.annotationAuthor;NSLog(@"CPDFKit Annotation Author: \t %@", tAnnotateAuther);CPDFKitShareConfig.enableAnnotationNoRotate = YES;return YES;
}
编译并运行项目。如果控制台输出了"version information"(版本信息),则表示许可证已成功设置。否则,请查看本博客末尾的"故障排除"部分或检查控制台中的错误日志,以快速确定并解决问题。
展示pdf文档
准备一个测试的PDF文件,将其拖放到新创建的 pdfView 项目中。通过这种方式,您可以使用 NSBundle
加载和预览本地的PDF文档。下面的图片展示了将名为“Online5”的PDF文档导入项目的示例。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ErttdG0d-1690448461861)(https://developer-private-1258344699.cos.ap-guangzhou.myqcloud.com/column/article/10679850/20230727-76d5ff81.jpg?x-cos-security-token=BJdJsHEW9tRdV4U1c2UC8j4hz1AQDOia3815c88c47721e6bb71051e0f7f0424cELpcYO4-9LL7ugDY7fTqE0S-7mQ31RaKi320guAM036P5TiVFICTdzr7OAtAtPw6pRBAjRt_g7m5VgzngXz-oaB98vh5cRIvwLenm-_p-vDNR9IiOKw5d7h5wj1zzORwopu1nLxnnkjcodCu28Qo701G44Drr34uu9WrVPrToEnybcgX5o97x17L3QAWO32n7ETsg_Qaa2YfwftpDJheb4eM6tZTXWy6RjpOlVvcGi1CTjfXJ9EXwJvZxPSJ0na0UltepeN91dqAqMwNSUqQk-NtYM55Q-YQrHD0uAT101z9rogTjxftuIcmqKs-NQuvQTCZtQX4w3-rVaaAZPE-a6a7wh32gM9jiSq42NWSK-MS8w9ujs5z5n8tmi9WmDHyDFgI6kJablZ5zYb5rvagow&q-sign-algorithm=sha1&q-ak=AKID4FR2rFJa4bCi1CHaZ3tS-XWqFCDxhlPXTnJvR5koLimvxwQCDSJtMiYiOWbWXiYw&q-sign-time=1690448414%3B1690455609&q-key-time=1690448414%3B1690455609&q-header-list=host&q-url-param-list=x-cos-security-token&q-signature=8a71af0815150afd9bb0e7af3daf927196f430e5)]
- 准备一个测试的PDF文件,将其拖放到新创建的 pdfView 项目中。通过这种方式,您可以使用
NSBundle
加载和预览本地的PDF文档。下面的图片展示了将名为“Online5”的PDF文档导入项目的示例。
NSString *pdfPath= [bunle pathForResource:@"Online5" ofType:@"pdf"];NSURL *url = [NSURL fileURLWithPath:pdfPath];CPDFDocument *document = [[[CPDFDocument alloc] initWithURL:url] autorelease];CGRect rect = self.view.bounds;CPDFView *pdfView = [[[CPDFView alloc] initWithFrame:rect] autorelease];pdfView.document = document;
- 将创建的 CPDFView 添加到当前控制器的视图中。示例代码如下:
[self.view addSubview:pdfView];
- 连接您的设备或模拟器,并使用快捷键"Command_R"运行应用程序。PDF文件将被打开并显示在屏幕上。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hmnkTaQL-1690448461862)(https://developer-private-1258344699.cos.ap-guangzhou.myqcloud.com/column/article/10679850/20230727-e8c1f4d9.jpg?x-cos-security-token=5k37kcaEnQva7z6hqkSrfzpVKfj5daDaf611dd67a1df9daa077c5526e075f61c0NEaMxG3eQ9Su4KDqw4KiZJKiT5Hs-LhIdOHlhJLjL8XYGJcZPRH4l_GZ2d-TU28-fbWJO5meIoHCA_FYbOqD_-oh7o7lXSl4om2WGabqJo3F79rumC4R3aLLvO0XfgcyV7kFvWA8SRhyBPAJiyeJ3NGgmw7FcbuTgjr_Vb0PjMiWZiCjZIyJcVs4zu_c20PST-fI5iugwITLnhxpUew8C7oRp02LX9K_PcLz7yFcHe_fckD23sIFicJsmxnalSkMYUdFzn5v6s-W39tT5IumTmlI3gHwrqDrELZD-mkc3ZmKvxjSq8-RHHjr9cWsDuR9hVfsTlMBgQ7vV3y99d3olRyMKvFT1RRorXE766jFwMmI6dE-E2V-LPtJWufdG-Q9Xhh0OxszfoYetvHBvPu5w&q-sign-algorithm=sha1&q-ak=AKIDUP36ZIVKSCohmvCglJKaujA6Bbfm1iRfBuCMedA23wPRaLiCbxAAtws09Yg6ubqB&q-sign-time=1690448430%3B1690455625&q-key-time=1690448430%3B1690455625&q-header-list=host&q-url-param-list=x-cos-security-token&q-signature=fa6938fb2ff06e60331f0ef583db1d319920397c)]
- 如果无法显示PDF内容,请检查创建的NSURL和"CPDFDocument"对象是否为空,或者创建的"CPDFView"的大小是否为零。它们不应该为空。
如果文件路径中包含特殊字符,您的NSURL将会为nil。请使用以下代码进行处理。
[pdfPath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
如果创建的CPDFView
的大小为零,按照以下代码调整pdfview
的大小。
pdfview.frame = self.view.frame.bounds
所有代码如下所示:
NSString *pdfPath= [bunle pathForResource:@"Online5" ofType:@"pdf"];NSURL *url = [NSURL fileURLWithPath:pdfPath];CPDFDocument *document = [[[CPDFDocument alloc] initWithURL:url] autorelease];if (document.error && document.error.code != CPDFDocumentPasswordError) {return;}// Initialize a CPDFView object with the size of the entire screenCPDFView *pdfView = [[[CPDFView alloc] initWithFrame:self.view.bounds] autorelease];// Set the document to displaypdfView.document = document;// Add the pdfView to the root view[self.view addSubview:pdfView];
问题排查
-
位码
即使所有配置都正确,仍可能出现编译错误。首先,请检查是否禁用了位码(bitcode)。在较旧的Xcode版本(如Xcode 13)中,默认情况下可能启用了位码选项。为了运行应用程序,需要将其设置为“否”。
-
License(许可证)
如果出现许可设置错误,请确保“通用设置”中的身份(Bundle ID)设置与您联系我们以获取许可时提供的Bundle ID匹配。如果出现已过期的许可消息,请联系ComPDFKit团队以获取最新的许可和密钥。
-
PDF无法展示
请检查我们传入的路径是否需要特殊编码,或者我们传入的本地路径是否存在
-
其他问题
如果在集成我们的ComPDFKit PDF SDK for iOS时遇到其他问题,请随时联系ComPDFKit团队
相关文章:

使用ComPDFKit PDF SDK 构建iOS PDF阅读器
在当今以移动为先的世界中,为企业和开发人员创建一个iOS应用程序是必不可少的。随着对PDF文档处理需求的增加,使用ComPDFKit这个强大的PDF软件开发工具包(SDK)来构建iOS PDF阅读器和编辑器可以让最终用户轻松查看和编辑PDF文档。 …...

一套流程6个步骤,教你如何正确采购询价
采购询价(RFQ)是一种竞争性投标文件,用于邀请供应商或承包商就标准化或重复生产的产品或服务提交报价。 询价通常用于大批量/低价值项目,买方必须提供技术规格和商业要求,该文件有时也称为招标书或投标邀请书。询价流…...
git使用
常用命令 git init git库初始化,初始化后会在文件中出现一个.git的隐藏文件 git clone 从远程克隆仓库 git pull 从远程库中拉取 git commit 将暂存提交到本地仓库 git push 提交本地仓库到远程 git branch 查看当前分支 git branch <branchName> 切换分支 …...

SkyWalking链路追踪-搭建-spring-boot-cloud-单机环境 之《10 分钟快速搭建 SkyWalking 服务》
首先了解一下单机环境 第一步,搭建一个 Elasticsearch 服务。第二步,下载 SkyWalking 软件包。第三步,搭建一个 SkyWalking OAP 服务。第四步,启动一个 Spring Boot 应用,并配置 SkyWalking Agent。第五步,…...

Rabbit MQ整合springBoot
一、pom依赖二、消费端2.1、application.properties 配置文件2.2、消费端核心组件 三、生产端3.1、application.properties 配置文件2.2、生产者 MQ消息发送组件四、测试1、生产端控制台2、消费端控制台 一、pom依赖 <dependency><groupId>org.springframework.boo…...
Golang 中的 time 包详解(一):time.Time
在日常开发过程中,会频繁遇到对时间进行操作的场景,使用 Golang 中的 time 包可以很方便地实现对时间的相关操作。接下来的几篇文章会详细讲解 time 包,本文先讲解一下 time 包中的结构体 time.Time。 time.Time time.Time 类型用来表示一个…...

CMU 15-445 -- Database Recovery - 18
CMU 15-445 -- Database Recovery - 18 引言ARIESLog Sequence NumbersNormal ExecutionTransaction CommitTransaction AbortCompensation Log Records Non-fuzzy & fuzzy CheckpointsSlightly Better CheckpointsFuzzy Checkpoints ARIES - Recovery PhasesAnalysis Phas…...

HTTP Header定制,客户端使用Request,服务器端使用Response
在服务器端通过request.getHeaders()是无效的,只能使用response.getHeaders()。 Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType mediaType,Class selectedConverterType, ServerHttpRequest request, ServerHttpRespo…...
Vue 3编写的父子组件示例,包括传递数据和调用父组件方法
下面是一个使用Vue 3编写的父子组件示例,包括传递数据和调用父组件方法: ChildComponent.vue: <template><div><p>Child Component</p><p>Message: {{ message }}</p><button click"updateMes…...

[ 容器 ] Docker 的数据管理
目录 一、Docker 的数据管理1.1 数据卷2. 数据卷容器 二、 端口映射三、容器互联(使用centos镜像)四、Docker 镜像的创建1.基于现有镜像创建2.基于本地模板创建3.基于Dockerfile 创建3.1 联合文件系统(Unio…...

【环境配置】使用Docker搭建LAMP环境
这篇文章不是介绍DOCKER是什么,也不是阐述DOCKER的核心:镜像/容器和仓库之间的关系,它只是一篇让刚刚接触DOCKER的初学者,在没有完全了解DOCKER是什么之前,也能尽快的在Linux系统下面通过DOCKER来搭建一个LAMP环境,这是其一&#…...
MLIR (Multi-Level Intermediate Representation)
MLIR(Multi-Level Intermediate Representation)是一种多级中间表示的编译器基础架构,旨在提供通用的、可扩展的编译器基础设施。它最初由谷歌开发,并且现在已经成为一个开源项目,受到广泛关注和采用。 MLIR 的设计理…...

VR全景在酒店的发展状况如何?酒店该如何做营销?
现阶段,VR全景技术已经被酒店、民宿、旅游景区、房产楼盘、校园等行业所应用,每天都有不少人通过VR全景展示来了解酒店的设施环境,而酒店也可以借此机会,详细展示自身优势,更大范围吸引顾客。 VR酒店拥有真实、立体的全…...

Winform使用PictureBox控件显示图片并且自适应
一.首先我们只需要在项目文件中的/bin/Debug 下面创建一个文件夹保存你的照片。我这里文件夹名字叫Resources.。如图: 二. 然后我们把我们的照片放入Resources文件夹中即可。如图: 三.在构造器中添加picturebox控件。如图: 四.我们到初始化代…...

HTML中的焦点管理
前言 焦点作为页面交互中的重要一环,涉及到的知识点也比较多,有必要做一个统一的总结。 HTML 中的可获取焦点的元素 具有 href 属性的 HTMLAnchorElement/HTMLAreaElement非禁用态的 HTMLInputElement/HTMLSelectElement/HTMLTextAreaElement/HTMLBut…...

如何区分接口测试和功能测试
接口测试和功能测试的区别: 2023最新Jmeter接口测试从入门到精通(全套项目实战教程) 本文主要分为两个部分: 第一部分:主要从问题出发,引入接口测试的相关内容并与前端测试进行简单对比,总结两者…...
limit分页查询
controller层 ApiOperation("员工分页查询")GetMapping("/page")public Result<PageResult> page(EmployeePageQueryDTO employeePageQueryDTO){log.info("员工分页查询,参数为{}",employeePageQueryDTO);PageResult pageResul…...

mysql null 值查询不出来问题
最新遇到mysql null 值查询的问题,当查询这个字段有的为null 有的不为null 该字段查询条件查询为null值得将不显示。 举例 新建表 test_user name和phone得值默认值为null 我们添加一些数据 查询下name 不是张三得数据 select * from test_user where name !张…...

面试之CurrentHashMap的底层原理
首先回答HashMap的底层原理? HashMap是数组链表组成。数字组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的。要将key 存储到(put)HashMap中,key类型实现必须计算hashcode方法,默认这个方法是对象的地址。接…...

Error in onLoad hook: “ReferenceError: plus is not defined“ found in
项目场景: 项目背景如下所示: 使用 HBuilder X 开发 项目, 调整页面时,直接运行到 浏览器查看页面设置效果,导致控制台出现下述报错信息 例如: 问题描述 遇到的问题如下所示: APP 中接收数据…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...

中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...

Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...