How to render a PDF file in Android

后端 未结 9 956
猫巷女王i
猫巷女王i 2020-11-22 02:09

Android does not have PDF support in its libraries. Is there any way to render PDF files in the Android applications?

9条回答
  •  鱼传尺愫
    2020-11-22 02:43

    I used the below code to open and print the PDF using Wi-Fi. I am sending my whole code, and I hope it is helpful.

    public class MainActivity extends Activity {
    
        int Result_code = 1;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Button mButton = (Button)findViewById(R.id.button1);
    
            mButton.setOnClickListener(new View.OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
    
                     PrintManager printManager = (PrintManager)getSystemService(Context.PRINT_SERVICE);
                    String jobName =  " Document";
                    printManager.print(jobName, pda, null);
                }
            });
        }
    
    
        public void openDocument(String name) {
    
            Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
            File file = new File(name);
            String extension = android.webkit.MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(file).toString());
            String mimetype = android.webkit.MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    
            if (extension.equalsIgnoreCase("") || mimetype == null) {
                // if there is no extension or there is no definite mimetype, still try to open the file
                intent.setDataAndType(Uri.fromFile(file), "text/*");
            }
            else {
                intent.setDataAndType(Uri.fromFile(file), mimetype);
            }
    
            // custom message for the intent
            startActivityForResult((Intent.createChooser(intent, "Choose an Application:")), Result_code);
            //startActivityForResult(intent, Result_code);
            //Toast.makeText(getApplicationContext(),"There are no email clients installed.", Toast.LENGTH_SHORT).show();
        }
    
    
        @SuppressLint("NewApi")
        PrintDocumentAdapter pda = new PrintDocumentAdapter(){
    
            @Override
            public void onWrite(PageRange[] pages, ParcelFileDescriptor destination, CancellationSignal cancellationSignal, WriteResultCallback callback){
                InputStream input = null;
                OutputStream output = null;
    
                try {
                    String filename = Environment.getExternalStorageDirectory()    + "/" + "Holiday.pdf";
                    File file = new File(filename);
                    input = new FileInputStream(file);
                    output = new FileOutputStream(destination.getFileDescriptor());
    
                    byte[] buf = new byte[1024];
                    int bytesRead;
    
                    while ((bytesRead = input.read(buf)) > 0) {
                         output.write(buf, 0, bytesRead);
                    }
    
                    callback.onWriteFinished(new PageRange[]{PageRange.ALL_PAGES});
                }
                catch (FileNotFoundException ee){
                    //Catch exception
                }
                catch (Exception e) {
                    //Catch exception
                }
                finally {
                    try {
                        input.close();
                        output.close();
                    }
                    catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
    
            @Override
            public void onLayout(PrintAttributes oldAttributes, PrintAttributes newAttributes, CancellationSignal cancellationSignal, LayoutResultCallback callback, Bundle extras){
    
                if (cancellationSignal.isCanceled()) {
                    callback.onLayoutCancelled();
                    return;
                }
    
               // int pages = computePageCount(newAttributes);
    
                PrintDocumentInfo pdi = new PrintDocumentInfo.Builder("Name of file").setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT).build();
    
                callback.onLayoutFinished(pdi, true);
            }
        };
    }
    

提交回复
热议问题