如何将多个图像从android中的文件夹转换为单个PDF?

Pra*_*rat 3 java android

我想让 android 应用程序将单个文件夹中的多个图像合并为单个 pdf 文件。

前任 :

文件夹名称 :

- 图片

    - 1.jpg
    - 2.jpg
    - 3.jpg
    - 4.jpg
    - 5.jpg
Run Code Online (Sandbox Code Playgroud)

有 5 张图片在名为的文件夹中 images

我怎样才能制作该图像的pdf?

如果有人有可能的解决方案,请评论答案:)

har*_*esh 8

在 4.4 版本之后试试这个它会工作。

  private void createPDF() {
    final File file = new File(uploadFolder, "AnswerSheet_" + queId + ".pdf");

    final ProgressDialog dialog = ProgressDialog.show(this, "", "Generating PDF...");
    dialog.show();
    new Thread(() -> {
        Bitmap bitmap;
        PdfDocument document = new PdfDocument();
           //  int height = 842;
             //int width = 595;
        int height = 1010;
        int width = 714;
        int reqH, reqW;
        reqW = width;

        for (int i = 0; i < array.size(); i++) {
               //  bitmap = BitmapFactory.decodeFile(array.get(i));
            bitmap = Utility.getCompressedBitmap(array.get(i), height, width);


            reqH = width * bitmap.getHeight() / bitmap.getWidth();
            Log.e("reqH", "=" + reqH);
            if (reqH < height) {
                  //  bitmap = Bitmap.createScaledBitmap(bitmap, reqW, reqH, true);
            } else {
                reqH = height;
                reqW = height * bitmap.getWidth() / bitmap.getHeight();
                Log.e("reqW", "=" + reqW);
                  //   bitmap = Bitmap.createScaledBitmap(bitmap, reqW, reqH, true);
            }
            // Compress image by decreasing quality
                // ByteArrayOutputStream out = new ByteArrayOutputStream();
               //  bitmap.compress(Bitmap.CompressFormat.WEBP, 50, out);
             //    bitmap = BitmapFactory.decodeStream(new ByteArrayInputStream(out.toByteArray()));
            //bitmap = bitmap.copy(Bitmap.Config.RGB_565, false);
              //Create an A4 sized page 595 x 842 in Postscript points.
          //PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(595, 842, 1).create();
            PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(reqW, reqH, 1).create();
            PdfDocument.Page page = document.startPage(pageInfo);
            Canvas canvas = page.getCanvas();

            Log.e("PDF", "pdf = " + bitmap.getWidth() + "x" + bitmap.getHeight());
            canvas.drawBitmap(bitmap, 0, 0, null);

            document.finishPage(page);
        }

        FileOutputStream fos;
        try {
            fos = new FileOutputStream(file);
            document.writeTo(fos);
            document.close();
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

        runOnUiThread(() -> {
            dismissDialog(dialog);

        });
    }).start();
}
Run Code Online (Sandbox Code Playgroud)


Tus*_*nik 5

如果要创建包含多个图像的 pdf 文件,可以使用Android 中的PdfDocument。这是一个演示:

private void createPDFWithMultipleImage(){
    File file = getOutputFile();
    if (file != null){
        try {
            FileOutputStream fileOutputStream = new FileOutputStream(file);
            PdfDocument pdfDocument = new PdfDocument();

            for (int i = 0; i < images.size(); i++){
                Bitmap bitmap = BitmapFactory.decodeFile(images.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 (IOException e) {
            e.printStackTrace();
        }
    }
}

private File getOutputFile(){
    File root = new File(this.getExternalFilesDir(null),"My PDF Folder");

    boolean isFolderCreated = true;

    if (!root.exists()){
        isFolderCreated = root.mkdir();
    }

    if (isFolderCreated) {
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.US).format(new Date());
        String imageFileName = "PDF_" + timeStamp;

        return new File(root, imageFileName + ".pdf");
    }
    else {
        Toast.makeText(this, "Folder is not created", Toast.LENGTH_SHORT).show();
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

这里的图像是带有路径的图像的 ArrayList。