2016-06-02 3 views
-1

Am Bild als PDF per E-Mail teilen, aber wenn ich als PDF teilen die PDF-Größe nicht vollständig zeigt, zeigt nur ein Teil der PDF-Datei. Dies ist der Code, den ich benutze, um als PDF zu teilen, bitte bitte helfen, ich bin hier für eine Weile fest, bin bereit, Antwort zu akzeptieren, die sofort funktioniert.PDF-Größe nicht 100%

private void sharePdf() { 
    try { 
     Bitmap bitmap; 
     View v1; 
     // File path; 
     File att = null; 
     root = new File(Environment.getExternalStorageDirectory(), getString(R.string.app_name)); 
     if (!root.exists()) 
      root.mkdir(); 
     { 
      menu_layout.setVisibility(View.GONE); 
      bottom_layout.setVisibility(View.GONE); 
      menus.setVisibility(View.GONE); 
      v1 = rl_layout.getRootView(); 
      v1.setDrawingCacheEnabled(true); 

      bitmap = Bitmap.createBitmap(v1.getDrawingCache()); 
      v1.setDrawingCacheEnabled(false); 
      ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
      bitmap.compress(Bitmap.CompressFormat.PNG, 100, bytes); 
      time = new SimpleDateFormat("yyyy-MM-dd_HHmmss", Locale.ENGLISH).format(new Date()); 
      path1 = new File(root.getAbsolutePath() + File.separator + time + ".png"); 
      path1.createNewFile(); 
      FileOutputStream fo = new FileOutputStream(path1); 
      fo.write(bytes.toByteArray()); 
      fo.close(); 

      Bitmap bgBit = null; 
      try { 
       Uri uri = Uri.fromFile(new File(custombackground)); 
       if (uri != null && custombackground != null && !custombackground.trim().equalsIgnoreCase("")) { 
        bgBit = MediaStore.Images.Media.getBitmap(getContentResolver(), uri); 
       } 
      } catch (Exception ex) { 

      } 
      if (bgBit != null) { 
       bitmap = overlay(bgBit, drawingPanelView.getBitmap()); 
       bytes = new ByteArrayOutputStream(); 
       bitmap.compress(Bitmap.CompressFormat.PNG, 100, bytes); 
      } 

      att = new File(root.getAbsolutePath() + File.separator 
        + "note.png"); 
      if (att.exists()) { 
       att.delete(); 
      } 
      att.createNewFile(); 
      FileOutputStream fo_att = new FileOutputStream(att); 
      fo_att.write(bytes.toByteArray()); 
      fo_att.close(); 

      menu_layout.setVisibility(View.VISIBLE); 
      bottom_layout.setVisibility(View.VISIBLE); 
      menus.setVisibility(View.VISIBLE); 
     } 

     File pdfFile = new File(root.getAbsolutePath() + File.separator + "share_temp.pdf"); 
     if (!pdfFile.exists()) { 
      pdfFile.createNewFile(); 
     } 
     Document document = new Document(); 
     PdfWriter.getInstance(document, new FileOutputStream(pdfFile.getAbsoluteFile())); 
     document.open(); 
     document.add(new Paragraph(content.getText().toString())); 

     Image image = Image.getInstance(att.getAbsolutePath()); 
     document.add(image); 
     for (HashMap<String, String> item : list) { 
      List<String> vales = new ArrayList<>(item.values()); 
      for (String path : vales) { 
       File fileIn = new File(path); 
       if (fileIn.exists()) { 
        image = Image.getInstance(fileIn.getAbsolutePath()); 
        document.add(image); 
       } 
      } 
     } 

     document.close(); 


     final Intent emailIntent = new Intent(Intent.ACTION_SEND); 
     emailIntent.setType("text/plain"); 
     emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, ""); 
     emailIntent.putExtra(android.content.Intent.EXTRA_CC, ""); 
     emailIntent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.app_name)); 
     emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(pdfFile)); 
     startActivity(Intent.createChooser(emailIntent, "Send mail...")); 

    } catch (Exception e) { 
    } 

} 
+0

Sie brauchen nicht entweder die 'ByteArrayOutputStream' oder das' path1 zu dokumentieren .createNewFile(); 'call. Komprimieren Sie einfach direkt zum 'FileOutputStream'. – EJP

+0

@EJP können Sie antworten, indem Sie den Code bearbeiten, so kann ich die Antwort akzeptieren, wenn es funktioniert. danke – user3367817

+0

Wenn ich t eine Antwort wäre, hätte ich es als Antwort gepostet, und nein, ich werde deinen Code nicht bearbeiten. Die Änderung ist trivial. – EJP

Antwort

1

Eigentlich müssen Sie Bild auf Dokument Breite und Höhe skalieren, um in Dokument zu passen, um dies zu tun fügen Sie einfach folgende Zeilen zu Ihrem Code.

float scaler = ((document.getPageSize().getWidth() - document.leftMargin() 
       - document.rightMargin() - indentation)/image.getWidth()) * 100; 

und bevor Sie Bild hinzufügen, erste Skala, dass Bild

image.scalePercent(scaler); 

dann 'das Bild

document.add(image); 
+0

@rekesh, du bist erstaunlich !! du bist Gott zu mir gesandt – user3367817

Verwandte Themen