Как мне отобразить и распечатать необработанный HTML на устройстве Android?

#java #android #html #printing #webview

#java #Android #HTML #печать #webview

Вопрос:

У меня есть Java-приложение, которое я переношу на Android. Одна из функций, которые у меня есть, — экспортировать сводку данных в HTML, который отображается в локальном браузере. Как мне имитировать эту функциональность на платформе Android? Цель состоит в том, чтобы позволить пользователю легко просматривать данные и сохранять / экспортировать / печатать по своему усмотрению.

Вот моя обычная версия Java для настольных компьютеров:

 String html = "<html><head><style type="text/css">.pagebreak {page-break-after: always;}.smallFont{font-size:10px}"   fancyCss   "</style>"   internationalCharacters   "</head><body>"   content   "</body></html>";

try {
    File file = File.createTempFile(filename, ".html");

    FileOutputStream stream = new FileOutputStream(file);

    stream.write(html.getBytes("UTF-8"));
    stream.flush();
    stream.close();

    Desktop.getDesktop().open(file);
} catch (IOException e) {
    e.printStackTrace();
}
  

Комментарии:

1. используйте WebView..

2. начните здесь: developer.android.com/guide/webapps/webview.html

Ответ №1:

Простой ответ — использовать webview.

включите webview в свой XML-файл

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"     
android:layout_width="match_parent"
android:layout_height="match_parent" 
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

<WebView
    android:id="@ id/myWebView"
    android:layout_alignParentLeft="true"
    android:layout_below="@ id/print_button"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
<Button
    android:text="Print"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:id="@ id/print_button" />
</RelativeLayout>
  

вы можете установить html-код для webview в своем классе Java.

 String html = "<html><body>Hello, World!</body></html>";
String mime = "text/html";
String encoding = "utf-8";

final WebView myWebView = (WebView)this.findViewById(R.id.myWebView);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.loadDataWithBaseURL(null, html, mime, encoding, null);

Button printButton = (Button)findViewById(R.id.print_button);
printButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
        createWebPrintJob(myWebView);
    }
});
  

И используйте следующий метод для выполнения задания на печать

 private void createWebPrintJob(WebView webView) {

    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
        PrintManager printManager = (PrintManager) this
                .getSystemService(Context.PRINT_SERVICE);

        PrintDocumentAdapter printAdapter =
                null;
        printAdapter = webView.createPrintDocumentAdapter("MyDocument");
        String jobName = getString(R.string.app_name)   " Print Test";

        printManager.print(jobName, printAdapter,
                new PrintAttributes.Builder().build());
    }
    else{
        Toast.makeText(MainActivity.this, "Print job has been canceled! ", Toast.LENGTH_SHORT).show();
    }

}
  

ПРИМЕЧАНИЕ: описанный выше метод работает только на diveces с Lollipop или более поздней версией. В любом случае вы можете сохранить свой webview в виде растрового изображения, если хотите.
Код протестирован и работает. Надеюсь, это поможет вам

Комментарии:

1. Наконец-то нашел время для этого. Итак, технически, да, он отображает HTML в соответствии с запросом. Моя проблема сейчас в том, что webview имеет нулевую функциональность. Я надеялся хотя бы на какие-то стандартные браузерные вещи, такие как Print. Доступно ли это? Или я могу просто отправить html в стандартный браузер?

2. @Chris. Коричневый. SPE вы можете распечатать webview. пожалуйста, посмотрите обновленный ответ. а также вы можете сохранить его как изображение, изменив webview в виде растрового изображения