3

http://developer.android.com/training/printing/index.html документация рассказывает о том, как печатать пользовательский контент, отображая его на холсте PDF и отправляя при этом созданный документ PDF для печати. Но у вас нет информации о том, есть ли у нас документ в формате PDF, как отправить его для печати?Печать PDF непосредственно с помощью PrintManager Android 4.4

Как и для растровой печати, существует некоторый метод, например printHelper.printPDF?

ответ

4

Используйте следующий фрагмент кода в вашем onWrite() метод должен сделать это:

InputStream input = null; 
OutputStream output = null; 
try { 
    input = new FileInputStream(new File("somefile.pdf")); 
    output = new FileOutputStream(destination.getFileDescriptor()); 
    byte[] buf = new byte[1024]; 
    int bytesRead; 
    while ((bytesRead = input.read(buf)) > 0) { 
     output.write(buf, 0, bytesRead); 
    } 
} catch (Exception e) { 

} finally { 
    try { 
     input.close(); 
     output.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+0

при использовании приведенного выше кода, кнопка печати показывает, как отключенные –

+0

игнорировать мой предыдущий комментарий, после того, как некоторые изменения в методе OnLayout теперь это работает fine –

+0

@ Dinesh вы можете помочь мне с тем, что вы сделали в методе onLayout – sreeraag

0

Так вот что я сделал ....

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 
@RequiresApi(api = Build.VERSION_CODES.KITKAT) 
public void clicked(View view){ //Button To start print 
    PrintManager printManager = (PrintManager) this.getSystemService(Context.PRINT_SERVICE); 
    String jobName = this.getString(R.string.app_name) + " Document"; 
    printManager.print(jobName, pda, null); 
} 
PrintDocumentAdapter pda = new PrintDocumentAdapter() 
{ 

    @RequiresApi(api = Build.VERSION_CODES.KITKAT) 
    @Override 
    public void onWrite(PageRange[] pages, ParcelFileDescriptor destination, CancellationSignal cancellationSignal, WriteResultCallback callback) 
    { 
     InputStream input = null; 
     OutputStream output = null; 
     try { 
      input = new FileInputStream(new File("/storage/emulated/0/Download/file_name.pdf")); 
      output = new FileOutputStream(destination.getFileDescriptor()); 
      byte[] buf = new byte[1024]; 
      int bytesRead; 
      while ((bytesRead = input.read(buf)) > 0) { 
       output.write(buf, 0, bytesRead); 
      } 
     } 
     catch (Exception e) { 

     } finally { 
      try { 
       input.close(); 
       output.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
     callback.onWriteFinished(new PageRange[]{PageRange.ALL_PAGES}); 
    } 

    @RequiresApi(api = Build.VERSION_CODES.KITKAT) 
    @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("file_name.pdf").setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT).build(); 
     callback.onLayoutFinished(pdi, true); 



    } 
}; 

}

Android Manifest >>>

ADD Разрешения

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

Мой телефон не поддерживает SD-карта, но все-таки я должен был написать READ_EXTERNAL_STORAGE

 Смежные вопросы

  • Нет связанных вопросов^_^