@react-native-ohos/react-native-pdf 6.8.0-rc.1 → 6.8.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/harmony/pdfview/oh-package.json5 +1 -1
  2. package/harmony/pdfview/src/main/ets/components/mainpage/RTNPdfView.ets +1 -0
  3. package/harmony/pdfview.har +0 -0
  4. package/package.json +1 -1
  5. package/harmony/pdfview/build/default/cache/default/default@HarCompileArkTS/esmodule/.ts_checker_cache +0 -4426
  6. package/harmony/pdfview/build/default/cache/default/default@HarCompileArkTS/esmodule/.tsbuildinfo +0 -1
  7. package/harmony/pdfview/build/default/cache/default/default@HarCompileArkTS/esmodule/.tsbuildinfo.linter +0 -1
  8. package/harmony/pdfview/build/default/cache/default/default@HarCompileArkTS/esmodule/compileInfo.json +0 -1
  9. package/harmony/pdfview/build/default/cache/default/default@HarCompileArkTS/esmodule/debug/compiler.cache/modules/Index.ets-5eef5c87aa27b233ef53cb620fed1f5d.msgpack +0 -0
  10. package/harmony/pdfview/build/default/cache/default/default@HarCompileArkTS/esmodule/debug/compiler.cache/modules/Logger.ets-c555840d2a4b574cf40c57fc8b91bf97.msgpack +0 -0
  11. package/harmony/pdfview/build/default/cache/default/default@HarCompileArkTS/esmodule/debug/compiler.cache/modules/RTNPdfView.ets-030d7d4eb9347bd497689e1ef58937f0.msgpack +0 -1711
  12. package/harmony/pdfview/build/default/cache/default/default@HarCompileArkTS/esmodule/debug/compiler.cache/modules/types.ts-c405c8f7d848bd5a548ec85c97e839bd.msgpack +0 -0
  13. package/harmony/pdfview/build/default/cache/default/default@HarCompileArkTS/esmodule/debug/compiler.cache/other/pkgName2SourceRoots.msgpack +0 -1
  14. package/harmony/pdfview/build/default/cache/default/default@HarCompileArkTS/esmodule/debug/compiler.cache/plugins/plugins.msgpack +0 -0
  15. package/harmony/pdfview/build/default/cache/default/default@HarCompileArkTS/esmodule/debug/dep_info.json +0 -1
  16. package/harmony/pdfview/build/default/cache/default/default@PackageHar/BuildProfile.ets +0 -17
  17. package/harmony/pdfview/build/default/cache/default/default@PackageHar/Index.ets +0 -7
  18. package/harmony/pdfview/build/default/cache/default/default@PackageHar/ResourceTable.txt +0 -1
  19. package/harmony/pdfview/build/default/cache/default/default@PackageHar/build-profile.json5 +0 -28
  20. package/harmony/pdfview/build/default/cache/default/default@PackageHar/consumer-rules.txt +0 -0
  21. package/harmony/pdfview/build/default/cache/default/default@PackageHar/hvigorfile.ts +0 -6
  22. package/harmony/pdfview/build/default/cache/default/default@PackageHar/obfuscation-rules.txt +0 -18
  23. package/harmony/pdfview/build/default/cache/default/default@PackageHar/oh-package-lock.json5 +0 -21
  24. package/harmony/pdfview/build/default/cache/default/default@PackageHar/oh-package.json5 +0 -1
  25. package/harmony/pdfview/build/default/cache/default/default@PackageHar/src/main/cpp/CMakeLists.txt +0 -8
  26. package/harmony/pdfview/build/default/cache/default/default@PackageHar/src/main/cpp/ComponentDescriptors.h +0 -36
  27. package/harmony/pdfview/build/default/cache/default/default@PackageHar/src/main/cpp/EventEmitters.cpp +0 -39
  28. package/harmony/pdfview/build/default/cache/default/default@PackageHar/src/main/cpp/EventEmitters.h +0 -47
  29. package/harmony/pdfview/build/default/cache/default/default@PackageHar/src/main/cpp/PdfEventEmitRequestHandler.h +0 -50
  30. package/harmony/pdfview/build/default/cache/default/default@PackageHar/src/main/cpp/PdfViewJSIBinder.h +0 -71
  31. package/harmony/pdfview/build/default/cache/default/default@PackageHar/src/main/cpp/PdfViewPackage.h +0 -55
  32. package/harmony/pdfview/build/default/cache/default/default@PackageHar/src/main/cpp/Props.cpp +0 -58
  33. package/harmony/pdfview/build/default/cache/default/default@PackageHar/src/main/cpp/Props.h +0 -61
  34. package/harmony/pdfview/build/default/cache/default/default@PackageHar/src/main/cpp/RTNPdfViewSpecsJSI-generated.cpp +0 -34
  35. package/harmony/pdfview/build/default/cache/default/default@PackageHar/src/main/cpp/RTNPdfViewSpecsJSI.h +0 -36
  36. package/harmony/pdfview/build/default/cache/default/default@PackageHar/src/main/cpp/ShadowNodes.cpp +0 -33
  37. package/harmony/pdfview/build/default/cache/default/default@PackageHar/src/main/cpp/ShadowNodes.h +0 -47
  38. package/harmony/pdfview/build/default/cache/default/default@PackageHar/src/main/cpp/States.cpp +0 -33
  39. package/harmony/pdfview/build/default/cache/default/default@PackageHar/src/main/cpp/States.h +0 -52
  40. package/harmony/pdfview/build/default/cache/default/default@PackageHar/src/main/ets/Logger.ets +0 -64
  41. package/harmony/pdfview/build/default/cache/default/default@PackageHar/src/main/ets/components/mainpage/RTNPdfView.ets +0 -513
  42. package/harmony/pdfview/build/default/cache/default/default@PackageHar/src/main/ets/components/mainpage/types.ts +0 -15
  43. package/harmony/pdfview/build/default/cache/default/default@PackageHar/src/main/module.json +0 -32
  44. package/harmony/pdfview/build/default/cache/default/default@PackageHar/src/main/resources/base/element/string.json +0 -8
  45. package/harmony/pdfview/build/default/cache/default/default@PackageHar/src/main/resources/en_US/element/string.json +0 -8
  46. package/harmony/pdfview/build/default/cache/default/default@PackageHar/src/main/resources/zh_CN/element/string.json +0 -8
  47. package/harmony/pdfview/build/default/generated/pm/default/oh-package.json5 +0 -1
  48. package/harmony/pdfview/build/default/generated/r/default/ResourceTable.h +0 -24
  49. package/harmony/pdfview/build/default/intermediates/loader/default/loader.json +0 -25
  50. package/harmony/pdfview/build/default/intermediates/merge_profile/default/module.json +0 -29
  51. package/harmony/pdfview/build/default/intermediates/patch/default/base_native_libs.json +0 -1
  52. package/harmony/pdfview/build/default/intermediates/process_profile/default/module.json +0 -32
  53. package/harmony/pdfview/build/default/intermediates/res/default/ResourceTable.txt +0 -1
  54. package/harmony/pdfview/build/default/intermediates/res/default/ark_module.json +0 -1
  55. package/harmony/pdfview/build/default/intermediates/res/default/ids_map/id_defined.json +0 -7
  56. package/harmony/pdfview/build/default/intermediates/res/default/module.json +0 -28
  57. package/harmony/pdfview/build/default/intermediates/res/default/opt-compression.json +0 -1
  58. package/harmony/pdfview/build/default/intermediates/res/default/resConfig.json +0 -1
  59. package/harmony/pdfview/build/default/intermediates/res/default/resources/rawfile/rnoh.profdata +0 -0
  60. package/harmony/pdfview/build/default/intermediates/res/default/resources.index +0 -0
  61. package/harmony/pdfview/build/default/outputs/default/pdfview.har +0 -0
  62. package/harmony/pdfview/oh-package-lock.json5 +0 -21
@@ -1,513 +0,0 @@
1
- /*
2
- * MIT License
3
- *
4
- * Copyright (C) 2024 Huawei Device Co., Ltd.
5
- *
6
- * Permission is hereby granted, free of charge, to any person obtaining a copy
7
- * of this software and associated documentation files (the "Software"), to deal
8
- * in the Software without restriction, including without limitation the rights
9
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
- * copies of the Software, and to permit persons to whom the Software is
11
- * furnished to do so, subject to the following conditions:
12
- *
13
- * The above copyright notice and this permission notice shall be included in all
14
- * copies or substantial portions of the Software.
15
- *
16
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
- * SOFTWARE.
23
- */
24
-
25
- import { Descriptor, ComponentBuilderContext, ViewRawProps, ViewBaseProps } from '@rnoh/react-native-openharmony';
26
- import { RNOHContext, RNViewBase } from '@rnoh/react-native-openharmony';
27
- import { BusinessError } from '@kit.BasicServicesKit';
28
- import fs from '@ohos.file.fs';
29
- import request from '@ohos.request';
30
- import buffer from '@ohos.buffer';
31
- import cryptoFramework from '@ohos.security.cryptoFramework';
32
- import { pdfService, pdfViewManager, PdfView } from '@kit.PDFKit'
33
- import { common } from '@kit.AbilityKit';
34
- import { ON_PROGRESS_CHANGE } from './types';
35
- import Logger from '../../Logger';
36
-
37
- export const PDF_VIEW_TYPE: string = "RTNPdfView";
38
-
39
- export interface PdfViewState {}
40
-
41
- interface Headers {
42
- key: string;
43
- value: string;
44
- }
45
-
46
- interface Source {
47
- uri: string;
48
- headers?: Array<Headers>;
49
- cache?: boolean;
50
- cacheFileName?: string;
51
- expiration?: number;
52
- method?: string;
53
- };
54
-
55
- export interface PdfViewRawProps extends ViewRawProps {
56
- source: Source,
57
- path?: string,
58
- page?: number,
59
- scale?: number,
60
- minScale?: number,
61
- maxScale?: number,
62
- horizontal?: boolean,
63
- enablePaging?: boolean,
64
- enableRTL?: boolean,
65
- enableAnnotationRendering?: boolean,
66
- showsHorizontalScrollIndicator?: boolean,
67
- showsVerticalScrollIndicator?: boolean,
68
- scrollEnabled?: boolean,
69
- enableAntialiasing?: boolean,
70
- fitPolicy?: number,
71
- spacing?: number,
72
- password?: string,
73
- singlePage?: boolean,
74
- }
75
-
76
- export type PdfViewDescriptor = Descriptor<'RTNPdfView', ViewBaseProps, PdfViewState, PdfViewRawProps>
77
-
78
- @Component
79
- export struct RTNPdfView {
80
- ctx!: RNOHContext;
81
- tag: number = 0;
82
- @BuilderParam buildCustomComponent: (componentBuilderContext: ComponentBuilderContext) => void = this.emptyBuild;
83
- @State descriptor: PdfViewDescriptor = Object() as PdfViewDescriptor;
84
- @State pageIndex: number = 1;
85
- @State controllerStatus: boolean = false;
86
- @State pdfUrl: string = "";
87
- @State scrollEnabled: boolean = false;
88
- private unregisterDescriptorChangesListener?: () => void = undefined;
89
- private cleanupCommandCallback?: () => void = undefined;
90
- private pdfController: pdfViewManager.PdfController = new pdfViewManager.PdfController();
91
-
92
- @Builder
93
- emptyBuild(ctx: ComponentBuilderContext) {
94
- }
95
-
96
- async doLoadHttpDocument(path: string): Promise<void> {
97
- Logger.debug(`[RTNPdfView]: doLoadHttpDocument, path is ${path}`);
98
- try {
99
- const filePath: string = await this.downloadHttpFile(path);
100
- Logger.debug(`[RTNPdfView]: doLoadHttpDocument, filePath is ${filePath}`);
101
- this.doLoadLocalDocument(filePath, !this.descriptor.rawProps.source?.cache);
102
- } catch (e) {
103
- Logger.error(`[RTNPdfView]: fs accessSync: ${e}`);
104
- this.onError(`[RTNPdfView]: fs accessSync: ${e}`);
105
- }
106
- }
107
-
108
- doLoadLocalDocument(filePath: string, isDelOriginFile: boolean = true): void {
109
- let initPageIndex: number | undefined = this.descriptor.rawProps.page;
110
- let spacing: number = Number(this.descriptor.rawProps.spacing);
111
- let scale: number = Number(this.descriptor.rawProps.scale);
112
- let minScale: number | undefined = this.descriptor.rawProps.minScale;
113
- let maxScale: number | undefined = this.descriptor.rawProps.maxScale;
114
- let password: string | undefined = this.descriptor.rawProps.password;
115
- let fitPolicy: number | undefined = this.descriptor.rawProps.fitPolicy;
116
- // pdfView 初始 scale
117
- let systemInitScale = 0;
118
-
119
- Logger.debug(`[RTNPdfView]: doLoadLocalDocument, filePath is ${filePath}, isDelOriginFile is ${isDelOriginFile}`);
120
- const progressCallBack: (progress: number) => number = (progress: number) => {
121
- Logger.debug(`[RTNPdfView]: proress is ${(progress / 100).toFixed(2)}`);
122
- this.loadProgress(Number((progress / 100).toFixed(2)));
123
- return 0;
124
- };
125
-
126
- if (filePath) {
127
- this.pdfController.releaseDocument();
128
- const initPage = initPageIndex ? Math.max(initPageIndex - 1, 0) : 0
129
- this.pdfController.loadDocument(filePath, password, initPage, progressCallBack)
130
- .then((res: pdfService.ParseResult) => {
131
- switch (res) {
132
- case pdfService.ParseResult.PARSE_SUCCESS:
133
- this.pdfController.setPageSpacing(spacing, spacing); //由于rn侧值传递一个参数,故此处默认为连续滚动模式。设置上下面的间距。
134
- this.pdfController.setPageZoom(scale);
135
- const pageCount: number = this.pdfController.getPageCount();
136
- if (typeof fitPolicy === 'number') {
137
- if (fitPolicy === 0) {
138
- this.pdfController.setPageFit(pdfService.PageFit.FIT_WIDTH);
139
- } else if (fitPolicy === 1) {
140
- this.pdfController.setPageFit(pdfService.PageFit.FIT_HEIGHT);
141
- } else if (fitPolicy === 2) {
142
- this.pdfController.setPageFit(pdfService.PageFit.FIT_PAGE);
143
- }
144
- }
145
-
146
- // 注册监听器
147
- let tempScale: number | undefined = scale;
148
- this.pdfController.registerScaleChangedListener((currentScale: number) => {
149
- if (tempScale !== currentScale) {
150
- if (typeof maxScale === 'number' && currentScale > maxScale) {
151
- this.pdfController.setPageZoom(maxScale);
152
- } else if (typeof minScale === 'number' && currentScale < minScale) {
153
- // 问题:当minScale为1时,其他平台不缩放,但鸿蒙pdfView的初始scale小于1,在这里会强制赋值为1,这样就会放大产生滚动,引起和其他平台不一致的效果
154
- // 解决:systemInitScale为0时,currentScale表示pdfView初始scale,若小于minScale,则赋值给minScale,这样就不会强制赋值为1而产生缩放
155
- if (!systemInitScale && minScale === 1) {
156
- systemInitScale = currentScale
157
- minScale = systemInitScale;
158
- } else {
159
- this.pdfController.setPageZoom(minScale);
160
- }
161
- }
162
- tempScale = currentScale;
163
- }
164
- this.onScaleChanged(currentScale);
165
- });
166
- this.pdfController.registerPageChangedListener((pageIndex: number) => {
167
- this.onPageChanged((pageIndex + 1), pageCount);
168
- });
169
- this.pdfController.registerActionClickListener((redirectInfo: pdfViewManager.RedirectInfo) => {
170
- this.onPressLink(redirectInfo.content);
171
- });
172
- this.loadComplete(pageCount, filePath,);
173
- Logger.debug(`[RTNPdfView]: loadDocument success`);
174
- break;
175
- case pdfService.ParseResult.PARSE_ERROR_FILE:
176
- this.onError('loadDocument error: PARSE_ERROR_FILE');
177
- break;
178
- case pdfService.ParseResult.PARSE_ERROR_FORMAT:
179
- this.onError('loadDocument error: PARSE_ERROR_FORMAT');
180
- break;
181
- case pdfService.ParseResult.PARSE_ERROR_PASSWORD:
182
- this.onError('loadDocument error: PARSE_ERROR_PASSWORD');
183
- break;
184
- case pdfService.ParseResult.PARSE_ERROR_HANDLER:
185
- this.onError('loadDocument error: PARSE_ERROR_HANDLER');
186
- break;
187
- case pdfService.ParseResult.PARSE_ERROR_CERT:
188
- this.onError('loadDocument error: PARSE_ERROR_CERT');
189
- break;
190
- default:
191
- this.onError('loadDocument error: UNKNOWN');
192
- break;
193
- }
194
- })
195
- .catch((e: Error) => {
196
- Logger.error(`[RTNPdfView]: loadDocument error: ${e}`);
197
- this.onError(e.message);
198
- })
199
- .finally(() => {
200
- Logger.debug(`[RTNPdfView]: isDelOriginFile is : ${isDelOriginFile}`);
201
- if (isDelOriginFile) {
202
- fs.unlink(filePath).then(() => {
203
- Logger.debug(`[RTNPdfView]: originFile deleted`);
204
- })
205
- }
206
- })
207
- }
208
- }
209
-
210
- async downloadHttpFile(url: string): Promise<string> {
211
- let context = getContext(this) as common.UIAbilityContext;
212
- let filesDir = context.filesDir;
213
- let res: string = "";
214
- const hashFileName: string = await this.processFileName(url);
215
- const cacheFileName = await this.checkCache(hashFileName);
216
- if(this.descriptor.rawProps.source?.cache && !!cacheFileName){
217
- res = cacheFileName;
218
- }else{
219
- if (!!cacheFileName && fs.accessSync(cacheFileName)) {
220
- fs.unlinkSync(cacheFileName);
221
- }
222
- const fullFileName: string = filesDir + "/" + hashFileName + new Date().getTime() + '.pdf';
223
- res = await this.downloadAction(context, url, fullFileName, {}, 0);
224
- }
225
- Logger.info(`[RTNPdfView]:res: ${res}`);
226
- return res;
227
- }
228
- async downloadAction(
229
- context: Context,
230
- url: string,
231
- fullFileName: string,
232
- distHeaders: Record<string, Object>,
233
- redirectCount: number = 0,
234
- ): Promise<string> {
235
- if (redirectCount > 5) {
236
- throw new Error("Too many redirects");
237
- }
238
- return new Promise((resolve, reject) => {
239
- // 获取应用文件路径
240
- try {
241
- Logger.info(`[RTNPdfView]: start downloadFile`);
242
- const config: request.agent.Config = {
243
- action: request.agent.Action.DOWNLOAD,
244
- url,
245
- method: this.descriptor.rawProps.source.method ?? 'GET',
246
- headers: assignHeader(this.descriptor.rawProps.source?.headers || [], distHeaders|| {}),
247
- saveas: fullFileName,
248
- overwrite: true,
249
- mode: request.agent.Mode.FOREGROUND
250
- };
251
- request.agent.create(context, config).then((task: request.agent.Task) => {
252
- task.on('completed', () => {
253
- Logger.info(`[RTNPdfView]: finish downloadFile`);
254
- resolve(fullFileName);
255
- })
256
- task.on('failed', (progress: request.agent.Progress) => {
257
- console.info('[RTNPdfView]: downloadFile failed.', JSON.stringify(progress));
258
- });
259
- task.on('response', async (response: request.agent.HttpResponse) => {
260
- console.info('[RTNPdfView]: downloadFile response.', JSON.stringify(response));
261
- if (response.statusCode > 300 && response.statusCode < 400) {
262
- let redirectUrl: string = response.headers.get('location')?.toString() ?? '';
263
- let cookie: string = response.headers.get('set-cookie')?.toString() ?? '';
264
- task.off('progress');
265
- task.off('completed');
266
- task.off('response');
267
- task.stop();
268
- try {
269
- const result = await this.downloadAction(context, redirectUrl, fullFileName, { 'cookie': cookie }, redirectCount + 1);
270
-
271
- Logger.info(`[RTNPdfView]:result: ${result} -----count: ${redirectCount}}`);
272
- resolve(result)
273
- } catch (e) {
274
- reject(e);
275
- }
276
- }
277
- });
278
- task.start();
279
- }).catch((err: BusinessError) => {
280
- Logger.info(`[RTNPdfView]: error downloadHttpFile`);
281
- this.onError(err.message);
282
- reject("downloadFile failed" + err.message);
283
- });
284
- } catch (error) {
285
- Logger.info(`[RTNPdfView]: error downloadHttpFile`);
286
- let err: BusinessError = error as BusinessError;
287
- this.onError(err.message);
288
- reject("downloadFile failed" + err.message);
289
- }
290
- });
291
- }
292
-
293
- async processFileName(originalURL: string): Promise<string> {
294
- return new Promise(async (resolve, reject) => {
295
- let mdAlgName = 'SHA256'; // 摘要算法名
296
- let md = cryptoFramework.createMd(mdAlgName);
297
- try {
298
- await md.update({ data: new Uint8Array(buffer.from(originalURL, 'utf-8').buffer) });
299
- let mdResult: cryptoFramework.DataBlob = await md.digest();
300
- const fileName: string = buffer.from(mdResult.data).toString('hex');
301
- Logger.info(`[RTNPdfView]: fileName: ${fileName}`);
302
- resolve(fileName);
303
- } catch (e) {
304
- this.onError(e.message);
305
- reject("processFileName error");
306
- }
307
- });
308
- }
309
- async checkCache(hashFileName: string): Promise<string> {
310
- try {
311
- let filesDir = (getContext() as common.UIAbilityContext).filesDir;
312
- let cacheFileName: string = "";
313
- let fileList = fs.listFileSync(filesDir);
314
- fileList.forEach(file=>{
315
- let _hashFileName = file.slice(0, -17);
316
- _hashFileName === hashFileName && (cacheFileName = filesDir + "/" + file);
317
- })
318
- return Promise.resolve(cacheFileName);
319
- } catch (e) {
320
- this.onError(e.message);
321
- return Promise.reject("checkCache error");
322
- }
323
- }
324
-
325
- async sendToSandBox(assetPath: string): Promise<string> {
326
- assetPath = assetPath!.replace("asset://", "assets/");
327
- Logger.info(`[RTNPdfView]: load pdf assetPath: ${assetPath}`);
328
- const hashFileName: string = await this.processFileName(assetPath);
329
- const cacheFileName = await this.checkCache(hashFileName);
330
- let fileFullPath: string = "";
331
-
332
- if(this.descriptor.rawProps.source?.cache && !!cacheFileName){
333
- fileFullPath = cacheFileName;
334
- }else{
335
- if (!!cacheFileName && fs.accessSync(cacheFileName)) {
336
- fs.unlinkSync(cacheFileName);
337
- }
338
- // 需将pdf文档复制到沙箱路径下
339
- let context = getContext() as common.UIAbilityContext;
340
- let content = context.resourceManager.getRawFileContentSync(`${assetPath}`); // pdf_reference
341
- let dir = context.filesDir;
342
- fileFullPath = dir + '/' + hashFileName + new Date().getTime() + '.pdf';
343
- Logger.info(`[RTNPdfView]: load pdf filePath: ${fileFullPath}`);
344
- let res = fs.accessSync(fileFullPath);
345
- Logger.info(`[RTNPdfView]: fs accessSync: ${res}`);
346
- let fdSand = fs.openSync(fileFullPath, fs.OpenMode.WRITE_ONLY | fs.OpenMode.CREATE | fs.OpenMode.TRUNC);
347
- fs.writeSync(fdSand.fd, content.buffer);
348
- fs.closeSync(fdSand.fd);
349
- }
350
-
351
- return fileFullPath;
352
- }
353
-
354
- async updateSource() {
355
- let src: string | undefined = this.descriptor.rawProps.path;
356
- Logger.info(`[RTNPdfView]: src is ${src}`);
357
- if (src) {
358
- this.pdfUrl = src;
359
- this.scrollEnabled = this.descriptor.rawProps.scrollEnabled ?? false
360
- if (src!.startsWith('http://') || src!.startsWith('https://')) {
361
- this.doLoadHttpDocument(src); // 适配加载在线文件
362
- } else {
363
- let isDeleteOriginFile: boolean = false;
364
- if (src!.startsWith('asset://')) { // 适配require('../assets/test.pdf')
365
- src = await this.sendToSandBox(src);
366
- isDeleteOriginFile = true;
367
- }
368
- this.doLoadLocalDocument(src, isDeleteOriginFile); // 适配本地其他目录,比如cache
369
- }
370
- }
371
- }
372
-
373
- aboutToAppear() {
374
- this.descriptor = this.ctx.descriptorRegistry.getDescriptor<PdfViewDescriptor>(this.tag);
375
- this.updateSource();
376
- this.unregisterDescriptorChangesListener = this.ctx.descriptorRegistry.subscribeToDescriptorChanges(this.tag,
377
- (newDescriptor) => {
378
- this.descriptor = (newDescriptor as PdfViewDescriptor)
379
- this.updateSource();
380
- }
381
- )
382
- this.cleanupCommandCallback = this.ctx.componentCommandReceiver.registerCommandCallback(
383
- this.tag,
384
- (command, args: (boolean | number)[]) => {
385
- Logger.info(`[RNOH]: HarmonyOS does not support,command: ${command}, arg: ${args[0]}`);
386
- this.pageIndex = args[0] as number;
387
- this.pdfUrl = "";
388
- });
389
- }
390
-
391
- aboutToDisappear() {
392
- this.cleanupCommandCallback?.();
393
- this.unregisterDescriptorChangesListener?.();
394
- }
395
-
396
- loadComplete(numberOfPages: number, filePath: string) {
397
- Logger.info("[RNOH]:enter loadComplete");
398
-
399
- // 获取页面宽度、高度
400
- this.ctx.rnInstance.emitComponentEvent(
401
- this.descriptor.tag,
402
- PDF_VIEW_TYPE,
403
- {
404
- type: 'onChange',
405
- message: `loadComplete|${numberOfPages}|100|100`
406
- }
407
- );
408
- }
409
-
410
- loadProgress(percent: number) {
411
- Logger.info("[RNOH]:enter loadProgress");
412
- this.ctx.rnInstance.emitComponentEvent(
413
- this.descriptor.tag,
414
- PDF_VIEW_TYPE,
415
- {
416
- type: 'onChange',
417
- message: `loadProgress|${percent}`
418
- }
419
- );
420
- }
421
-
422
- onError(e: string) {
423
- Logger.info("[RNOH]:enter onError");
424
- this.ctx.rnInstance.emitComponentEvent(
425
- this.descriptor.tag,
426
- PDF_VIEW_TYPE,
427
- {
428
- type: 'onChange',
429
- message: `error|${e}`
430
- }
431
- );
432
- }
433
-
434
- onPageChanged(page: number, numberOfPages: number) {
435
- Logger.info("[RNOH]:enter pageChanged");
436
- this.ctx.rnInstance.emitComponentEvent(
437
- this.descriptor.tag,
438
- PDF_VIEW_TYPE,
439
- {
440
- type: 'onChange',
441
- message: `pageChanged|${page}|${numberOfPages}`
442
- }
443
- );
444
- }
445
-
446
- onPressLink(url: string) {
447
- Logger.info("[RNOH]:enter onPressLink");
448
- this.ctx.rnInstance.emitComponentEvent(
449
- this.descriptor.tag,
450
- PDF_VIEW_TYPE,
451
- {
452
- type: 'onChange',
453
- message: `linkPressed|${url}`
454
- }
455
- );
456
- }
457
-
458
- onScaleChanged(currentScale: number) {
459
- Logger.info("[RNOH]:enter scaleChanged");
460
- this.ctx.rnInstance.emitComponentEvent(
461
- this.descriptor.tag,
462
- PDF_VIEW_TYPE,
463
- {
464
- type: 'onChange',
465
- message: `scaleChanged|${currentScale}`
466
- }
467
- );
468
- }
469
-
470
- onChange() {
471
- Logger.info("[RNOH]:onChange not support");
472
- this.ctx.rnInstance.emitComponentEvent(
473
- this.descriptor.tag,
474
- PDF_VIEW_TYPE,
475
- {
476
- type: 'onChange',
477
- message: ON_PROGRESS_CHANGE
478
- }
479
- );
480
- }
481
-
482
- build() {
483
- RNViewBase({ ctx: this.ctx, tag: this.tag }) {
484
- if (this.descriptor.rawProps.path) {
485
- PdfView(
486
- {
487
- controller: this.pdfController,
488
- pageLayout: pdfService.PageLayout.LAYOUT_SINGLE,
489
- isContinuous: true,
490
- pageFit: pdfService.PageFit.FIT_WIDTH,
491
- showScroll: this.scrollEnabled
492
- }
493
- )
494
- }
495
- }
496
- }
497
- }
498
- function arrayToRecord(headers: Array<Headers>): Record<string, Object> {
499
- const record: Record<string, Object> = {}
500
- headers.forEach(item => {
501
- record[item.key] = item.value
502
- })
503
- return record
504
- }
505
- function assignHeader(headers: Array<Headers>, ...source: Record<string, Object>[]): Record<string, Object> {
506
- const target = arrayToRecord(headers)
507
- for(let s of source){
508
- for(let k of Object.keys(s)){
509
- target[k] = Reflect.get(s, k)
510
- }
511
- }
512
- return target
513
- }
@@ -1,15 +0,0 @@
1
- /*
2
- * Copyright (c) 2024 Huawei Device Co., Ltd. All rights reserved
3
- * Use of this source code is governed by a MIT license that can be
4
- * found in the LICENSE file.
5
- */
6
-
7
- export const PDF_VIEW:string ='RTNPdfView'
8
- export const ASSET:string='asset'
9
- export const LOAD_COMPLETE:string='loadComplete'
10
- export const PAGE_CHANGE:string='pageChanged'
11
- export const SCALE_CHANGED:string='scaleChanged'
12
- export const ON_PROGRESS_CHANGE:string='onProgressChange'
13
- export const HIDE_TOOLBAR:string='#toolbar=0&navpanes=0'
14
- export const HTTP:string='http'
15
- export const HTTPS:string='https'
@@ -1,32 +0,0 @@
1
- {
2
- "app": {
3
- "bundleName": "com.rnoh.tester25p4",
4
- "debug": true,
5
- "versionCode": 1000000,
6
- "versionName": "1.0.0",
7
- "minAPIVersion": 50000012,
8
- "targetAPIVersion": 60000020,
9
- "apiReleaseType": "Release",
10
- "targetMinorAPIVersion": 0,
11
- "targetPatchAPIVersion": 0,
12
- "compileSdkVersion": "6.0.0.47",
13
- "compileSdkType": "HarmonyOS",
14
- "appEnvironments": [],
15
- "bundleType": "app",
16
- "buildMode": "debug"
17
- },
18
- "module": {
19
- "name": "pdfview",
20
- "type": "har",
21
- "deviceTypes": [
22
- "default",
23
- "tablet",
24
- "2in1"
25
- ],
26
- "packageName": "@react-native-ohos/react-native-pdf",
27
- "installationFree": false,
28
- "virtualMachine": "ark12.0.2.0",
29
- "compileMode": "esmodule",
30
- "dependencies": []
31
- }
32
- }
@@ -1,8 +0,0 @@
1
- {
2
- "string": [
3
- {
4
- "name": "page_show",
5
- "value": "page from package"
6
- }
7
- ]
8
- }
@@ -1,8 +0,0 @@
1
- {
2
- "string": [
3
- {
4
- "name": "page_show",
5
- "value": "page from package"
6
- }
7
- ]
8
- }
@@ -1,8 +0,0 @@
1
- {
2
- "string": [
3
- {
4
- "name": "page_show",
5
- "value": "page from package"
6
- }
7
- ]
8
- }
@@ -1 +0,0 @@
1
- {"name":"@react-native-ohos/react-native-pdf","version":"6.8.0-rc.1","description":"Please describe the basic information.","main":"Index.ets","author":"","license":"Apache-2.0","dependencies":{"@rnoh/react-native-openharmony":"\"file:../../node_modules/react-native-harmony/harmony/react_native_openharmony.har\""}}
@@ -1,24 +0,0 @@
1
- /*
2
- * Copyright (c) 2023 Huawei Device Co., Ltd.
3
- * Licensed under the Apache License, Version 2.0 (the "License");
4
- * you may not use this file except in compliance with the License.
5
- * You may obtain a copy of the License at
6
- *
7
- * http://www.apache.org/licenses/LICENSE-2.0
8
- *
9
- * Unless required by applicable law or agreed to in writing, software
10
- * distributed under the License is distributed on an "AS IS" BASIS,
11
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- * See the License for the specific language governing permissions and
13
- * limitations under the License.
14
- */
15
-
16
- #ifndef RESOURCE_TABLE_H
17
- #define RESOURCE_TABLE_H
18
-
19
- #include<stdint.h>
20
-
21
- namespace OHOS {
22
- const int32_t STRING_PAGE_SHOW = 0x02000000;
23
- }
24
- #endif
@@ -1,25 +0,0 @@
1
- {
2
- "modulePathMap": {
3
- "entry": "E:\\tester\\25P4\\harmony\\entry",
4
- "pdfview": "E:\\gitcode\\rntpc_react-native-pdf\\harmony\\pdfview"
5
- },
6
- "compileMode": "esmodule",
7
- "projectRootPath": "E:\\gitcode\\rntpc_react-native-pdf\\harmony",
8
- "nodeModulesPath": "E:\\gitcode\\rntpc_react-native-pdf\\harmony\\pdfview\\build\\default\\intermediates\\loader_out\\default\\node_modules",
9
- "byteCodeHarInfo": {},
10
- "declarationEntry": [],
11
- "moduleName": "pdfview",
12
- "hspNameOhmMap": {},
13
- "harNameOhmMap": {},
14
- "packageManagerType": "ohpm",
15
- "compileEntry": [
16
- "E:\\gitcode\\rntpc_react-native-pdf\\harmony\\pdfview\\src\\main\\ets\\Logger.ets",
17
- "E:\\gitcode\\rntpc_react-native-pdf\\harmony\\pdfview\\src\\main\\ets\\components\\mainpage\\RTNPdfView.ets",
18
- "E:\\gitcode\\rntpc_react-native-pdf\\harmony\\pdfview\\src\\main\\ets\\components\\mainpage\\types.ts"
19
- ],
20
- "otherCompileFiles": [],
21
- "dynamicImportLibInfo": {},
22
- "routerMap": [],
23
- "hspResourcesMap": {},
24
- "updateVersionInfo": {}
25
- }
@@ -1,29 +0,0 @@
1
- {
2
- "app": {
3
- "bundleName": "com.rnoh.tester25p4",
4
- "debug": true,
5
- "versionCode": 1000000,
6
- "versionName": "1.0.0",
7
- "minAPIVersion": 50000012,
8
- "targetAPIVersion": 60000020,
9
- "apiReleaseType": "Release",
10
- "targetMinorAPIVersion": 0,
11
- "targetPatchAPIVersion": 0,
12
- "compileSdkVersion": "6.0.0.47",
13
- "compileSdkType": "HarmonyOS",
14
- "appEnvironments": [],
15
- "bundleType": "app",
16
- "buildMode": "debug"
17
- },
18
- "module": {
19
- "name": "pdfview",
20
- "type": "har",
21
- "deviceTypes": [
22
- "default",
23
- "tablet",
24
- "2in1"
25
- ],
26
- "packageName": "@react-native-ohos/react-native-pdf",
27
- "installationFree": false
28
- }
29
- }