2016-05-16 3 views
0

Je fais une application Android, à travers lequel l'utilisateur peut choisir un fichier pdf existant sur son appareil et après vérification, l'envoyer pour être imprimé via Google Cloud. L'imprimante est connectée à mon propre identifiant Gmail et seulement j'ai le droit d'envoyer un travail d'impression. Donc, après que l'utilisateur a vérifié le travail d'impression est envoyé par mon mail Id. Je suis débutant et vos conseils sont appréciés. Merci d'avance :)Comment permettre à l'utilisateur de localiser un fichier pdf sur un périphérique Android, qui doit être imprimé via le service d'impression google cloud intégré dans une application?

+0

Conseils au sujet de quoi? – m02ph3u5

Répondre

0
//It´s very easy don´t forget add to manifest permissions. 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 

import android.Manifest; 
import android.content.pm.PackageManager; 
import android.os.Environment; 
import android.support.v4.app.ActivityCompat; 
import android.support.v4.content.ContextCompat; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.os.CancellationSignal; 
import android.os.ParcelFileDescriptor; 
import android.print.PageRange; 
import android.print.PrintAttributes; 
import android.print.PrintDocumentAdapter; 
import android.content.Context; 
import android.print.PrintDocumentInfo; 
import android.print.pdf.PrintedPdfDocument; 
import android.graphics.pdf.PdfDocument; 
import android.graphics.pdf.PdfDocument.PageInfo; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.print.PrintManager; 
import android.view.View; 

public class MainActivity extends AppCompatActivity { 
//Your file path 
String Ruta= Environment.getExternalStorageDirectory().getPath()+"/MiPdf1.pdf"; 
File file=new File(Ruta); 

public void printDocument(View view) 
{ 
    PrintManager printManager = (PrintManager) this 
      .getSystemService(Context.PRINT_SERVICE); 

    String jobName = this.getString(R.string.app_name) + 
      " Document"; 

    printManager.print(jobName, new 
        MyPrintDocumentAdapter(this), 
      null); 
} 

public class MyPrintDocumentAdapter extends PrintDocumentAdapter 
{ 
    Context context; 
    private int pageHeight; 
    private int pageWidth; 
    public PdfDocument myPdfDocument; 
    public int totalpages = 4; 

    private boolean pageInRange(PageRange[] pageRanges, int page) 
    { 
     for (int i = 0; i<pageRanges.length; i++) 
     { 
      if ((page >= pageRanges[i].getStart()) && 
        (page <= pageRanges[i].getEnd())) 
       return true; 
     } 
     return false; 
    } 

    public MyPrintDocumentAdapter(Context context) 
    { 
     this.context = context; 
    } 

    @Override 
    public void onWrite(PageRange[] pages, ParcelFileDescriptor destination, CancellationSignal cancellationSignal, WriteResultCallback callback){ 
     InputStream input = null; 
     OutputStream output = null; 

     try { 

      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); 
    } 
}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    //If android version is 6.0 
    if (!(ContextCompat.checkSelfPermission(this.getApplicationContext(), "android.permission.READ_EXTERNAL_STORAGE") == 0)) { 
     ActivityCompat.requestPermissions(this, new String[]{ "android.permission.READ_EXTERNAL_STORAGE"}, 1); 
    } 
} 
} 
+0

Cela ne semble pas si simple. Pourriez-vous détailler un peu plus ce que vous avez l'intention de faire avec ce code? –