Android WebView createPrintDocumentAdapter генерирует разные PDF на разных устройствах - PullRequest
0 голосов
/ 24 апреля 2020

Я хочу напечатать PDF-файл в формате Android на принтерах Bluetooth. Поскольку у меня недостаточно времени для разработки драйвера Bluetooth или использования специального SDK для каждого принтера, я купил программное обеспечение третьей стороны (приложение, € 6), способное обрабатывать соединение Bluetooth для большого количества принтеров Bluetooth.

Для создания PDF-файла для печати я использую веб-просмотр:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.xxxxx);

        WebView.enableSlowWholeDocumentDraw();
        WebView oWebView = findViewById(R.id.xxxxx);
        oWebView.setPadding(0, 0, 0, 0);
        oWebView.setInitialScale(1);
        oWebView.getSettings().setUseWideViewPort(true);
        oWebView.getSettings().setJavaScriptEnabled(false);
        oWebView.getSettings().setLoadWithOverviewMode(false);
        oWebView.setScrollbarFadingEnabled(false);
        oWebView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);

        String htmlTest = "<html>" +
                "<head>" +
                "<meta HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=utf-8\" /><title>" +
                "</title>" +
                "<style type=\"text/css\">" +
                "    @page {" +
                "            margin-left: 0px;" +
                "            margin-right: 0px;" +
                "            margin-top: 0px;" +
                "            margin-bottom: 0px;" +
                "        }" +
                "         </style></head><body>" +
                "        <h1>VERITAS VOS LIBERABIT</h1>" +
                "    </body>" +
                "</html>";

        oWebView.loadData(htmlTest, "text/html", "utf-8");

        print(oWebView);
    }

И метод печати:

private void print(WebView oWeView) {

        PrintDocumentAdapter doc = oWeView.createPrintDocumentAdapter("printTest.pdf");
        PrintAttributes attributes = new PrintAttributes.Builder()
                .setMediaSize(PrintAttributes.MediaSize.ISO_A4)
                .setResolution(new PrintAttributes.Resolution("pdf", "pdf", 600, 600))
                .setMinMargins(PrintAttributes.Margins.NO_MARGINS).build();

        // Get a PrintManager instance
        PrintManager printManager = (PrintManager) this.getSystemService(Context.PRINT_SERVICE);
        if (printManager != null) {
            printManager.print("Document", doc, attributes);
        }
    }

После использования следующего кода для печати и заботы о При печати используйте те же параметры печати, что и в моей третьей программе. Я вижу, что напечатанные PDF-файлы имеют разные размеры при печати на разных устройствах. (moto e5, samsung A10).

image

In order to find out which part its not working as I expect I want to save the pdfs to disk and compare them. Now I need the following class to do so: (NOTE: be careful to put this class in the right package: android.print because otherwise compile errors occur.)

package android.print; // 

And my save pdf file method:

private void printAsPdfFile(WebView webView) {

               String jobName = getString(R.string.app_name) + " Document";
            PrintAttributes attributes = new PrintAttributes.Builder()
                    .setMediaSize(PrintAttributes.MediaSize.ISO_A4)
                    .setResolution(new PrintAttributes.Resolution("pdf", "pdf", 600, 600))
                    .setMinMargins(PrintAttributes.Margins.NO_MARGINS).build();
            File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS + "/PDFTest/");
            PdfPrint pdfPrint = new PdfPrint(attributes);
            pdfPrint.print(webView.createPrintDocumentAdapter(jobName), path, "output_" + System.currentTimeMillis() + ".pdf");
        }

enter image description here

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

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...