diff --git a/SDWebImagePDFCoder.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/SDWebImagePDFCoder.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000..18d9810
--- /dev/null
+++ b/SDWebImagePDFCoder.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/SDWebImagePDFCoder/Classes/SDImagePDFCoder.m b/SDWebImagePDFCoder/Classes/SDImagePDFCoder.m
index aeab260..5f8ae9f 100644
--- a/SDWebImagePDFCoder/Classes/SDImagePDFCoder.m
+++ b/SDWebImagePDFCoder/Classes/SDImagePDFCoder.m
@@ -8,6 +8,7 @@
#import "SDImagePDFCoder.h"
#import "SDWebImagePDFCoderDefine.h"
#import "objc/runtime.h"
+#import
#define SD_FOUR_CC(c1,c2,c3,c4) ((uint32_t)(((c4) << 24) | ((c3) << 16) | ((c2) << 8) | (c1)))
@@ -151,25 +152,48 @@ - (UIImage *)createVectorPDFWithData:(nonnull NSData *)data pageNumber:(NSUInteg
image = [[NSImage alloc] initWithSize:imageRep.size];
[image addRepresentation:imageRep];
#else
- CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data);
- if (!provider) {
+
+ PDFDocument *document = [[PDFDocument alloc]initWithData:data];
+ if (!document) {
return nil;
}
- CGPDFDocumentRef document = CGPDFDocumentCreateWithProvider(provider);
- CGDataProviderRelease(provider);
- if (!document) {
+ if (pageNumber >= document.pageCount) {
return nil;
}
-
- // `CGPDFDocumentGetPage` page number is 1-indexed.
- CGPDFPageRef page = CGPDFDocumentGetPage(document, pageNumber + 1);
+ PDFPage *page = [document pageAtIndex:pageNumber];
if (!page) {
- CGPDFDocumentRelease(document);
return nil;
}
- image = ((UIImage *(*)(id,SEL,CGPDFPageRef))[UIImage.class methodForSelector:SDImageWithCGPDFPageSEL])(UIImage.class, SDImageWithCGPDFPageSEL, page);
- CGPDFDocumentRelease(document);
+ CGPDFDocumentRef documentRef = document.documentRef;
+ if (!documentRef) {
+ return nil;
+ }
+
+ CGPDFPageRef pageRef = page.pageRef;
+ if (!pageRef) {
+ return nil;
+ }
+
+ CGPDFBox box = kCGPDFMediaBox;
+ CGRect rect = CGPDFPageGetBoxRect(pageRef, box);
+ CGAffineTransform transform = CGPDFPageGetDrawingTransform(pageRef, box, rect, 0, YES);
+
+ SDGraphicsBeginImageContextWithOptions(targetRect.size, NO, 0);
+ CGContextRef context = SDGraphicsGetCurrentContext();
+
+#if SD_UIKIT || SD_WATCH
+ // Core Graphics coordinate system use the bottom-left, UIKit use the flipped one
+ CGContextTranslateCTM(context, 0, rect.size.height);
+ CGContextScaleCTM(context, 1, -1);
+#endif
+
+ CGContextConcatCTM(context, transform);
+ [page drawWithBox:kPDFDisplayBoxMediaBox toContext:context];
+
+ image = SDGraphicsGetImageFromCurrentImageContext();
+ SDGraphicsEndImageContext();
+
#endif
return image;