#android #react-native #react-android #react-native-modules
Вопрос:
Я строю приложение для смарт POS , используя реагировать родной и собственные модули , чтобы использовать Java Native-функций, и мне нужно отправить изображение билета на принтер, я получаю билет макета в HTML-коде и нужно преобразовать его в изображение, а для этого, я рендеринг этот html-код веб-просмотра, а затем распечатать его в растровое изображение с холста
Проблема: изображение не отображается должным образом, всегда имеет ширину и высоту, равные 0
У меня мало опыта в нативной разработке, так что в моем коде что-то не так?
мой код:
@ReactMethod
public void print() {
Activity activity = getCurrentActivity();
Context context = reactContext.getApplicationContext();
String path = Environment.getExternalStorageDirectory().getAbsolutePath() "/DCIM/print.jpg";
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
WebView wv = new WebView(context);
wv.loadData("<html><body style='width: 300px; height: 300px'><h1 style='color: #000'>Test</h1></body></html>", "text/html", null);
// mede o tamanho da webview
wv.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
// define o layout da webview
wv.layout(0, 0, wv.getMeasuredWidth(), wv.getMeasuredHeight());
// cria um bitmap
Bitmap bm = Bitmap.createBitmap(wv.getMeasuredWidth(), wv.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
// desenha o bitmap no canvas
Paint paint = new Paint();
Canvas cv = new Canvas(bm);
int height = bm.getHeight();
cv.drawBitmap(bm, 0, height, paint);
wv.draw(cv);
try {
FileOutputStream out = new FileOutputStream(path);
bm.compress(Bitmap.CompressFormat.JPEG, 100, out);
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
Комментарии:
1. Не уверен, что вы пытаетесь сделать . прежде чем получить размер, вам следует дождаться загрузки страницы . Установите
WebViewClient
перед загрузкой данные и выполните всю работу по измерению внутриonPageFinished
.