Imprima varias páginas PDF utilizando el marco de impresión de Android 4.4

Quiero pedir ayuda. Quiero imprimir / crear documento pdf. Puedo crear una página pdf y escribir datos a esta página a través de lienzo. El problema es que no sé cómo puedo crear otra página pdf y continuar escribiendo a esta segunda página. Si alguien tiene alguna experiencia voy a ayudar muy completo paso mucho tiempo con esto.

Yo uso esto: https://developer.android.com/reference/android/print/pdf/PrintedPdfDocument.html

Parte de mi código está allí:

private void doPrint(int _docNumber){ docNumber = _docNumber; //get Printmanager instance PrintManager printManager = (PrintManager)this.getSystemService(Context.PRINT_SERVICE); // Set job name, which will be displayed in the print queue String jobName = getString(R.string.app_name) + " dokument"; // Start a print job, passing in a PrintDocumentAdapter implementation // to handle the generation of a print document printManager.print(jobName, new MyPrintDocAdapter(), null); Toast.makeText(getBaseContext(), "Príprava na tlač...", Toast.LENGTH_SHORT).show(); } public class MyPrintDocAdapter extends PrintDocumentAdapter { Context context; private int pageHeight; private int pageWidth; public PdfDocument myPdfDocument; @Override public void onLayout(PrintAttributes oldAttributes, PrintAttributes newAttributes, CancellationSignal cancellationSignal, LayoutResultCallback callback, Bundle extras) { myPdfDocument = new PrintedPdfDocument(context, newAttributes); pageHeight = newAttributes.getMediaSize().getHeightMils()/1000 * 72; pageWidth = newAttributes.getMediaSize().getWidthMils()/1000 * 72; if (cancellationSignal.isCanceled() ) { callback.onLayoutCancelled(); return; } if (totalpages > 0) { PrintDocumentInfo.Builder builder = new PrintDocumentInfo .Builder("Dokument_"+ docNumber + ".pdf") .setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT) .setPageCount(totalpages); PrintDocumentInfo info = builder.build(); callback.onLayoutFinished(info, true); } else { callback.onLayoutFailed("Počet strán je nula."); } } @Override public void onWrite(final PageRange[] pageRanges, final ParcelFileDescriptor destination, final CancellationSignal cancellationSignal, final WriteResultCallback callback) { for (int i = 0; i < totalpages; i++) { if (pageInRange(pageRanges, i)) { PdfDocument.PageInfo newPage = new PdfDocument.PageInfo.Builder(pageWidth, pageHeight, i).create(); PdfDocument.Page page = myPdfDocument.startPage(newPage); if (cancellationSignal.isCanceled()) { callback.onWriteCancelled(); myPdfDocument.close(); myPdfDocument = null; return; } switch (docNumber) { case 1: drawObjednavka(page, i); break; case 2: drawVykaz(page, i); break; default: Toast.makeText(MainActivity.this, "Bad file format",Toast.LENGTH_SHORT).show(); } myPdfDocument.finishPage(page); } } try { myPdfDocument.writeTo(new FileOutputStream(destination.getFileDescriptor())); } catch (IOException e) { callback.onWriteFailed(e.toString()); return; } finally { myPdfDocument.close(); myPdfDocument = null; } callback.onWriteFinished(pageRanges); } 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; } private void drawObjednavka(PdfDocument.Page page, int pagenumber) { int verticalPosY = 0; canvas = page.getCanvas(); pagenumber++; // Make sure page numbers start at 1 Typeface tf = Typeface.create(Typeface.DEFAULT, Typeface.NORMAL); // there you can change type of font family, if needed PF PdfDocument.PageInfo pageInfo = page.getInfo(); Paint paint = new Paint(); paint.setTypeface(tf); paint.setColor(Color.BLACK); paint.setStrokeWidth(1F); //set line thickness paint.setTextSize(20); paint.setTypeface(Typeface.DEFAULT_BOLD); canvas.drawText("Objednávka", DEFAULT_LEFT_MARGIN_X, 30, paint);... 

Puesto que usted está pintando directamente a un lienzo, puede calcular el total de totalpages que necesita. Cuando el usuario selecciona un nuevo tamaño de papel, debe volver a dibujar las páginas de acuerdo con las dimensiones de la página y cómo desea mostrar la página.

Su código es correcto, sólo tiene que calcular el total de totalpages acuerdo con el tamaño del medio seleccionado por el usuario. Tienes pageWidth y pageHeight , y también puedes obtener los márgenes a través de newAttributes.getMinMargins() . Todos los valores que necesita están en newAttributes .

  • ¿Cómo comprobar el permiso se concede para una ruta de directorio y no abre el error EACCES?
  • Configuración del emulador de kitkat para Android 4.4
  • Android "no se pudo registrar en el registro de eventos binario: desbordamiento"
  • Superpuesto por la barra de estado cuando se muestra el fragmento de diálogo, solo en Android4.4
  • Hacer que la emulación de la tarjeta de host funcione para el pago
  • Alerta de error de Eclipse al abrir el diseño de gráficos
  • Las longitudes incorrectas del arreglo, el encargado de la notificación causan el choque del teléfono en 4.4
  • Recortar al seleccionar de Galería en Android 4.4
  • Barras del sistema translúcido y margen de contenido en KitKat
  • SwipeRefreshLayout se oculta detrás de ActionBar con barras de estado transparentes
  • ¿Hace SAF (Storage Access Framework) resolver el problema de la tarjeta SD WRITE en Android 4.4 (KitKat)?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.