2016-06-17 2 views
0

まず、私はフランス語で、私は良い英語で私の問題を説明するために最善を尽くします。私のフルアクティビティをPDFで入手するには

だから、私は、画面PDFに変換したい:listeTrouActivity.java

しかし、あなたが見ることができるように、スクロールビューと穴列18個の穴に下がっているがあります。

だから私はいくつかのチュートリアルに続く:

http://valokafor.com/how-to-convert-android-view-to-pdf/#comment-1018

をそして私は

をITextGライブラリを使用して開始しかし、私の問題は、私はPDFに私のビットマップを変換するとき、それはただで私にPDFを与えるということです私の画面のサイズ。私の活動は完全にカットされています。 CoursePDF.javaにgetBitmapFromViewため

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    CoursePdf coursePdf = new CoursePdf(); 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 
     return true; 
    } 
    if (id == R.id.saveHasPDF) { 
     View mRootView = findViewById(R.id.RootView); 
     String state = Environment.getExternalStorageState(); 
     if (!Environment.MEDIA_MOUNTED.equals(state)){ 
      Toast.makeText(ListTrouActivity.this, "OK", Toast.LENGTH_SHORT).show(); 
     } 

     File pdfDir = new File(DEFAULT_PATH, "MyApp"); 
     if (!pdfDir.exists()){ 
      pdfDir.mkdirs(); 
     } 

     LayoutInflater inflater = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE); 
     LinearLayout root = (LinearLayout) inflater.inflate(R.layout.liste_trou_activity, null); //RelativeLayout is root view of my UI(xml) file. 
     root.setDrawingCacheEnabled(true); 
     Bitmap screen = coursePdf.getBitmapFromView2(this.getWindow().findViewById(R.id.RootView)); 

     // here give id of our root layout (here its my RelativeLayout's id) 

     File pdfFile = new File(pdfDir, "myPdfFile.pdf"); 

     try { 
      Rectangle pagesize = new Rectangle(1720f, 3200f); 
      Document document = new Document(pagesize, 36f, 72f, 108f, 180f); 

      PdfWriter.getInstance(document, new FileOutputStream(pdfFile)); 
      document.open(); 
      ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
      screen.compress(Bitmap.CompressFormat.PNG, 100, stream); 
      byte[] byteArray = stream.toByteArray(); 

      coursePdf.addImage(document,byteArray); 
      document.close(); 
     } 
     catch (Exception e){ 
      e.printStackTrace(); 
     } 

     Intent intent = new Intent(Intent.ACTION_VIEW); 
     Uri uri = Uri.fromFile(new File(pdfDir, "myPdfFile.pdf")); 
     intent.setDataAndType(uri, "application/pdf"); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
     startActivity(intent); 
    } 
    return super.onOptionsItemSelected(item); 
} 

コード:

は、だから私はあなたたちはそれで私を助けることを願って、ListTrouActivity.javaと呼ばれる私の活動のPDFに私のビットマップを変換する私のコードがある

私CoursePDF.javaでaddImageため
public static Bitmap getBitmapFromView2(View view) { 
    //Define a bitmap with the same size as the view 
    Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(),Bitmap.Config.ARGB_8888); 
    //Bind a canvas to it 
    Canvas canvas = new Canvas(returnedBitmap); 
    //Get the view's background 
    Drawable bgDrawable =view.getBackground(); 
    if (bgDrawable!=null) 
     //has background drawable, then draw it on the canvas 
     bgDrawable.draw(canvas); 
    else 
     //does not have background drawable, then draw white background on the canvas 
     canvas.drawColor(Color.WHITE); 
    // draw the view on the canvas 
    view.draw(canvas); 
    //return the bitmap 
    return returnedBitmap; 
} 

コード:

public static void addImage(Document document, byte[] byteArray) 
{ 
    Image image = null; 
    try 
    { 
     image = Image.getInstance(byteArray); 
    } 
    catch (BadElementException e) 
    { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    catch (MalformedURLException e) 
    { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    catch (IOException e) 
    { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    // image.scaleAbsolute(150f, 150f); 
    try 
    { 
     document.add(image); 
    } catch (DocumentException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

Unfortun私はここで自分のliste_trou_activity.xmlコードを過ぎることはできません。そうでないと157000文字に達します。

もしあなたが本当に必要としているのであれば、私はもう一度お試しください。

私が求めていることをすべて理解していない場合は、もう一度質問してください。私は再び説明しようとします。

読んでいただきありがとうございます、皆さんが私を助けてくれることを願っています。

答えて

0

スクロール可能な完全なアクティビティのスナップショットを撮ってから、内容をスナップショットとして動的にpdfを作成していたのが最も良いと思うものを見てください。 スナップショットの方が好き[スクロール可能なアクティビティのスナップショットを撮る]

動的なpdfファイルを作成します。あなたはほしいものを手に入れます

+0

しかし、スクロール可能なアクティビティのスナップショットはどうやって取得しますか?これは多かれ少なかれ私ができないことです... – Vascote

+0

http://android.stackexchange.com/questions/35012/how-to-take-a-screenshot-of-an-entire-scrolling-activityあなたはそれを得るでしょう。 –

+0

ありがとう、私はそれを試みます。 – Vascote

関連する問題