CÁCH CHUYỂN ĐỔI HÌNH ẢNH SANG TỆP PDF BẰNG APACHE PDFBOX TRONG ANDROID (P2)

CÁCH CHUYỂN ĐỔI HÌNH ẢNH SANG TỆP PDF BẰNG APACHE PDFBOX TRONG ANDROID (P2)

Nếu bạn đang suy nghĩ về cách chuyển đổi tệp hình ảnh sang tệp PDF, thì ở hướng dẫn này, bạn sẽ tìm hiểu cách nó có thể được thực hiện trong Android.

Trong các hướng dẫn PDF trước của chúng ta, chúng ta đã đề cập đến cách tạo tệp PDF mới trong android và cách tải hoặc ghi tệp PDF trong android, vì vậy ở hướng dẫn này chúng ta sẽ tập trung vào cách chuyển đổi hình ảnh sang tệp PDF.

Dưới đây là ảnh chụp màn hình của ứng dụng chúng ta sẽ tạo.

Xem phần 1 của hướng dẫn ở đây.

6. MỞ LỚP ADDIMAGETOPDFACTIVITY

Cuối cùng, chúng ta sẽ kết nối tất cả các lớp và phương thức với nhau.

Chúng ta đã có được các tham chiếu View và đính kèm một trình lắng nghe sự kiện vào Fab button.

Khi click vào Fab button, nó sẽ mở Trình chọn tệp để người dùng chọn tệp hình ảnh.

Sau đó, các chi tiết hình ảnh sẽ được lưu trữ và sử dụng để tạo một tệp PDF mới.

Đây là code của AddImageToPdfActivity.

public class AddImageToPdfActivity extends AppCompatActivity {

    private static final String TAG = AddImageToPdfActivity.class.getSimpleName();

    private static final int PDF_REQUEST_CODE = 2121;

    private Document document;

    @BindView(R.id.selected_images)
    RecyclerView recyclerView;

    private List documents;

    private AddImageToPDF addImageToPDF;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_image_to_pdf);

        ButterKnife.bind(this);

        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null){
            actionBar.setTitle("Add Image to PDF");
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.create_pdf_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        int menuId = item.getItemId();
        if (menuId == android.R.id.home){
            onBackPressed();
        }
        if (menuId == R.id.action_create_pdf){
            //Add image(s) to pdf
            addImageToPDF.requestFilename();
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
    }

    private void setupList(List documents){
        SmartRecyclerAdapter
                .items(documents)
                .map(Document.class, ImageViewHolder.class)
                .setLayoutManager(new LinearLayoutManager(AddImageToPdfActivity.this))
                .into(recyclerView);
    }


    @OnClick(R.id.fab)
    public void onOpenFilePicker(View view){
        Intent intent = PdfFilePicker.openPdf(this, 3);
        startActivityForResult(intent, PDF_REQUEST_CODE);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK && requestCode == PDF_REQUEST_CODE) {
            getFileInStorage(data);
        }
    }

    private void getFileInStorage(@Nullable Intent data) {
        documents = new ArrayList();
        documents.clear();
        if (data != null) {
            ArrayList mediaFileArrayList = data.getParcelableArrayListExtra(FilePickerActivity.MEDIA_FILES);
            if (mediaFileArrayList != null) {
                for (MediaFile mediaFile : mediaFileArrayList){

                    String filePath = Helper.getPath(this, mediaFile.getUri());

                    if (!TextUtils.isEmpty(filePath) || filePath != null){
                        File file = new File(filePath);
                        document = new Document(file.getName(), Helper.formatSize(file.length()), Helper.formatDate(file.lastModified()), file.getAbsolutePath());
                        documents.add(document);
                        Log.d(TAG, "Selected Filename =  " + document.getDocumentName());
                    }
                }
                //show selected image
                setupList(documents);
                List paths = selectImagePaths();
                addImageToPDF = new AddImageToPDF(AddImageToPdfActivity.this, paths);
            }
        }
    }

    private List selectImagePaths(){
        List paths = new ArrayList();
        if (documents != null){
            for (Document document : documents){
                paths.add(document.getDocumentPath());
            }
        }
        return paths;
    }
}

7. TẠO FILE MENU LAYOUT

Chúng ta sẽ thêm một mục menu sẽ đóng vai trò như một nút để chuyển đổi hình ảnh sang tệp pdf.

Bên trong res folder, tạo một new resource folder và đặt tên cho nó là menu .

admin

Leave a Reply

Your email address will not be published. Required fields are marked *