在 iOS 基于 cordova 的应用程序中查看 PDF 文档的插件
A Plugin to view PDF document in iOS cordova based application
请推荐一个可以在 iOS 基于 Cordova 的应用程序中查看 PDF 的工作插件。
I have tried many of PDF related plugins:
https://github.com/siegfriedbolz/cordova-plugin-file-opener2.git
https://github.com/RandyMcMillan/PDFViewer
but of no use..My application stopped at loading.
Lastly with I have tried with pebois/phonegap-plugin-PDFViewer:
I have installed using :
"cordova plugin add com.lesfrancschatons.cordova.plugins.pdfreader"
In index.html:
function onDeviceReady()
{
PDFViewer.open("file://sample.pdf","sample.pdf", function (msg) {
console.log(msg);//
});
}
//error on pdfviewer.open method
谁能告诉我上面的方法有什么问题。
我们如何提供 sample.pdf 的路径(希望我给出的路径有误)
或者 iOS Cordova
的任何 PDF 插件
我总是使用我制作的 "homemade" 插件;它通过单个 GET.
获取特定 URL 上的 PDF
PDFUtilities.m
#import "PDFUtilities.h"
@interface PDFUtilities()
@property (strong, nonatomic) UIDocumentInteractionController *documentInteractionController;
@end
@implementation PDFUtilities
- (void)viewPdf:(CDVInvokedUrlCommand*)command
{
if (command.arguments[0] == (id)[NSNull null])
{
[self.commandDelegate sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR] callbackId:command.callbackId];
return;
}
NSString *url = command.arguments[0];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND,(unsigned long)NULL), ^(void)
{
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *file = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"PDF.pdf"]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:url]];
[request setHTTPMethod:@"GET"];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
{
NSLog(@"pdf downloaded, opening...");
NSData *pdf = data;
CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)pdf);
CGPDFDocumentRef document = CGPDFDocumentCreateWithProvider(provider);
if (document == nil) {
// error
}
else
{
NSURL *localURL = [NSURL fileURLWithPath:file];
[pdf writeToFile:file options:NSDataWritingAtomic error:&error];
self.documentInteractionController = [UIDocumentInteractionController interactionControllerWithURL:localURL];
[self.documentInteractionController setDelegate:self];
[self.documentInteractionController presentPreviewAnimated:NO];
}
CGDataProviderRelease(provider);
CGPDFDocumentRelease(document);
}];
});
[self.commandDelegate sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_OK] callbackId:command.callbackId];
}
- (UIViewController*) documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController *)controller
{
return [[[[UIApplication sharedApplication] delegate] window] rootViewController];
}
PDFUtilities.h
#import <Cordova/CDVPlugin.h>
@interface PDFUtilities : CDVPlugin <UIDocumentInteractionControllerDelegate>
- (void)viewPdf:(CDVInvokedUrlCommand*)command;
@end
记得在你的config.xml
中添加
<feature name="PDFUtilities">
<param name="ios-package" value="PDFUtilities" />
</feature>
您可以像这样在 Javascript 文件上调用插件方法:
cordova.exec(
function(){},
function(){},
'PDFUtilities',
'viewPdf',
[urlpdf]
);
请推荐一个可以在 iOS 基于 Cordova 的应用程序中查看 PDF 的工作插件。
I have tried many of PDF related plugins:
https://github.com/siegfriedbolz/cordova-plugin-file-opener2.git
https://github.com/RandyMcMillan/PDFViewer
but of no use..My application stopped at loading.
Lastly with I have tried with pebois/phonegap-plugin-PDFViewer:
I have installed using :
"cordova plugin add com.lesfrancschatons.cordova.plugins.pdfreader"
In index.html:
function onDeviceReady()
{
PDFViewer.open("file://sample.pdf","sample.pdf", function (msg) {
console.log(msg);//
});
}
//error on pdfviewer.open method
谁能告诉我上面的方法有什么问题。
我们如何提供 sample.pdf 的路径(希望我给出的路径有误)
或者 iOS Cordova
的任何 PDF 插件
我总是使用我制作的 "homemade" 插件;它通过单个 GET.
获取特定 URL 上的 PDFPDFUtilities.m
#import "PDFUtilities.h"
@interface PDFUtilities()
@property (strong, nonatomic) UIDocumentInteractionController *documentInteractionController;
@end
@implementation PDFUtilities
- (void)viewPdf:(CDVInvokedUrlCommand*)command
{
if (command.arguments[0] == (id)[NSNull null])
{
[self.commandDelegate sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR] callbackId:command.callbackId];
return;
}
NSString *url = command.arguments[0];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND,(unsigned long)NULL), ^(void)
{
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *file = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"PDF.pdf"]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:url]];
[request setHTTPMethod:@"GET"];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
{
NSLog(@"pdf downloaded, opening...");
NSData *pdf = data;
CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)pdf);
CGPDFDocumentRef document = CGPDFDocumentCreateWithProvider(provider);
if (document == nil) {
// error
}
else
{
NSURL *localURL = [NSURL fileURLWithPath:file];
[pdf writeToFile:file options:NSDataWritingAtomic error:&error];
self.documentInteractionController = [UIDocumentInteractionController interactionControllerWithURL:localURL];
[self.documentInteractionController setDelegate:self];
[self.documentInteractionController presentPreviewAnimated:NO];
}
CGDataProviderRelease(provider);
CGPDFDocumentRelease(document);
}];
});
[self.commandDelegate sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_OK] callbackId:command.callbackId];
}
- (UIViewController*) documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController *)controller
{
return [[[[UIApplication sharedApplication] delegate] window] rootViewController];
}
PDFUtilities.h
#import <Cordova/CDVPlugin.h>
@interface PDFUtilities : CDVPlugin <UIDocumentInteractionControllerDelegate>
- (void)viewPdf:(CDVInvokedUrlCommand*)command;
@end
记得在你的config.xml
中添加<feature name="PDFUtilities">
<param name="ios-package" value="PDFUtilities" />
</feature>
您可以像这样在 Javascript 文件上调用插件方法:
cordova.exec(
function(){},
function(){},
'PDFUtilities',
'viewPdf',
[urlpdf]
);