diff --git a/API.md b/API.md index 22a0b6d8e..35b5e265d 100644 --- a/API.md +++ b/API.md @@ -224,6 +224,7 @@ pageNumber | int | the page to be converted; if the value does not refer to a va dpi | double | the output image resolution exportFormat | string | one of [`Config.ExportFormat`](./src/Config/Config.ts) constants filePath | string | local file path to pdf +transparent | boolean | (only relevant when exported as PNG) whether the background of the image is transparent or the color of the PDF page (typically white) Returns a Promise. @@ -232,7 +233,7 @@ Name | Type | Description resultImagePath | string | the temp path of the created image, user is responsible for clean up the cache ```js -RNPdftron.exportAsImage(1, 92, Config.ExportFormat.BMP, "/sdcard/Download/red.pdf").then((resultImagePath) => { +RNPdftron.exportAsImage(1, 92, Config.ExportFormat.BMP, "/sdcard/Download/red.pdf", false).then((resultImagePath) => { console.log('export', resultImagePath); }); ``` @@ -3719,6 +3720,7 @@ Name | Type | Description pageNumber | int | the page to be converted; if the value does not refer to a valid page number, the file path will be undefined dpi | double | the output image resolution exportFormat | string | one of the [`Config.ExportFormat`](./src/Config/Config.ts) constants +transparent | boolean | (only relevant when exported as PNG) whether the background of the image is transparent or opaque white Returns a Promise. @@ -3727,7 +3729,7 @@ Name | Type | Description path | string | the temp path of the created image, user is responsible for clean up the cache ```js -this._viewer.exportToImage(1, 92, Config.ExportFormat.BMP).then((path) => { +this._viewer.exportAsImage(1, 92, Config.ExportFormat.BMP, false).then((path) => { console.log('export', path); }); ``` diff --git a/android/src/main/java/com/pdftron/reactnative/modules/DocumentViewModule.java b/android/src/main/java/com/pdftron/reactnative/modules/DocumentViewModule.java index 19b1dcac3..f4df522ff 100644 --- a/android/src/main/java/com/pdftron/reactnative/modules/DocumentViewModule.java +++ b/android/src/main/java/com/pdftron/reactnative/modules/DocumentViewModule.java @@ -1146,9 +1146,9 @@ public void run() { } @ReactMethod - public void exportAsImage(final int tag, int pageNumber, double dpi, String exportFormat, final Promise promise) { + public void exportAsImage(final int tag, int pageNumber, double dpi, String exportFormat, boolean transparent, final Promise promise) { try { - String result = mDocumentViewInstance.exportAsImage(tag, pageNumber, dpi, exportFormat); + String result = mDocumentViewInstance.exportAsImage(tag, pageNumber, dpi, exportFormat, transparent); promise.resolve(result); } catch (Exception ex) { promise.reject(ex); diff --git a/android/src/main/java/com/pdftron/reactnative/modules/RNPdftronModule.java b/android/src/main/java/com/pdftron/reactnative/modules/RNPdftronModule.java index fd944b6c5..ef390d4aa 100644 --- a/android/src/main/java/com/pdftron/reactnative/modules/RNPdftronModule.java +++ b/android/src/main/java/com/pdftron/reactnative/modules/RNPdftronModule.java @@ -203,11 +203,11 @@ public void pdfFromOfficeTemplate(final String docxPath, final ReadableMap json, } @ReactMethod - public void exportAsImage(int pageNumber, double dpi, String exportFormat, final String filePath, final Promise promise) { + public void exportAsImage(int pageNumber, double dpi, String exportFormat, final String filePath, boolean transparent, final Promise promise) { try { PDFDoc doc = new PDFDoc(filePath); doc.lockRead(); - String imagePath = ReactUtils.exportAsImageHelper(doc, pageNumber, dpi, exportFormat); + String imagePath = ReactUtils.exportAsImageHelper(doc, pageNumber, dpi, exportFormat, transparent); doc.unlockRead(); promise.resolve(imagePath); } catch (Exception e) { diff --git a/android/src/main/java/com/pdftron/reactnative/utils/ReactUtils.java b/android/src/main/java/com/pdftron/reactnative/utils/ReactUtils.java index f8784ea99..2c78d89c3 100644 --- a/android/src/main/java/com/pdftron/reactnative/utils/ReactUtils.java +++ b/android/src/main/java/com/pdftron/reactnative/utils/ReactUtils.java @@ -139,11 +139,12 @@ public static JSONArray convertArrayToJson(ReadableArray readableArray) throws J return array; } - public static String exportAsImageHelper(PDFDoc doc, int pageNumber, double dpi, String exportFormat) { + public static String exportAsImageHelper(PDFDoc doc, int pageNumber, double dpi, String exportFormat, boolean transparent) { PDFDraw draw = null; try { draw = new PDFDraw(); draw.setDPI(dpi); + draw.setPageTransparent(transparent); if (pageNumber <= doc.getPageCount() && pageNumber >= 1) { Page pg = doc.getPage(pageNumber); String ext = "png"; diff --git a/android/src/main/java/com/pdftron/reactnative/viewmanagers/DocumentViewViewManager.java b/android/src/main/java/com/pdftron/reactnative/viewmanagers/DocumentViewViewManager.java index a04242605..f09a2f1d5 100644 --- a/android/src/main/java/com/pdftron/reactnative/viewmanagers/DocumentViewViewManager.java +++ b/android/src/main/java/com/pdftron/reactnative/viewmanagers/DocumentViewViewManager.java @@ -1216,10 +1216,10 @@ public void selectAll(int tag) throws PDFNetException { } } - public String exportAsImage(final int tag, int pageNumber, double dpi, String exportFormat) throws PDFNetException { + public String exportAsImage(final int tag, int pageNumber, double dpi, String exportFormat, boolean transparent) throws PDFNetException { DocumentView documentView = mDocumentViews.get(tag); if (documentView != null) { - return documentView.exportAsImage(pageNumber, dpi, exportFormat); + return documentView.exportAsImage(pageNumber, dpi, exportFormat, transparent); } else { throw new PDFNetException("", 0L, getName(), "exportAsImage", "Unable to find DocumentView."); } diff --git a/android/src/main/java/com/pdftron/reactnative/views/DocumentView.java b/android/src/main/java/com/pdftron/reactnative/views/DocumentView.java index 8cb97a435..660e4687a 100644 --- a/android/src/main/java/com/pdftron/reactnative/views/DocumentView.java +++ b/android/src/main/java/com/pdftron/reactnative/views/DocumentView.java @@ -4545,14 +4545,14 @@ public void selectAll() { } } - public String exportAsImage(int pageNumber, double dpi, String exportFormat) { + public String exportAsImage(int pageNumber, double dpi, String exportFormat, boolean transparent) { PDFViewCtrl pdfViewCtrl = getPdfViewCtrl(); if (pdfViewCtrl != null) { boolean shouldUnlockRead = false; try { pdfViewCtrl.docLockRead(); shouldUnlockRead = true; - return ReactUtils.exportAsImageHelper(pdfViewCtrl.getDoc(), pageNumber, dpi, exportFormat); + return ReactUtils.exportAsImageHelper(pdfViewCtrl.getDoc(), pageNumber, dpi, exportFormat, transparent); } catch (Exception ex) { throw new RuntimeException(ex); } finally { diff --git a/index.ts b/index.ts index 9e6303fc2..186ab9664 100644 --- a/index.ts +++ b/index.ts @@ -15,7 +15,7 @@ interface RNPdftron { pdfFromOffice(docxPath: string, options: {applyPageBreaksToSheet?: boolean, displayChangeTracking?: boolean, excelDefaultCellBorderWidth?: number, excelMaxAllowedCellCount?: number, locale?: string}) : Promise; pdfFromOfficeTemplate(docxPath: string, json: object) : Promise; - exportAsImage(pageNumber: number, dpi: number, exportFormat: Config.ExportFormat, filePath: string) : Promise; + exportAsImage(pageNumber: number, dpi: number, exportFormat: Config.ExportFormat, filePath: string, transparent: boolean) : Promise; clearSavedViewerState() : Promise; } diff --git a/ios/RNPdftron.h b/ios/RNPdftron.h index 081e8025b..73a98bd74 100644 --- a/ios/RNPdftron.h +++ b/ios/RNPdftron.h @@ -8,7 +8,7 @@ @class PTPDFDoc; @interface RNPdftron : NSObject -+(NSString*)exportAsImageHelper:(PTPDFDoc*)doc pageNumber:(int)pageNumber dpi:(int)dpi exportFormat:(NSString*)imageFormat; ++(NSString*)exportAsImageHelper:(PTPDFDoc*)doc pageNumber:(int)pageNumber dpi:(int)dpi exportFormat:(NSString*)imageFormat transparent:(BOOL)transparent; @end diff --git a/ios/RNPdftron.m b/ios/RNPdftron.m index b2ebf80d9..a66c792fb 100644 --- a/ios/RNPdftron.m +++ b/ios/RNPdftron.m @@ -200,11 +200,17 @@ - (void)setPassword:(NSString *)password onPDFDoc:(PTPDFDoc *)pdfDoc } } -RCT_EXPORT_METHOD(exportAsImage:(int)pageNumber dpi:(int)dpi exportFormat:(NSString*)exportFormat filePath:(NSString*)filePath resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) +RCT_EXPORT_METHOD(exportAsImage:(int)pageNumber + dpi:(int)dpi + exportFormat:(NSString*)exportFormat + filePath:(NSString*)filePath + transparent:(BOOL)transparent + resolver:(RCTPromiseResolveBlock)resolve + rejecter:(RCTPromiseRejectBlock)reject) { @try { PTPDFDoc * doc = [[PTPDFDoc alloc] initWithFilepath:filePath]; - NSString * resultImagePath = [RNPdftron exportAsImageHelper:doc pageNumber:pageNumber dpi:dpi exportFormat:exportFormat]; + NSString * resultImagePath = [RNPdftron exportAsImageHelper:doc pageNumber:pageNumber dpi:dpi exportFormat:exportFormat transparent:transparent]; resolve(resultImagePath); } @@ -223,7 +229,7 @@ - (NSError *)errorFromException:(NSException *)exception }]; } -+(NSString*)exportAsImageHelper:(PTPDFDoc*)doc pageNumber:(int)pageNumber dpi:(int)dpi exportFormat:(NSString*)exportFormat ++(NSString*)exportAsImageHelper:(PTPDFDoc*)doc pageNumber:(int)pageNumber dpi:(int)dpi exportFormat:(NSString*)exportFormat transparent:(BOOL)transparent { NSString * resultImagePath = nil; BOOL shouldUnlock = NO; @@ -233,6 +239,7 @@ +(NSString*)exportAsImageHelper:(PTPDFDoc*)doc pageNumber:(int)pageNumber dpi:(i if (pageNumber <= [doc GetPageCount] && pageNumber >= 1) { PTPDFDraw *draw = [[PTPDFDraw alloc] initWithDpi:dpi]; + [draw SetPageTransparent:transparent]; NSString* tempDir = NSTemporaryDirectory(); NSString* fileName = [NSUUID UUID].UUIDString; resultImagePath = [tempDir stringByAppendingPathComponent:fileName]; diff --git a/ios/RNTPTDocumentView.h b/ios/RNTPTDocumentView.h index 8cdce3749..b16170aab 100644 --- a/ios/RNTPTDocumentView.h +++ b/ios/RNTPTDocumentView.h @@ -542,7 +542,7 @@ static NSString * const PTSignaturesManager_signatureDirectory = @"PTSignaturesM - (NSMutableArray *)getAllFieldsForDocumentViewTag:(int)pageNumber; -- (NSString *)exportAsImage:(int)pageNumber dpi:(int)dpi exportFormat:(NSString*)exportFormat; +- (NSString *)exportAsImage:(int)pageNumber dpi:(int)dpi exportFormat:(NSString*)exportFormat transparent:(BOOL)transparent; - (nullable NSString *)exportAnnotationsWithOptions:(NSDictionary *)options; diff --git a/ios/RNTPTDocumentView.m b/ios/RNTPTDocumentView.m index 77d446628..853c577c4 100644 --- a/ios/RNTPTDocumentView.m +++ b/ios/RNTPTDocumentView.m @@ -4830,10 +4830,10 @@ - (NSString *) getDocumentPath { #pragma mark - Export as image -- (NSString *)exportAsImage:(int)pageNumber dpi:(int)dpi exportFormat:(NSString*)exportFormat +- (NSString *)exportAsImage:(int)pageNumber dpi:(int)dpi exportFormat:(NSString*)exportFormat transparent:(BOOL)transparent { PTPDFDoc * doc = [self.currentDocumentViewController.pdfViewCtrl GetDoc]; - return [RNPdftron exportAsImageHelper:doc pageNumber:pageNumber dpi:dpi exportFormat:exportFormat]; + return [RNPdftron exportAsImageHelper:doc pageNumber:pageNumber dpi:dpi exportFormat:exportFormat transparent:transparent]; } #pragma mark - Tabs diff --git a/ios/RNTPTDocumentViewManager.h b/ios/RNTPTDocumentViewManager.h index 875f3ae04..992c4c408 100644 --- a/ios/RNTPTDocumentViewManager.h +++ b/ios/RNTPTDocumentViewManager.h @@ -19,7 +19,7 @@ - (NSString *)getDocumentPathForDocumentViewTag:(NSNumber *)tag; -- (NSString*) exportAsImageForDocumentViewTag:(NSNumber*)tag pageNumber:(int)pageNumber dpi:(int)dpi exportFormat:(NSString*)exportFormat; +- (NSString*) exportAsImageForDocumentViewTag:(NSNumber*)tag pageNumber:(int)pageNumber dpi:(int)dpi exportFormat:(NSString*)exportFormat transparent:(BOOL)transparent; - (int)getPageCountForDocumentViewTag:(NSNumber *)tag; diff --git a/ios/RNTPTDocumentViewManager.m b/ios/RNTPTDocumentViewManager.m index ba059749d..1d2c5dd2f 100644 --- a/ios/RNTPTDocumentViewManager.m +++ b/ios/RNTPTDocumentViewManager.m @@ -998,11 +998,11 @@ - (NSString *)getDocumentPathForDocumentViewTag:(NSNumber *)tag } } -- (NSString *)exportAsImageForDocumentViewTag:(NSNumber *)tag pageNumber:(int)pageNumber dpi:(int)dpi exportFormat:(NSString*)exportFormat +- (NSString *)exportAsImageForDocumentViewTag:(NSNumber *)tag pageNumber:(int)pageNumber dpi:(int)dpi exportFormat:(NSString*)exportFormat transparent:(BOOL)transparent { RNTPTDocumentView *documentView = self.documentViews[tag]; if (documentView) { - return [documentView exportAsImage:pageNumber dpi:dpi exportFormat:exportFormat]; + return [documentView exportAsImage:pageNumber dpi:dpi exportFormat:exportFormat transparent:transparent]; } else { @throw [NSException exceptionWithName:NSInvalidArgumentException reason:@"Unable to find DocumentView for tag" userInfo:nil]; return nil; diff --git a/ios/RNTPTDocumentViewModule.m b/ios/RNTPTDocumentViewModule.m index b90c17c65..048cff4a8 100644 --- a/ios/RNTPTDocumentViewModule.m +++ b/ios/RNTPTDocumentViewModule.m @@ -96,11 +96,12 @@ - (NSError *)errorFromException:(NSException *)exception pageNumber:(int)pageNumber dpi:(int)dpi exportFormat:(NSString*)exportFormat + transparent:(BOOL)transparent resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { @try { - NSString *path = [[self documentViewManager] exportAsImageForDocumentViewTag:tag pageNumber:pageNumber dpi:dpi exportFormat:exportFormat]; + NSString *path = [[self documentViewManager] exportAsImageForDocumentViewTag:tag pageNumber:pageNumber dpi:dpi exportFormat:exportFormat transparent:transparent]; resolve(path); } @catch (NSException *exception) { diff --git a/lib/src/DocumentView/DocumentView.js b/lib/src/DocumentView/DocumentView.js index e789074af..094814cd8 100644 --- a/lib/src/DocumentView/DocumentView.js +++ b/lib/src/DocumentView/DocumentView.js @@ -963,10 +963,10 @@ export class DocumentView extends PureComponent { } return Promise.resolve(); }; - exportAsImage = (pageNumber, dpi, exportFormat) => { + exportAsImage = (pageNumber, dpi, exportFormat, transparent = false) => { const tag = findNodeHandle(this._viewerRef); if (tag != null) { - return DocumentViewManager.exportAsImage(tag, pageNumber, dpi, exportFormat); + return DocumentViewManager.exportAsImage(tag, pageNumber, dpi, exportFormat, transparent); } return Promise.resolve(); }; diff --git a/package.json b/package.json index a0a0214f7..4ca045f44 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "react-native-pdftron", "title": "React Native Pdftron", - "version": "3.0.2-beta.98", + "version": "3.0.2-beta.99", "description": "React Native Pdftron", "main": "./lib/index.js", "typings": "index.ts", diff --git a/src/DocumentView/DocumentView.tsx b/src/DocumentView/DocumentView.tsx index 73e46078b..5b6da2c74 100644 --- a/src/DocumentView/DocumentView.tsx +++ b/src/DocumentView/DocumentView.tsx @@ -1047,10 +1047,10 @@ export class DocumentView extends PureComponent { return Promise.resolve(); } - exportAsImage = (pageNumber: number, dpi: number, exportFormat: Config.ExportFormat): Promise => { + exportAsImage = (pageNumber: number, dpi: number, exportFormat: Config.ExportFormat, transparent: boolean = false): Promise => { const tag = findNodeHandle(this._viewerRef); if (tag != null) { - return DocumentViewManager.exportAsImage(tag, pageNumber, dpi, exportFormat); + return DocumentViewManager.exportAsImage(tag, pageNumber, dpi, exportFormat, transparent); } return Promise.resolve(); }