Как передать документ арабского языка c с веб-сайта на принтер в веб-представлении android с использованием шрифтов арабского языка c? - PullRequest
0 голосов
/ 27 марта 2020

У меня есть веб-страница, которая активирует задание печати на Bluetooth-принтере. При нажатии кнопки «Печать» (кнопка) мой веб-просмотр передает html документ в другое приложение Bluetooth для печати html. Проблема в том, что когда я использую Google chrome, он работает нормально (задание на печать), но когда я использую свое веб-представление, оно меняется персонаж см. изображение первая печать напечатана приложением google chrome android, а вторая - это мое веб-представление

как я могу решить эту проблему, я новичок в android studioa, проверьте этот код строка выполняет задание на печать "intent.setType (" text / plain ");" это вызывает проблему?

private class MyBrowser extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (!Utility.isNetworkAvailable(MainActivity.this)) {
            return false;
        }
        if (URLUtil.isNetworkUrl(url)) {
            loaderRoot.setVisibility(View.VISIBLE);
            noInternetButton.setVisibility(View.GONE);
            view.setVisibility(View.VISIBLE);
            return false;
        }
        if (appInstalledOrNot(url)) {
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            startActivity(intent);
        } else {
            try {
                if (url.contains("fterplus://")) {
                    String content = url.split("\\?")[1];
                    Log.d("\nCONTENT: ", content);
                    Intent intent = new Intent();
                    intent.setAction(Intent.ACTION_SEND);
                    intent.putExtra(Intent.EXTRA_TEXT, content);
                    intent.setType("text/plain");
                    intent.setPackage("es.rcti.printerplus");
                    MainActivity.this.startActivity(intent);
                } else {
                    view.loadUrl(url);
                }
            } catch (android.content.ActivityNotFoundException ex) {
                String MakeShortText = "Please install PrinterPlus...";
                Utility.showToast(MainActivity.this, MakeShortText);
            }
        }

и это полный код

public class MainActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener {

private WebView webView;
private SwipeRefreshLayout refreshLayout;
private ValueCallback<Uri> mUploadMessage;
public ValueCallback<Uri[]> uploadMessage;
public static final int REQUEST_SELECT_FILE = 100;
private final static int FILECHOOSER_RESULTCODE = 1;
private SpinKitView loader = null;
private LinearLayout loaderRoot = null;
private LinearLayout noInternetButton;
private boolean loadingFinished = true;
private boolean redirect = false;
private WebView myWebView;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_hamza);
    initView();
    clickListeners();
    initWebView();
}

private void initView() {
    webView = findViewById(R.id.webView);
    noInternetButton = findViewById(R.id.noInternetBtn);
    loader = findViewById(R.id.spin_kit);
    loaderRoot = findViewById(R.id.loaderRoot);
    Sprite drawable = SpriteFactory.create(Style.WAVE);
    drawable.setColor(Color.BLACK);
    loader.setIndeterminateDrawable(drawable);
}

private void initWebView() {
    WebSettings mWebSettings = webView.getSettings();
    mWebSettings.setJavaScriptEnabled(true);
    mWebSettings.setSupportZoom(false);
    mWebSettings.setAllowFileAccess(true);
    mWebSettings.setAllowFileAccess(true);
    mWebSettings.setAllowContentAccess(true);
    mWebSettings.setJavaScriptCanOpenWindowsAutomatically(true);
    webView.setWebViewClient(new MyBrowser());
    webView.loadUrl("https://pakistanshop.pk");
    refreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefresh);
    refreshLayout.setOnRefreshListener(this);
    webView.setDownloadListener(new DownloadListener() {
        @Override
        public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimeType, long contentLength) {
            DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
            request.setMimeType(mimeType);
            //------------------------COOKIE!!------------------------
            String cookies = CookieManager.getInstance().getCookie(url);
            request.addRequestHeader("cookie", cookies);
            //------------------------COOKIE!!------------------------
            request.addRequestHeader("User-Agent", userAgent);
            request.setDescription("Downloading file...");
            request.setTitle(URLUtil.guessFileName(url, contentDisposition, mimeType));
            request.allowScanningByMediaScanner();
            request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
            request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, URLUtil.guessFileName(url, contentDisposition, mimeType));
            DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
            dm.enqueue(request);
            Toast.makeText(getApplicationContext(), "Downloading File", Toast.LENGTH_LONG).show();
        }
    });
    webView.setWebChromeClient(new WebChromeClient() {
        // For 3.0+ Devices (Start)
        // onActivityResult attached before constructor
        protected void openFileChooser(ValueCallback uploadMsg, String acceptType) {
            mUploadMessage = uploadMsg;
            Intent i = new Intent(Intent.ACTION_GET_CONTENT);
            i.addCategory(Intent.CATEGORY_OPENABLE);
            i.setType("image/*");
            startActivityForResult(Intent.createChooser(i, "File Browser"), FILECHOOSER_RESULTCODE);
        }


        // For Lollipop 5.0+ Devices
        @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
        public boolean onShowFileChooser(WebView mWebView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) {
            if (uploadMessage != null) {
                uploadMessage.onReceiveValue(null);
                uploadMessage = null;
            }

            uploadMessage = filePathCallback;

            Intent intent = fileChooserParams.createIntent();
            try {
                startActivityForResult(intent, REQUEST_SELECT_FILE);
            } catch (ActivityNotFoundException e) {
                uploadMessage = null;
                Toast.makeText(MainActivity.this.getApplicationContext(), "Cannot Open File Chooser", Toast.LENGTH_LONG).show();
                return false;
            }
            return true;
        }

    });
}



@Override
public void onRefresh() {
    webView.reload();
    refreshLayout.setRefreshing(false);
}

private class MyBrowser extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (!Utility.isNetworkAvailable(MainActivity.this)) {
            return false;
        }
        if (URLUtil.isNetworkUrl(url)) {
            loaderRoot.setVisibility(View.VISIBLE);
            noInternetButton.setVisibility(View.GONE);
            view.setVisibility(View.VISIBLE);
            return false;
        }
        if (appInstalledOrNot(url)) {
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            startActivity(intent);
        } else {
            try {
                if (url.contains("fterplus://")) {
                    String content = url.split("\\?")[1];
                    Log.d("\nCONTENT: ", content);
                    Intent intent = new Intent();
                    intent.setAction(Intent.ACTION_SEND);
                    intent.putExtra(Intent.EXTRA_TEXT, content);
                    intent.setType("text/plain");
                    intent.setPackage("es.rcti.printerplus");
                    MainActivity.this.startActivity(intent);
                } else {
                    view.loadUrl(url);
                }
            } catch (android.content.ActivityNotFoundException ex) {
                String MakeShortText = "Please install PrinterPlus...";
                Utility.showToast(MainActivity.this, MakeShortText);
            }
        }

        return true;
    }


    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {

        if (!Utility.isNetworkAvailable(MainActivity.this)) {
            view.setVisibility(View.GONE);
            noInternetButton.setVisibility(View.VISIBLE);
            loaderRoot.setVisibility(View.INVISIBLE);
            webView.stopLoading();
            return;
        }
        noInternetButton.setVisibility(View.GONE);
        webView.setVisibility(View.VISIBLE);
        loaderRoot.setVisibility(View.VISIBLE);
        super.onPageStarted(view, url, favicon);
    }

    @Override
    public void onLoadResource(WebView view, String url) {
        if (!Utility.isNetworkAvailable(MainActivity.this)) {
            return;
        }
        super.onLoadResource(view, url);
    }


    @Override
    public void onPageFinished(WebView view, String url) {
        loaderRoot.setVisibility(View.INVISIBLE);
        if (!Utility.isNetworkAvailable(MainActivity.this)) {
            return;
        }

        super.onPageFinished(view, url);

    }

    @Override
    public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
        if (!Utility.isNetworkAvailable(MainActivity.this)) {
            return;
        }
        super.onReceivedError(view, request, error);
    }
}

private boolean appInstalledOrNot(String uri) {
    PackageManager pm = getPackageManager();
    try {
        pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
        return true;
    } catch (PackageManager.NameNotFoundException e) {
        Log.e("Exception", e.getMessage());
    }

    return false;
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {

    if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
        webView.goBack();
        return true;
    }

    return super.onKeyDown(keyCode, event);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        if (requestCode == REQUEST_SELECT_FILE) {
            if (uploadMessage == null)
                return;
            uploadMessage.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(resultCode, intent));
            uploadMessage = null;
        }
    } else if (requestCode == FILECHOOSER_RESULTCODE) {
        if (null == mUploadMessage)
            return;
        Uri result = intent == null || resultCode != MainActivity.RESULT_OK ? null : intent.getData();
        mUploadMessage.onReceiveValue(result);
        mUploadMessage = null;
    } else
        Toast.makeText(MainActivity.this.getApplicationContext(), "Failed to Upload Image", Toast.LENGTH_LONG).show();
}


private void clickListeners() {
    noInternetButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onRefresh();
        }
    });
}

}

...