首页 > 解决方案 > 如何在 Android 中将所选图像从 Image Switcher 转换为 PDF?

问题描述

我正在从图库中选择多个图像并将其显示在图像切换器中。我想将图像切换器中显示的所有这些图像转换为 PDF。我正在使用android.graphics.pdf.PdfDocument,但我不知道如何正确使用它将多个图像转换为 PDF。如何将多个图像转换为 PDF?我尝试过的代码示例:

我的 Android Studio IDE 中的 IMG2PDF.java:

public class IMG2PDF extends AppCompatActivity {
    Toolbar toolbar;
    Button selectfilebtn,convert2pdfbtn,nextbtn,prevbtn;
    ArrayList<Uri> imageuri =new ArrayList<>();;
    ImageSwitcher imageSwitcher;
    private static final int PICK_IMAGES=0;
    int position=0;
    int img;
    @Override
    public void onCreate( Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_imagetopdfconverter);
        selectfilebtn = findViewById(R.id.select_file);
        convert2pdfbtn = findViewById(R.id.convert_to_pdf);
        nextbtn = findViewById(R.id.next);
        prevbtn = findViewById(R.id.prev);
        imageSwitcher = findViewById(R.id.imagetoconvert);

        imageSwitcher.setFactory(new ViewSwitcher.ViewFactory() {
            @Override
            public View makeView() {
                ImageView imageView = new ImageView(IMG2PDF.this);
                return imageView;
            }
        });
        ActivityResultLauncher<Intent> launchactivity = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
            @Override
            public void onActivityResult(ActivityResult result) {
                Intent data = result.getData();
                if (data.getClipData() != null) {

                    img = data.getClipData().getItemCount();
                    for (int i = 0; i < img; i++) {
                        Uri imguri = data.getClipData().getItemAt(i).getUri();
                        imageuri.add(imguri);
                    }
                    imageSwitcher.setImageURI(imageuri.get(0));
                    position = 0;
                }
            }
        });
        selectfilebtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(IMG2PDF.this, "Soon the App will be world best App InShaAllah ta'aala", Toast.LENGTH_SHORT).show();
                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                intent.setType("image/*");
                intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
                intent.setAction(Intent.ACTION_GET_CONTENT);
                launchactivity.launch(Intent.createChooser(intent, "Pictures: "));
            }
        });
        nextbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (position > 0) {
                    position--;
                    imageSwitcher.setImageURI(imageuri.get(position));
                }
            }
        });
        convert2pdfbtn.setOnClickListener(new View.OnClickListener() {
            @RequiresApi(api = Build.VERSION_CODES.KITKAT)
            @Override
            public void onClick(View v) {
                //I dont know what to provide in Path
                final File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),"MY_PDF"+".pdf");
                if(file!=null)
                {
                    try {
                        FileOutputStream fileOutputStream=new FileOutputStream(file);
                        PdfDocument pdfDocument=new PdfDocument();
                        for(int i=0;i<imageuri.size();i++)
                        {

                            Bitmap bitmap= BitmapFactory.decodeFile(imageuri.get(i).getPath());
                            PdfDocument.PageInfo pageInfo=new PdfDocument.PageInfo.Builder(bitmap.getWidth(),bitmap.getHeight(),(i+1)).create();
                            PdfDocument.Page page=pdfDocument.startPage(pageInfo);
                            Canvas canvas=page.getCanvas();
                            Paint paint=new Paint();
                            paint.setColor(Color.BLUE);
                            canvas.drawPaint(paint);
                            canvas.drawBitmap(bitmap,0f,0f,null);
                            pdfDocument.finishPage(page);
                            bitmap.recycle();
                        }
                        pdfDocument.writeTo(fileOutputStream);
                        pdfDocument.close();

                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
        prevbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(IMG2PDF.this, "WORKING", Toast.LENGTH_SHORT).show();
                if (position < imageuri.size() - 1) {
                    position++;
                    imageSwitcher.setImageURI(imageuri.get(position));
                }
            }
        });
    }
}

标签: javaandroidandroid-studioandroid-bitmap

解决方案


推荐阅读