Несколько изображений из галереи конвертировать в PDF - PullRequest
0 голосов
/ 25 сентября 2019

Привет, может кто-нибудь помочь мне, как я могу добавить в pdf выбранные изображения из галереи?У меня уже есть рабочий код, но он может конвертировать только одно растровое изображение.

     @RequiresApi(api = Build.VERSION_CODES.KITKAT)
private void createPdf(){
    WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
    Display display = wm.getDefaultDisplay();
    DisplayMetrics displaymetrics = new DisplayMetrics();
    this.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
    float hight = displaymetrics.heightPixels ;
    float width = displaymetrics.widthPixels ;

    int convertHighet = (int) hight, convertWidth = (int) width;

    PdfDocument document = new PdfDocument();
    PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(bitmap.getWidth(), bitmap.getHeight(), 1).create();
    PdfDocument.Page page = document.startPage(pageInfo);

    Canvas canvas = page.getCanvas();


    Paint paint = new Paint();
    paint.setColor(Color.parseColor("#ffffff"));
    canvas.drawPaint(paint);

    bitmap = Bitmap.createScaledBitmap(bitmap, bitmap.getWidth(), bitmap.getHeight(), true);

    paint.setColor(Color.BLUE);
    canvas.drawBitmap(bitmap, 0, 0 , null);
    document.finishPage(page);

    // write the document content
    String targetPdf = "/sdcard/test.pdf";
    File filePath = new File(targetPdf);
    try {
        document.writeTo(new FileOutputStream(filePath));
        btn_convert.setText("Check PDF");
        boolean_save=true;
    } catch (IOException e) {
        e.printStackTrace();
        Toast.makeText(this, "Something wrong: " + e.toString(), Toast.LENGTH_LONG).show();
    }

    // close the document
    document.close();
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == GALLERY_PICTURE && resultCode == RESULT_OK) {
        if (resultCode == RESULT_OK) {
            Uri uri = data.getData();

            if(uri != null) {
                Cursor cursor = getContentResolver().query(uri, new String[] {
                                android.provider.MediaStore.Images.ImageColumns.DATA},
                        null, null, null);
                cursor.moveToFirst();
                String imageFilePath = cursor.getString(0);
                cursor.close();
                iv_image.setImageURI(uri);
                encodedImage = imageFilePath;

        } else {
            tv_Load.setText("There's an error");

        }
    }
}

Это мои объявления / поля.

public static final int GALLERY_PICTURE = 1;
public static final int REQUEST_PERMISSIONS = 1;
Button btn_select, btn_convert, btn_upload;
Bitmap bitmap;

Вот мой код, который может выбирать несколько изображений, но не может конвертировать растровые изображения в PDF.Сохраняет, но говорит, что PDF имеет неверный формат.

        @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == GALLERY_PICTURE && resultCode == RESULT_OK) {
        if (resultCode == RESULT_OK) {
            final List<Bitmap> bitmaps = new ArrayList<>();
            ClipData clipData = data.getClipData();
            if (clipData != null) {
                for (int i = 0; i < clipData.getItemCount(); i++) {
                    Uri imageUri = clipData.getItemAt(i).getUri();
                    try {
                        InputStream is = getContentResolver().openInputStream(imageUri);
                        Bitmap bitmap = BitmapFactory.decodeStream(is);
                        bitmaps.add(bitmap);
                        bitmapcount = clipData.getItemCount();
                        Toast.makeText(getApplicationContext(),"Image Selected: " + clipData.getItemCount(), Toast.LENGTH_SHORT).show();
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    }
                }
            } else {
                Uri imageUri = data.getData();
                try {
                    InputStream is = getContentResolver().openInputStream(imageUri);
                    Bitmap bitmap = BitmapFactory.decodeStream(is);
                    bitmaps.add(bitmap);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
            }
            new Thread(new Runnable() {
                @Override
                public void run() {
                    for (final Bitmap b : bitmaps) {
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                iv_image.setImageBitmap(b);


                            }
                        });
                        try {
                            Thread.sleep(3000);

                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }).start();
        }
    }
}

@RequiresApi(api = Build.VERSION_CODES.KITKAT)
private void createPdf(){

    WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
    Display display = wm.getDefaultDisplay();
    DisplayMetrics displaymetrics = new DisplayMetrics();
    this.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
    float hight = displaymetrics.heightPixels ;
    float width = displaymetrics.widthPixels ;

    int convertHighet = (int) hight, convertWidth = (int) width;

    PdfDocument document = new PdfDocument();
    if (bitmapcount > 1){
        for(int i = 0; i < bitmapcount; i++ ){
            try {
                PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(bitmap.getWidth(), bitmap.getHeight(), i).create();
                PdfDocument.Page page = document.startPage(pageInfo);

                Canvas canvas = page.getCanvas();


                Paint paint = new Paint();
                paint.setColor(Color.parseColor("#ffffff"));
                canvas.drawPaint(paint);

                bitmap = Bitmap.createScaledBitmap(bitmap, bitmap.getWidth(), bitmap.getHeight(), true);

                paint.setColor(Color.BLUE);
                canvas.drawBitmap(bitmap, 0, 0 , null);
                document.finishPage(page);
                i++;
            } catch (Exception e){
                e.printStackTrace();
            }

        }
    }

    //document content311
    String directory_path = Environment.getExternalStorageDirectory().getPath() + "/mypdf/";
    File file = new File(directory_path);
    if (!file.exists()) {
        file.mkdirs();
    }
    String targetPdf = directory_path + "JO-" + editText.getText().toString() + ".pdf";
    File filePath = new File(targetPdf);
    try {
        document.writeTo(new FileOutputStream(filePath));
        btn_convert.setText("Check PDF");
        boolean_save=true;
        pdfPath = filePath.getPath();
    } catch (IOException e) {
        e.printStackTrace();
        Toast.makeText(this, "Something wrong: " + e.toString(), Toast.LENGTH_LONG).show();
    }

    // close the document
    document.close();
}

Поля

       private static int bitmapcount = 0;    
public static final int GALLERY_PICTURE = 1;
public static final int REQUEST_PERMISSIONS = 1;
Button btn_select, btn_convert, btn_upload;
Bitmap bitmap;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...