Сохранение Linear layout в PDF Android Studio

Нужно сохранить Linear layout в PDF, при нажатии кнопки buttonSaveAsPDF ничего не происходит

public class ResultsManualSLP extends AppCompatActivity {
 
private LinearLayout pdf_layout;

private static final int REQUEST_PERMISSION = 1;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.results_manual_slp);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
  
    Button buttonSaveAsPDF = findViewById(R.id.button_PDF);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
        buttonSaveAsPDF.setVisibility(View.VISIBLE);
    else buttonSaveAsPDF.setVisibility(View.INVISIBLE);

    
    pdf_layout = findViewById(R.id.linearLayoutManSLP);

   
        buttonSaveAsPDF.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                checkPermission();
            }
        });

    }

private void checkPermission() {
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
            == PackageManager.PERMISSION_GRANTED
            && ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
            == PackageManager.PERMISSION_GRANTED) {

    } else {
        ActivityCompat.requestPermissions(this, new String[]{
                Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE
        }, REQUEST_PERMISSION);
    }

}

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                       @NonNull int[] grantResults) {

    switch (requestCode) {
        case REQUEST_PERMISSION: {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
                    generatePdf();
                }
            } else {
                // в разрешении отказано (в первый раз, когда чекбокс "Больше не спрашивать" ещё не показывается)
                if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                        Manifest.permission.READ_EXTERNAL_STORAGE)) {
                    finish();
                }
                // в разрешении отказано (выбрано "Больше не спрашивать")
                else {
                    // показываем диалог, сообщающий о важности разрешения
                    AlertDialog.Builder builder = new AlertDialog.Builder(this);
                    builder.setMessage(
                            "Вы отказались предоставлять разрешение на чтение хранилища.\n\nЭто необходимо для работы приложения."
                                    + "\n\n"
                                    + "Нажмите \"Предоставить\", чтобы предоставить приложению разрешения.")
                            // при согласии откроется окно настроек, в котором пользователю нужно будет вручную предоставить разрешения
                            .setPositiveButton("Предоставить", new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int id) {
                                    finish();
                                    Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
                                            Uri.fromParts("package", getPackageName(), null));
                                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                                    startActivity(intent);
                                }
                            })
                            // закрываем приложение
                            .setNegativeButton("Отказаться", new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int id) {
                                    finish();
                                }
                            });
                    builder.setCancelable(false);
                    builder.create().show();
                }
            }
            break;
        }
    }
}

@RequiresApi(api = Build.VERSION_CODES.O)
private void generatePdf() {
    DisplayMetrics displaymetrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
    float height = displaymetrics.heightPixels;
    float width = displaymetrics.widthPixels;

    int convertHeight = (int) height, convertWidth = (int) width;

    // создаем документ
    PdfDocument document = new PdfDocument();
    // определяем размер страницы
    PdfDocument.PageInfo pageInfo =
            new PdfDocument.PageInfo.Builder(convertWidth, convertHeight, 1).create();
    // получаем страницу, на котором будем генерировать контент
    PdfDocument.Page page = document.startPage(pageInfo);

    // получаем холст (Canvas) страницы
    Canvas canvas = page.getCanvas();

    Paint paint = new Paint();
    canvas.drawPaint(paint);

    // получаем контент, который нужно добавить в PDF, и загружаем его в Bitmap
    Bitmap bitmap = loadBitmapFromView(pdf_layout, pdf_layout.getWidth(), pdf_layout.getHeight());
    bitmap = Bitmap.createScaledBitmap(bitmap, convertWidth, convertHeight, true);

    // рисуем содержимое и закрываем страницу
    paint.setColor(Color.BLUE);
    canvas.drawBitmap(bitmap, 0, 0, null);
    document.finishPage(page);

    File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/PDF");
    if (!dir.exists()) {
        dir.mkdirs();
    }

    // сохраняем записанный контент
    LocalTime current = LocalTime.now();

    String targetPdf = dir.getAbsolutePath() + "/Отчет по параметрам сварки.pdf";
    File filePath = new File(targetPdf);
    try {
        document.writeTo(new FileOutputStream(filePath));
        Toast.makeText(getApplicationContext(), "PDf сохранён в " + filePath.getAbsolutePath(),
                Toast.LENGTH_SHORT).show();



 } catch (IOException e) {
        e.printStackTrace();
        Toast.makeText(this, "Что-то пошло не так: " + e.toString(), Toast.LENGTH_LONG).show();
    }

    // закрываем документ
    document.close();
}

public static Bitmap loadBitmapFromView(View v, int width, int height) {
    Bitmap b = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(b);
    v.draw(c);
    return b;
}

XML

<?xml version="1.0" encoding="utf-8"?>
<ScrollView 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:background="@color/white"
    tools:context=".ResultsManualSLP">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginStart="7dp"
    android:layout_marginEnd="7dp"
    android:orientation="vertical"
    tools:ignore="RtlHardcoded">

    <LinearLayout
        android:id="@+id/linearLayoutManSLP"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:fontFamily="sans-serif-black"
            android:gravity="center"
            android:text="ПАРАМЕТРЫ СВАРКИ"
            android:textColor="@color/black"
            android:textSize="28sp" />

        <TextView
            android:id="@+id/mainTitle_man_slp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:layout_marginBottom="20dp"
            android:fontFamily="sans-serif-black"
            android:gravity="center"
            android:text="ПРИ ЕДИНСТВЕННОМ НИЗКОМ ДАВЛЕНИИ"
            android:textColor="@color/black"
            android:textSize="18sp" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dp"
            android:layout_marginBottom="20dp"
            android:layout_weight="1"
            android:orientation="horizontal"
            android:padding="5dp">

            <TextView
                android:id="@+id/text_t6_coolNotPress_man_slp"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="8"
                android:gravity="start"
                android:text="Минимальное время охлаждения вне машины"
                android:textColor="@color/black"
                android:textSize="18sp" />

            <TextView
                android:id="@+id/t6_coolNotPres_man_slp"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="4"
                android:gravity="center"
                android:textColor="@color/black"
                android:textSize="18sp" />
        </LinearLayout>

        <TextView
            android:id="@+id/titleRecommendation_man_slp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="РЕКОМЕНДАЦИИ"
            android:textColor="@color/black"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/textRecommendation_man_slp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="start"
            android:textColor="@color/black"
            android:textSize="18sp" />

    </LinearLayout>

    <Button
        android:id="@+id/button_PDF"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="10dp"
        android:text="Сохранить в PDF"
        android:textColor="@color/black"
        android:textSize="15sp" />
</LinearLayout>
</ScrollView>

В манифест внес

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
    tools:ignore="ScopedStorage" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

В гредл

 implementation 'com.itextpdf:itextg:5.5.10'

Ответы (0 шт):