Skip to content

Commit

Permalink
Latin/Cyrilic text support. Custom fonts connector. Android only! (ch…
Browse files Browse the repository at this point in the history
…ristopherdro#30)

var options = {
  html: '<h1>PDF TEST</h1>', // HTML String,

  // ****************** OPTIONS BELOW WILL WORK ON ANDROID ONLY
**************

  fonts: ['/fonts/TimesNewRoman.ttf', '/fonts/Verdana.ttf'] // Fonts
from Your_RN_Project/android/app/src/main/resources
}
  • Loading branch information
bbubn authored and christopherdro committed Jul 12, 2017
1 parent c9a4796 commit e97664a
Showing 1 changed file with 24 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,24 +7,33 @@
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.bridge.ReadableArray;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.ByteArrayInputStream;
import java.util.UUID;
import java.util.HashSet;
import java.util.Set;
import java.nio.charset.Charset;

import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.text.pdf.codec.Base64;
import com.itextpdf.tool.xml.XMLWorkerHelper;
import com.itextpdf.text.FontFactory;
import com.itextpdf.tool.xml.XMLWorkerFontProvider;

import android.os.Environment;

public class RNHTMLtoPDFModule extends ReactContextBaseJavaModule {

private Promise promise;
private final ReactApplicationContext mReactContext;
private Set<String> customFonts = new HashSet<>();

XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);

public RNHTMLtoPDFModule(ReactApplicationContext reactContext) {
super(reactContext);
Expand All @@ -50,6 +59,15 @@ public void convert(final ReadableMap options, final Promise promise) {
fileName = UUID.randomUUID().toString();
}

if (options.hasKey("fonts")) {
if (options.getArray("fonts") != null) {
final ReadableArray fonts = options.getArray("fonts");
for (int i = 0; i < fonts.size(); i++) {
customFonts.add(fonts.getString(i));
}
}
}

if (options.hasKey("directory") && options.getString("directory").equals("docs")) {
File path = new File(Environment.getExternalStorageDirectory(), Environment.DIRECTORY_DOCUMENTS);
if (!path.exists()) path.mkdir();
Expand Down Expand Up @@ -82,8 +100,13 @@ private String convertToPDF(String htmlString, File file) throws Exception {

PdfWriter pdf = PdfWriter.getInstance(doc, new FileOutputStream(file));

FontFactory.setFontImp(fontProvider);
for (String font : customFonts) {
fontProvider.register( font );
}

doc.open();
XMLWorkerHelper.getInstance().parseXHtml(pdf, doc,in);
XMLWorkerHelper.getInstance().parseXHtml(pdf, doc, in, null, Charset.forName("UTF-8"), fontProvider);
doc.close();
in.close();

Expand All @@ -108,5 +131,3 @@ private File getTempFile(String fileName) throws Exception {
}

}


0 comments on commit e97664a

Please sign in to comment.