【问题标题】:HTML to PDF produces blank page when HTML gets large当 HTML 变大时,HTML 到 PDF 会产生空白页
【发布时间】:2021-01-04 14:10:09
【问题描述】:

我正在尝试使用模板根据我的数据制作报告。使用 WebView 的 PDF 工作得非常好,直到我的数据大于某个数字(在 for 循环中多 1 个),然后它只产生一个空白页。我在这里检查了所有可能的答案; thisthisthisthis,但没有成功。

这是我的代码的 sn-p:

        Bitmap bitmap = callback.getMapImage();

    WebView wv = new WebView(activity);
    wv.setWebViewClient(new WebViewClient() {

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);

            //print
            PrintManager printManager = (PrintManager) activity
                    .getSystemService(Context.PRINT_SERVICE);

            String jobName = activity.getString(R.string.app_name) + " Document";

            PrintDocumentAdapter printAdapter = wv.createPrintDocumentAdapter(jobName);

            printManager.print(jobName, printAdapter, new PrintAttributes.Builder().build());

            reference = null;
        }
    });

    PrepareDocumentForPrintTask printTask = new PrepareDocumentForPrintTask(wv, bitmap);
    printTask.execute();

并且 html 在 asyncTask 中创建并加载如下:

        @Override
    protected void onPostExecute(Triple<Boolean, String, File> result) {
        activity.runOnUiThread(() -> {
            if (result.getFirst()){
                wv.loadDataWithBaseURL("", result.getSecond(), "text/html", "UTF-8", null);
                reference = wv;
            } else
                Toast.makeText(activity, result.getSecond(), Toast.LENGTH_LONG).show();
        });
    }

我添加了 largeHeap="true" 并停用了硬件加速,但仍然没有成功。

知道如何解决这个问题吗?

【问题讨论】:

    标签: java android pdf webview


    【解决方案1】:

    好的,我使用以下代码找到了解决问题的方法:

    String urlDoc = saveHtmlFile("report",document);
                    wv.loadUrl("file://" + urlDoc);
    

    其中函数saveHtmlFile()如下:

    private @Nullable String saveHtmlFile(String fileName, String html) {
    
        try {
            File outputDir = this.activity.getCacheDir(); 
            File outputFile = File.createTempFile(fileName, ".html", outputDir);
            FileOutputStream out = new FileOutputStream(outputFile);
            byte[] data = html.getBytes();
            out.write(data);
            out.close();
            return outputFile.getPath();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    

    所以基本上,将 html 存储为临时文件并使用 loadUrl() 加载它解决了我的问题,这让我相信这应该是 WebView 中的一个错误!!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多