Конвертировать HTML в PDF с помощью веб-просмотра: не может создавать несколько страниц - PullRequest
0 голосов
/ 25 февраля 2019

Я работаю над одной функцией в моем текущем приложении, в которой я хочу преобразовать HTML-файл в формат PDF и сохранить его в хранилище.

, для этого я использую Печать документов HTML PdfDocument сейчас я не заинтересован в использовании iText, потому что им нужно, чтобы вы купили коммерческую лицензию.Я хочу добиться этой печати с помощью веб-просмотра.

Во-первых, я борюсь с отображением изображений и надлежащим отображаемым содержимым, чего я достиг, изменив свой код и HTML-файл. Теперь я не могу создать несколько страниц в формате PDF.я могу создать только одну страницу с очень маленькими изображениями и содержимым по размеру и все на одной странице вместо того, чтобы погружаться на другие страницы.

Я пытался перейти по какой-то ссылке, но не мог понять многое.

как получить весь контент Web View для генерации PDF-файла в Android?

Создание PDF из усеченных файлов WebView PDF

Вопрос: мой подход правильный !?Как я могу изменить createPdf (), чтобы он дал мне PDF с несколькими страницами.Предположим, мой HTML огромен и не помещается на одной странице А4.Нужно ли вручную создавать отдельные страницы, используя PdfDocument.Page (canvas) и startPage () и finishPage ()?Как бы я разделить WebView на основе размера страницы?Есть ли автоматический способ создания страниц?

Редактировать: я пытался изменить imgsrc, я загружаю и сохраняю изображение в папке активов

 img src="imagesharveyspecter.png" alt=" "
    mWebView.loadDataWithBaseURL("file:///android_asset/", htmlDocument, "text/HTML", "UTF-8", null);

мой код, как показано ниже:

private void doWebViewPrint() {
        mWebView.setWebViewClient(new WebViewClient() {

            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                return false;
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                Log.i(url, "page finished loading " + url);
                createWebPrintJob(view);
                mWebView = null;
            }
        });

        // Generate an HTML document on the fly:
        String htmlDocument = "my html file content";
        mWebView.loadDataWithBaseURL(null, htmlDocument, "text/HTML", "UTF-8", null);

    }

    private void createWebPrintJob(WebView webView) {
        String jobName = "pdfDocument";
        PrintAttributes attributes = new PrintAttributes.Builder()
                .setMediaSize(PrintAttributes.MediaSize.ISO_A1)
                .setResolution(new PrintAttributes.Resolution("pdf", "pdf", 600, 600))
                .setMinMargins(PrintAttributes.Margins.NO_MARGINS).build();

        File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM + "/PDFTest/");
        PdfPrint pdfPrint = new PdfPrint(attributes);
        pdfPrint.print(webView.createPrintDocumentAdapter(jobName), path, "output_" + System.currentTimeMillis() + ".pdf");
    }


public class PdfPrint{

    private static final String TAG = PdfPrint.class.getSimpleName();
    PrintAttributes printAttributes;

    public PdfPrint(PrintAttributes printAttributes) {
        this.printAttributes = printAttributes;
    }

    public void print(final PrintDocumentAdapter printAdapter, final File path, final String fileName) {
        printAdapter.onLayout(null, printAttributes, null, new PrintDocumentAdapter.LayoutResultCallback() {
            @Override
            public void onLayoutFinished(PrintDocumentInfo info, boolean changed) {
                printAdapter.onWrite(new PageRange[]{PageRange.ALL_PAGES}, getOutputFile(path, fileName), new CancellationSignal(),
                        new PrintDocumentAdapter.WriteResultCallback() {
                    @Override
                    public void onWriteFinished(PageRange[] pages) {
                        super.onWriteFinished(pages);
                    }
                });
            }
        }, null);
    }

    private ParcelFileDescriptor getOutputFile(File path, String fileName) {
        if (!path.exists()) {
            path.mkdirs();
        }
        File file = new File(path, fileName);
        try {
            file.createNewFile();
            return ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_WRITE);
        } catch (Exception e) {
            Log.e(TAG, "Failed to open ParcelFileDescriptor", e);
        }
        return null;
    }


}

1 Ответ

0 голосов
/ 03 марта 2019

если я понимаю ваш вопрос, вы можете использовать ниже репо:

https://github.com/mehrdadmmb2/richeditor-android

или это:

Создать PDF из Webview на Android

...