2016-04-01 51 views
-1

Android'de PDF oluştur ancak sadece bir sayfa oluştur ve diğer verilerim görmüyor. nasıl android.any fikri otomatik artış PDF sayfa çalışma zamanını veya suggestion.My problemi için birden fazla sayfa bu koymak bu kütüphaneyePDF multipage android oluştur oluştur

kullanmak ile Grafik nesne

+1

Sorunuz belirsizdir. Daha fazla veri varsa yeni sayfalar otomatik olarak oluşturulur, ardından tek bir sayfada yer vardır. Bir “Grafik” nesnesinden bahsediyorsunuz. PdfGraphics2D'ye başvurduğunuzu farz ediyorum. Bununla birlikte, Android'den de bahsediyorsunuz. Android'de "Graphics2D" yok, bu yüzden sorunuz hiç mantıklı değil. –

cevap

3

android PDF oluşturun olduğu birden fazla sayfaya sahip bir PDF oluşturmak için nasıl uygulamalarınızda gradle dosya dosyasını build.gradle - 'com.itextpdf: itext-pdfa: 5.5.8' derlemek

kullanın birden çok sayfa

  1. tempArrayList ile pdf oluşturmak için bu kodu - dosyanın dizisi yolu.
  2. pdfAdı - pdf adını istediğiniz gibi girin.

    generatePDF(String pdf_name) { 
    
        String pdfName= null; 
        Dialog dialog = new MaterialDialog.Builder(activity) 
         .backgroundColor(Color.WHITE).contentColor(Color.BLACK).title(getString(R.string.app_name)).titleColor(Color.BLACK) 
         .content("Generating pdf...").progress(true, 0) 
         .show(); 
    
    dialog.setCancelable(false); 
    
        pdfName = new SimpleDateFormat("yyyyMMdd_HHmmss").format(System.currentTimeMillis()) + ".pdf"; 
    
    File myPath = new File(AppConstant.Pdf_Directory, pdfName); 
    if (myPath.exists()) { 
        myPath.delete(); 
    } 
    
    Document document = new Document(PageSize.A4); // create the document 
    
    try { 
        PdfWriter.getInstance(document, new FileOutputStream(myPath)); 
    } catch (Exception e) { 
    } 
    
    // open document 
    document.open(); 
    
    for (int i = 0; i < tempArrayList.size(); i++) { 
    
        Bitmap bmp = null; 
        try { 
         bmp = BitmapFactory.decodeFile(tempArrayList.get(i)); 
         ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
         bmp.compress(Bitmap.CompressFormat.PNG, 90, stream); 
         Image image = Image.getInstance(stream.toByteArray()); 
    
         if (image.getWidth() >= document.getPageSize().getWidth() || image.getHeight() >= document.getPageSize().getHeight()) { 
          image.scaleToFit(document.getPageSize()); 
         } 
    
         image.setAbsolutePosition((document.getPageSize().getWidth() - image.getScaledWidth())/BaseField.BORDER_WIDTH_MEDIUM, (document.getPageSize().getHeight() - image.getScaledHeight())/BaseField.BORDER_WIDTH_MEDIUM); 
         document.add(image); 
         document.newPage(); 
    
        } catch (Exception ex) { 
         ex.printStackTrace(); 
         Toast.makeText(activity, "Fail to generate pdf.", Toast.LENGTH_SHORT).show(); 
        } 
        if (bmp != null) { 
         bmp.recycle(); 
        } 
    } 
    // close the document 
    document.close(); 
    
    Toast.makeText(activity, "Pdf generate successfully.", Toast.LENGTH_SHORT).show(); 
    System.out.println(" pdf generate "); 
    
    dialog.dismiss(); 
    

    }

+0

"Cevabınız için teşekkürler, bu kodu denedim ama etkili değil." –

+1

@Ravimakhija Lütfen bunun kötü bir soruna iyi bir cevap olduğunu anlayın. 'NewPage()' özelliğini kullanmak yeni bir sayfayı tetikler. Açıkçası, bu parçacığı kopyalamamalı/yapıştırmamalı ve bir dizi görüntü içerdiği için çalışmasını beklememelisiniz. Sorunuzda hiçbir yerde görüntülere başvurmuyorsunuz, bu yüzden muhtemelen bu örneği uyarlamanız gerekiyor. Bu örnekteki en önemli satır 'document.newPage()' dır. –