react-native-document-processor 0.1.0 → 0.2.0
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.
- package/README.md +142 -138
- package/ios/DocumentProcessor.m +8 -0
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -1,128 +1,139 @@
|
|
|
1
1
|
# react-native-document-processor
|
|
2
2
|
|
|
3
|
-
Phiên bản **0.
|
|
4
|
-
bằng native
|
|
3
|
+
Phiên bản **0.2.0** — thư viện React Native chụp tài liệu, tạo PDF từ ảnh và đọc
|
|
4
|
+
QR/barcode bằng native trên iOS và Android.
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
- [Repository](https://github.com/quocvu12345/react-native-document-processor)
|
|
7
|
+
- [Package npm](https://www.npmjs.com/package/react-native-document-processor)
|
|
8
|
+
- Source của phiên bản này: tag `v0.2.0`.
|
|
7
9
|
|
|
8
|
-
## Cài
|
|
10
|
+
## Cài đặt
|
|
9
11
|
|
|
10
12
|
```sh
|
|
11
|
-
yarn add react-native-document-processor@0.
|
|
12
|
-
# Hoặc: npm install react-native-document-processor@0.
|
|
13
|
+
yarn add react-native-document-processor@0.2.0 --exact
|
|
14
|
+
# Hoặc: npm install react-native-document-processor@0.2.0 --save-exact
|
|
13
15
|
pod install --project-directory=ios
|
|
14
16
|
```
|
|
15
17
|
|
|
16
|
-
Package: [react-native-document-processor trên npm](https://www.npmjs.com/package/react-native-document-processor).
|
|
17
|
-
Source native của phiên bản này cũng có ở tag GitHub `v0.1.0`.
|
|
18
|
-
|
|
19
18
|
Yêu cầu Android API 28+, iOS 15.1+ và React Native có autolinking. Đã kiểm tra
|
|
20
|
-
trong ứng dụng React Native 0.83. Camera Android
|
|
21
|
-
ML Kit barcode
|
|
19
|
+
trong ứng dụng host dùng React Native 0.83. Camera Android cần Google Play services;
|
|
20
|
+
model ML Kit đọc barcode được đóng gói sẵn. iOS cần khai báo
|
|
22
21
|
`NSCameraUsageDescription` trong `Info.plist` của ứng dụng.
|
|
23
22
|
|
|
24
|
-
|
|
23
|
+
Rebuild native app sau khi cài hoặc nâng cấp thư viện. Reload JavaScript hoặc
|
|
24
|
+
cập nhật OTA không thêm được native module vào binary đã cài. Thư viện cần
|
|
25
|
+
native build riêng, chẳng hạn Expo development build.
|
|
25
26
|
|
|
26
|
-
|
|
27
|
+
Metadata giấy phép hiện là `UNLICENSED`.
|
|
27
28
|
|
|
28
|
-
|
|
29
|
-
ML Kit Document Scanner trên Android, có phát hiện biên, crop và xác nhận ảnh.
|
|
30
|
-
Đã thay thế và gỡ `react-native-document-scanner-plugin` cùng
|
|
31
|
-
`react-native-images-to-pdf`. Sau khi người dùng hoàn tất chụp:
|
|
29
|
+
## Thay đổi trong 0.2.0
|
|
32
30
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
→ tạo preview nhỏ + ghi trang PDF từ cùng bitmap
|
|
38
|
-
→ trả PDF URI + mã QR + số trang về JS
|
|
39
|
-
→ đối chiếu mã giấy tờ và upload PDF bằng logic hiện có
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
Mỗi trang cần một lời gọi `appendPage`; bắt đầu, hoàn tất và giải phóng session
|
|
43
|
-
có ba lời gọi riêng. Không truyền bitmap/base64 qua bridge, không ghi ảnh crop
|
|
44
|
-
hoặc ảnh resize trung gian, không render lại PDF để đọc QR. Các trang xử lý tuần
|
|
45
|
-
tự trên worker riêng. Android ghi JPEG trực tiếp vào PDF và chỉ giữ metadata của
|
|
46
|
-
các trang đã xong; iOS dùng Core Graphics PDF context và autorelease pool từng trang.
|
|
47
|
-
|
|
48
|
-
- iOS: Vision chỉ đọc QR, ImageIO decode ảnh, Core Graphics tạo PDF.
|
|
49
|
-
- Android: ML Kit barcode-scanning **bundled** 17.3.0 chỉ đọc QR, ImageDecoder
|
|
50
|
-
chuẩn hóa EXIF, `JpegPdfWriter` ghi PDF image-only; camera dùng
|
|
51
|
-
play-services-mlkit-document-scanner 16.0.0 và chỉ yêu cầu JPEG.
|
|
52
|
-
- Đọc ảnh tối đa 4096 px cạnh dài trước khi encode PDF; PDF tối đa 3000 px,
|
|
53
|
-
JPEG 92%; preview tối đa 1000 px, JPEG 85%. Không upscale ảnh nhỏ.
|
|
54
|
-
- Khi chưa thấy payload `doc|...|<số>`, thử bốn vùng chồng lấn 60% trong RAM như
|
|
55
|
-
chiến lược cũ. JS vẫn là nơi parse, giữ số 0 đầu, gộp mã trùng, đối chiếu mã
|
|
56
|
-
thiếu/thừa và giữ các trang xuất hiện của từng mã.
|
|
57
|
-
- Lỗi đọc QR được trả bằng trạng thái trang `error`; lỗi decode ảnh hoặc ghi PDF
|
|
58
|
-
làm hủy cả session để tránh upload một PDF thiếu trang.
|
|
59
|
-
- Preview là tùy chọn; lỗi tạo preview không làm mất mã QR đã đọc được.
|
|
60
|
-
|
|
61
|
-
## Phát triển trong ứng dụng 24hMoney
|
|
62
|
-
|
|
63
|
-
Root `package.json` dùng phiên bản registry `0.1.0`. Expo/React Native autolinking
|
|
64
|
-
nhận cả podspec iOS và package Android.
|
|
65
|
-
|
|
66
|
-
```sh
|
|
67
|
-
yarn install
|
|
68
|
-
pod install --project-directory=ios
|
|
69
|
-
```
|
|
31
|
+
- Sửa lỗi không đọc được QR trên iOS Simulator khi Vision không tạo được
|
|
32
|
+
inference context: yêu cầu chỉ đọc QR sử dụng Vision revision 1 trên Simulator.
|
|
33
|
+
- Thiết bị iOS thật tiếp tục dùng revision mặc định. API JavaScript giữ nguyên.
|
|
34
|
+
- Bản sửa được đóng gói trực tiếp trong source native của npm.
|
|
70
35
|
|
|
71
|
-
|
|
72
|
-
không bổ sung được native module vào binary cũ. `FileUploadHelper` luôn dùng module
|
|
73
|
-
mới cho camera và tạo PDF; không còn fallback sang hai thư viện đã gỡ. Cần phát
|
|
74
|
-
hành binary mới và quản lý runtime OTA phù hợp khi triển khai thay đổi này.
|
|
36
|
+
## Chụp tài liệu và tạo PDF
|
|
75
37
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
app cần quay lại phiên bản registry đã publish và rebuild native.
|
|
38
|
+
`scanDocument` mở camera native: VisionKit trên iOS và ML Kit Document Scanner
|
|
39
|
+
trên Android. Người dùng có thể phát hiện biên, crop và xác nhận các trang.
|
|
79
40
|
|
|
80
41
|
```ts
|
|
81
|
-
import {
|
|
42
|
+
import {
|
|
43
|
+
processDocumentImages,
|
|
44
|
+
scanDocument,
|
|
45
|
+
} from 'react-native-document-processor';
|
|
46
|
+
import RNFS from 'react-native-fs';
|
|
82
47
|
|
|
83
48
|
const capture = await scanDocument({ croppedImageQuality: 100 });
|
|
84
49
|
if (capture.status === 'cancel') return;
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
//
|
|
50
|
+
|
|
51
|
+
let output: Awaited<ReturnType<typeof processDocumentImages>> | undefined;
|
|
52
|
+
try {
|
|
53
|
+
output = await processDocumentImages(capture.scannedImages, {
|
|
54
|
+
onProgress: (completed, total) => updateProgress(completed, total),
|
|
55
|
+
isCancelled: () => hasLeftScreen,
|
|
56
|
+
});
|
|
57
|
+
// output.pdfUri: PDF để lưu hoặc upload
|
|
58
|
+
// output.pages: mã QR, trạng thái và preview của từng trang
|
|
59
|
+
// output.directoryUri: thư mục chứa PDF và preview, do caller sở hữu
|
|
60
|
+
await consumeDocument(output);
|
|
61
|
+
} finally {
|
|
62
|
+
// Chỉ dọn output sau khi mọi thao tác lưu/upload/hiển thị đã hoàn tất.
|
|
63
|
+
const temporaryPaths = [
|
|
64
|
+
...capture.scannedImages,
|
|
65
|
+
...(output ? [output.directoryUri] : []),
|
|
66
|
+
];
|
|
67
|
+
await Promise.all(
|
|
68
|
+
temporaryPaths.map(path => RNFS.unlink(path).catch(() => undefined)),
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
`updateProgress`, `hasLeftScreen` và `consumeDocument` là logic của ứng dụng host.
|
|
74
|
+
Ví dụ dùng `react-native-fs` để dọn file; thư viện này không phải dependency của
|
|
75
|
+
package và có thể được thay bằng API filesystem của ứng dụng.
|
|
76
|
+
|
|
77
|
+
`croppedImageQuality` nhận giá trị từ 0 đến 100; Android giữ JPEG gốc của scanner.
|
|
78
|
+
Mỗi lần chụp trả về `{ status: 'success' | 'cancel', scannedImages: string[] }`.
|
|
79
|
+
iOS trả tối đa 24 trang trong một lần chụp. Ứng dụng có thể gọi lại camera và gộp
|
|
80
|
+
các ảnh theo thứ tự trước khi tạo PDF.
|
|
81
|
+
|
|
82
|
+
`processDocumentImages` trả về các trang đánh số từ 1:
|
|
83
|
+
|
|
84
|
+
```ts
|
|
85
|
+
{
|
|
86
|
+
pdfUri: 'file:///cache/session/document.pdf',
|
|
87
|
+
directoryUri: 'file:///cache/session',
|
|
88
|
+
pages: [
|
|
89
|
+
{
|
|
90
|
+
page: 1,
|
|
91
|
+
rawValues: ['doc|d|0030358'],
|
|
92
|
+
status: 'decoded', // 'decoded' | 'not-detected' | 'error'
|
|
93
|
+
previewUri: 'file:///cache/session/page-1.jpg', // tùy chọn
|
|
94
|
+
},
|
|
95
|
+
],
|
|
96
|
+
}
|
|
93
97
|
```
|
|
94
98
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
99
|
+
Dùng `{ scanQr: false }` khi chỉ cần PDF. Khi đó native bỏ qua đọc QR và tạo
|
|
100
|
+
preview. Native không xóa ảnh đầu vào. Sau thành công, caller chịu trách nhiệm
|
|
101
|
+
xóa output và ảnh chụp khi không còn sử dụng. Nếu hủy hoặc có lỗi trước khi
|
|
102
|
+
chuyển quyền sở hữu, wrapper tự giải phóng output của session.
|
|
103
|
+
|
|
104
|
+
Hủy được kiểm tra giữa các trang và trước/sau khi đóng PDF. Trang đang được
|
|
105
|
+
Vision/ML Kit xử lý sẽ hoàn tất trước khi dọn tài nguyên. Lỗi đọc QR nằm trong
|
|
106
|
+
trạng thái từng trang; lỗi decode ảnh hoặc ghi PDF hủy cả session để tránh trả
|
|
107
|
+
PDF thiếu trang. Lỗi tạo preview không làm mất mã đã đọc được.
|
|
100
108
|
|
|
101
|
-
|
|
102
|
-
được xử lý qua activity listener duy nhất, không đăng ký launcher lặp mỗi lần scan.
|
|
103
|
-
iOS lưu ảnh theo từng trang trên worker và chỉ trả kết quả khi camera đã đóng.
|
|
104
|
-
Hủy, lỗi camera, thiếu foreground activity và một lần mở camera đang chạy đều được xử lý.
|
|
109
|
+
## Luồng xử lý native
|
|
105
110
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
111
|
+
```text
|
|
112
|
+
Ảnh đã chụp
|
|
113
|
+
→ decode và chuẩn hóa hướng EXIF
|
|
114
|
+
→ đọc QR trên bitmap
|
|
115
|
+
→ tạo preview và ghi trang PDF
|
|
116
|
+
→ trả PDF URI, mã QR và trạng thái từng trang về JavaScript
|
|
117
|
+
```
|
|
109
118
|
|
|
110
|
-
|
|
119
|
+
Các trang được xử lý tuần tự trên worker. Không truyền bitmap/base64 qua bridge
|
|
120
|
+
và không cần render lại PDF vừa tạo để đọc QR.
|
|
111
121
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
122
|
+
- iOS dùng ImageIO, Vision, Core Graphics và autorelease pool theo từng trang.
|
|
123
|
+
- Android dùng ImageDecoder, ML Kit barcode-scanning bundled 17.3.0 và PDF writer
|
|
124
|
+
ghi JPEG trực tiếp; camera dùng play-services-mlkit-document-scanner 16.0.0.
|
|
125
|
+
- Ảnh đầu vào được giới hạn cạnh dài 4096 px; PDF tối đa 3000 px, JPEG 92%;
|
|
126
|
+
preview tối đa 1000 px, JPEG 85%. Không phóng to ảnh nhỏ.
|
|
127
|
+
- Luồng xử lý tài liệu thử thêm bốn vùng chồng lấn 60% khi chưa thấy payload
|
|
128
|
+
`doc|...|<số>`. Kết quả vẫn chứa các chuỗi QR thô để ứng dụng tự parse, đối chiếu
|
|
129
|
+
và gộp mã theo nghiệp vụ.
|
|
119
130
|
|
|
120
131
|
## Đọc QR/barcode từ ảnh
|
|
121
132
|
|
|
122
133
|
```ts
|
|
123
134
|
import { scanBarcodes, scanQrImage } from 'react-native-document-processor';
|
|
124
135
|
|
|
125
|
-
const qr = await scanQrImage('/path/to/image.jpg');
|
|
136
|
+
const qr = await scanQrImage('/path/to/image.jpg');
|
|
126
137
|
const all = await scanBarcodes('file:///path/to/image.jpg');
|
|
127
138
|
const selected = await scanBarcodes('content://provider/image', {
|
|
128
139
|
formats: ['qr', 'ean-13'],
|
|
@@ -130,75 +141,68 @@ const selected = await scanBarcodes('content://provider/image', {
|
|
|
130
141
|
// { values: ['0030358'], codes: [{ value: '0030358', format: 'qr' }] }
|
|
131
142
|
```
|
|
132
143
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
144
|
+
API chạy trên worker, giới hạn ảnh 4096 px và chuẩn hóa EXIF. Không mở camera,
|
|
145
|
+
tạo PDF hoặc xóa ảnh đầu vào. Hỗ trợ đường dẫn tuyệt đối, `file://` và thêm
|
|
146
|
+
`content://` trên Android; không nhận URL mạng hoặc base64.
|
|
147
|
+
|
|
148
|
+
Không phát hiện mã trả `{ values: [], codes: [] }`. Ảnh hỏng hoặc lỗi decoder
|
|
149
|
+
reject Promise. Kết quả hỗ trợ nhiều mã, loại mã trùng và giữ nguyên chuỗi,
|
|
150
|
+
kể cả số 0 đầu.
|
|
139
151
|
|
|
140
152
|
Các format: `qr`, `ean-13`, `ean-8`, `upc-a`, `upc-e`, `code-128`, `code-39`,
|
|
141
153
|
`code-93`, `codabar`, `itf`, `pdf-417`, `aztec`, `data-matrix`. iOS quy đổi UPC-A
|
|
142
|
-
từ EAN-13 có số 0 đầu khi yêu cầu UPC-A.
|
|
143
|
-
không dùng chức năng generate của thư viện cũ. Với giấy tờ, `scanQrImage` chỉ đọc QR
|
|
144
|
-
để tránh nhận nhầm chữ thành barcode 1D; fallback crop của luồng PDF có sẵn giữ nguyên.
|
|
154
|
+
từ EAN-13 có số 0 đầu khi yêu cầu UPC-A.
|
|
145
155
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
156
|
+
Package không render PDF có sẵn. Để đọc QR trong PDF local, ứng dụng cần render
|
|
157
|
+
lần lượt từng trang thành ảnh bằng một thư viện PDF, rồi gọi `scanQrImage` và
|
|
158
|
+
xóa ảnh tạm sau khi xử lý. Giữ tệp PDF gốc để lưu hoặc upload.
|
|
149
159
|
|
|
150
|
-
|
|
151
|
-
|
|
160
|
+
## Phát triển và kiểm tra
|
|
161
|
+
|
|
162
|
+
Clone repository và dùng dependency `file:` trong ứng dụng host để thử source
|
|
163
|
+
local. Chạy autolinking/pod install rồi rebuild native khi thay đổi iOS/Android.
|
|
164
|
+
|
|
165
|
+
Repository chứa:
|
|
152
166
|
|
|
153
|
-
|
|
154
|
-
|
|
167
|
+
- `src/__tests__/index.test.ts`: kiểm tra API, format, camera, thứ tự trang,
|
|
168
|
+
hủy, lỗi native và quyền sở hữu file. Chạy với Jest preset React Native của
|
|
169
|
+
ứng dụng host; cấu hình Jest để bao gồm thư mục source của thư viện.
|
|
170
|
+
- `tests/check-pdf-writer.sh`: tạo PDF 30 trang bằng Java rồi đọc/render bằng
|
|
171
|
+
PDFKit để kiểm tra số trang, thứ tự, kích thước và hướng ảnh.
|
|
172
|
+
- Android instrumentation tests cho ML Kit, PDF, EXIF, nhiều QR, barcode,
|
|
173
|
+
cleanup và xử lý camera khi không có foreground activity.
|
|
155
174
|
|
|
156
|
-
|
|
175
|
+
```sh
|
|
176
|
+
# Tại repository thư viện, cần macOS, Xcode và JDK
|
|
177
|
+
bash tests/check-pdf-writer.sh
|
|
178
|
+
|
|
179
|
+
# Tại thư mục android của ứng dụng host đã autolink, cần thiết bị ADB
|
|
157
180
|
./gradlew :react-native-document-processor:connectedReleaseAndroidTest
|
|
158
181
|
```
|
|
159
182
|
|
|
160
|
-
Nếu clone riêng repository thư viện, kiểm tra PDF writer độc lập bằng
|
|
161
|
-
`bash tests/check-pdf-writer.sh` trên macOS có Xcode và JDK. Test React Native và
|
|
162
|
-
Android instrumentation cần chạy trong ứng dụng host đã autolink module này.
|
|
163
|
-
|
|
164
|
-
Đã kiểm tra riêng Objective-C bằng Clang với iOS SDK/React headers thực, Java bằng
|
|
165
|
-
javac với Android SDK và dependency đã cache. PDF Android 30 trang đã được đọc
|
|
166
|
-
và render bằng PDFKit, kiểm tra số trang, thứ tự, kích thước và hướng ảnh.
|
|
167
|
-
App Android release đã build và cài trên MI 8 Lite; bảy instrumentation test
|
|
168
|
-
ML Kit/PDF/cleanup/camera thiếu activity, nhiều QR, EXIF, EAN-13, Code128,
|
|
169
|
-
lọc QR-only và khôi phục sau ảnh lỗi đã chạy thành công trên thiết bị.
|
|
170
|
-
Chưa build/link toàn bộ app iOS hoặc kiểm thử chụp giấy thật tự động.
|
|
171
183
|
Nếu JDK không nằm trong PATH, đặt `DOCUMENT_PROCESSOR_JAVAC` và
|
|
172
|
-
`DOCUMENT_PROCESSOR_JAVA`
|
|
184
|
+
`DOCUMENT_PROCESSOR_JAVA` thành đường dẫn executable tương ứng.
|
|
173
185
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
186
|
+
Bản sửa iOS Simulator đã được kiểm tra với PDF mẫu 30 trang, đọc đủ 10 QR trong
|
|
187
|
+
ứng dụng host. Camera trên thiết bị thật vẫn cần kiểm tra với giấy nhỏ/mờ/xoay,
|
|
188
|
+
chụp nhiều đợt và thao tác hủy. Không công bố tỷ lệ tăng tốc hoặc mức RAM chung
|
|
189
|
+
cho mọi thiết bị.
|
|
178
190
|
|
|
179
|
-
## Log
|
|
191
|
+
## Log Android
|
|
180
192
|
|
|
181
|
-
Log native
|
|
182
|
-
hoạt động cả trong release. Mặc định tắt; bật trên thiết bị test bằng:
|
|
193
|
+
Log native dùng tag `DocumentScan`, mặc định tắt. Bật trên thiết bị kiểm tra:
|
|
183
194
|
|
|
184
195
|
```sh
|
|
185
196
|
adb shell setprop log.tag.DocumentScan DEBUG
|
|
186
197
|
adb logcat -v threadtime 'DocumentScan:D' 'AndroidRuntime:E' '*:S'
|
|
187
198
|
```
|
|
188
199
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
xử lý, số trang, kích thước PDF, QR từng trang, mã khớp/thiếu/thừa và lỗi.
|
|
193
|
-
Không ghi bitmap/base64. Log có mã giấy tờ khi bật nên chỉ lưu cục bộ để test.
|
|
200
|
+
Các sự kiện gồm `camera.*`, `session.*`, `page.*`, `pdf.complete` và `barcode.*`.
|
|
201
|
+
Ứng dụng có thể bổ sung sự kiện qua `logDocumentEvent(event, data)`. Log có thể
|
|
202
|
+
chứa mã tài liệu; chỉ bật khi cần chẩn đoán. Không ghi bitmap/base64.
|
|
194
203
|
|
|
195
|
-
Tắt khi hoàn tất
|
|
204
|
+
Tắt khi hoàn tất hoặc khởi động lại thiết bị:
|
|
196
205
|
|
|
197
206
|
```sh
|
|
198
207
|
adb shell setprop log.tag.DocumentScan INFO
|
|
199
208
|
```
|
|
200
|
-
|
|
201
|
-
Tài liệu API:
|
|
202
|
-
[Apple Vision](https://developer.apple.com/documentation/vision/vndetectbarcodesrequest),
|
|
203
|
-
[ML Kit barcode scanning](https://developers.google.com/ml-kit/vision/barcode-scanning/android),
|
|
204
|
-
[Android ImageDecoder](https://developer.android.com/reference/android/graphics/ImageDecoder).
|
package/ios/DocumentProcessor.m
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#import <React/RCTBridgeModule.h>
|
|
2
2
|
#import <React/RCTInvalidating.h>
|
|
3
3
|
#import <ImageIO/ImageIO.h>
|
|
4
|
+
#import <TargetConditionals.h>
|
|
4
5
|
#import <UIKit/UIKit.h>
|
|
5
6
|
#import <Vision/Vision.h>
|
|
6
7
|
#import "DPDocumentCapture.h"
|
|
@@ -53,6 +54,13 @@ static NSDictionary<NSString *, NSArray<VNBarcodeSymbology> *> *DPBarcodeFormats
|
|
|
53
54
|
static NSArray<VNBarcodeObservation *> *DPReadBarcodes(CGImageRef image,
|
|
54
55
|
NSArray<VNBarcodeSymbology> *symbologies, NSError **error) {
|
|
55
56
|
VNDetectBarcodesRequest *request = [VNDetectBarcodesRequest new];
|
|
57
|
+
#if TARGET_OS_SIMULATOR
|
|
58
|
+
// The default QR revision cannot create its inference context on Simulator.
|
|
59
|
+
// Revision 1 reads document QR codes without that inference path.
|
|
60
|
+
if (symbologies.count == 1 && [symbologies.firstObject isEqualToString:VNBarcodeSymbologyQR]) {
|
|
61
|
+
request.revision = VNDetectBarcodesRequestRevision1;
|
|
62
|
+
}
|
|
63
|
+
#endif
|
|
56
64
|
request.symbologies = symbologies;
|
|
57
65
|
VNImageRequestHandler *handler = [[VNImageRequestHandler alloc] initWithCGImage:image options:@{}];
|
|
58
66
|
return [handler performRequests:@[request] error:error] ? (request.results ?: @[]) : nil;
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-document-processor",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Native image-to-PDF and QR
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Native document capture, image-to-PDF conversion and QR/barcode scanning for React Native",
|
|
5
5
|
"main": "src/index.ts",
|
|
6
6
|
"react-native": "src/index.ts",
|
|
7
7
|
"types": "src/index.ts",
|
|
8
8
|
"license": "UNLICENSED",
|
|
9
|
-
"author": "
|
|
9
|
+
"author": "quocvu12345",
|
|
10
10
|
"repository": {
|
|
11
11
|
"type": "git",
|
|
12
12
|
"url": "git+https://github.com/quocvu12345/react-native-document-processor.git"
|