7
7
import com .facebook .react .bridge .ReadableMap ;
8
8
import com .facebook .react .bridge .Promise ;
9
9
import com .facebook .react .bridge .WritableMap ;
10
- import com .facebook .react .bridge .ReadableArray ;
11
10
12
11
import java .io .File ;
13
- import java .io .FileOutputStream ;
14
- import java .io .InputStream ;
15
- import java .io .ByteArrayInputStream ;
16
12
import java .util .UUID ;
17
- import java .util .HashSet ;
18
- import java .util .Set ;
19
- import java .nio .charset .Charset ;
20
13
21
- import com .itextpdf .text .Document ;
22
- import com .itextpdf .text .pdf .PdfWriter ;
23
- import com .itextpdf .text .pdf .codec .Base64 ;
24
- import com .itextpdf .tool .xml .XMLWorkerHelper ;
25
- import com .itextpdf .text .FontFactory ;
26
- import com .itextpdf .tool .xml .XMLWorkerFontProvider ;
14
+ import android .util .Base64 ;
15
+ import java .io .IOException ;
16
+ import java .io .RandomAccessFile ;
17
+
27
18
28
19
import android .os .Environment ;
20
+ import android .print .PdfConverter ;
29
21
30
22
public class RNHTMLtoPDFModule extends ReactContextBaseJavaModule {
31
23
32
- private Promise promise ;
33
24
private final ReactApplicationContext mReactContext ;
34
- private Set <String > customFonts = new HashSet <>();
35
-
36
- XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider (XMLWorkerFontProvider .DONTLOOKFORFONTS );
37
25
38
26
public RNHTMLtoPDFModule (ReactApplicationContext reactContext ) {
39
27
super (reactContext );
@@ -59,15 +47,6 @@ public void convert(final ReadableMap options, final Promise promise) {
59
47
fileName = UUID .randomUUID ().toString ();
60
48
}
61
49
62
- if (options .hasKey ("fonts" )) {
63
- if (options .getArray ("fonts" ) != null ) {
64
- final ReadableArray fonts = options .getArray ("fonts" );
65
- for (int i = 0 ; i < fonts .size (); i ++) {
66
- customFonts .add (fonts .getString (i ));
67
- }
68
- }
69
- }
70
-
71
50
if (options .hasKey ("directory" ) && options .getString ("directory" ).equals ("docs" )) {
72
51
String state = Environment .getExternalStorageState ();
73
52
File path = (Environment .MEDIA_MOUNTED .equals (state )) ?
@@ -84,9 +63,10 @@ public void convert(final ReadableMap options, final Promise promise) {
84
63
String base64 = "" ;
85
64
86
65
if (options .hasKey ("base64" ) && options .getBoolean ("base64" ) == true ) {
87
- base64 = Base64 . encodeFromFile (filePath );
66
+ base64 = encodeFromFile (destinationFile );
88
67
}
89
68
69
+
90
70
WritableMap resultMap = Arguments .createMap ();
91
71
resultMap .putString ("filePath" , filePath );
92
72
resultMap .putString ("base64" , base64 );
@@ -99,21 +79,8 @@ public void convert(final ReadableMap options, final Promise promise) {
99
79
100
80
private String convertToPDF (String htmlString , File file ) throws Exception {
101
81
try {
102
- Document doc = new Document ();
103
- InputStream in = new ByteArrayInputStream (htmlString .getBytes ());
104
-
105
- PdfWriter pdf = PdfWriter .getInstance (doc , new FileOutputStream (file ));
106
-
107
- FontFactory .setFontImp (fontProvider );
108
- for (String font : customFonts ) {
109
- fontProvider .register ( font );
110
- }
111
-
112
- doc .open ();
113
- XMLWorkerHelper .getInstance ().parseXHtml (pdf , doc , in , null , Charset .forName ("UTF-8" ), fontProvider );
114
- doc .close ();
115
- in .close ();
116
-
82
+ PdfConverter .getInstance ()
83
+ .convert (mReactContext , htmlString , file );
117
84
String absolutePath = file .getAbsolutePath ();
118
85
119
86
return absolutePath ;
@@ -134,4 +101,10 @@ private File getTempFile(String fileName) throws Exception {
134
101
}
135
102
}
136
103
104
+ private String encodeFromFile (File file ) throws IOException {
105
+ RandomAccessFile randomAccessFile = new RandomAccessFile (file , "r" );
106
+ byte [] fileBytes = new byte [(int )randomAccessFile .length ()];
107
+ randomAccessFile .readFully (fileBytes );
108
+ return Base64 .encodeToString (fileBytes , Base64 .DEFAULT );
109
+ }
137
110
}
0 commit comments