簡體   English   中英

如何在android中將xml布局轉換為pdf

[英]How to convert xml layout to pdf in android

我在互聯網上嘗試了很多搜索,但沒有找到任何解決方案。 我的問題是我有一個名為 main.xml 的布局,它的父布局是一個 LinearLayout 並且它是可滾動的。 我想生成該布局的pdf。 布局由報告組成,所以我想以 pdf 格式導出這些報告。 我該怎么做 請幫忙。

您可以使用這個來輕松完成幾行代碼 -

 PdfGenerator.getBuilder()
                        .setContext(context)
                        .fromLayoutXMLSource()
                        .fromLayoutXML(R.layout.layout_your_scroll_view)
                        .setDefaultPageSize(PdfGenerator.PageSize.A4)
                        .setFileName("Test-PDF")
                        .build();

您還可以在其中設置膨脹的滾動視圖實例(單個或多個視圖)。 此外,您還可以在PdfGeneratorListener()傳遞回調( PdfGeneratorListener() .build()以通知 pdf 生成是否已完成或因異常而失敗

最后我得到了我的問題的解決方案。 現在我可以使用 itextpdf.jar 文件輕松地將任何視圖轉換為 PDF。 我將在這里發布我的代碼。 此方法將以位圖格式保存視圖。

public void saveViewImage(View view){
    File file = saveBitMap(this, layout);    //which view you want to pass that view as parameter
    if (file != null) {
        Log.i("TAG", "Drawing saved to the gallery!");
    } else {
        Log.i("TAG", "Oops! Image could not be saved.");
    }
}

private File saveBitMap(Context context, View drawView){
    File pictureFileDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"Handcare");
    if (!pictureFileDir.exists()) {
        boolean isDirectoryCreated = pictureFileDir.mkdirs();
        if(!isDirectoryCreated)
            Log.i("ATG", "Can't create directory to save the image");
        return null;
    }
    String filename = pictureFileDir.getPath() +File.separator+ System.currentTimeMillis()+".jpg";
    File pictureFile = new File(filename);
    Bitmap bitmap =getBitmapFromView(drawView);
    try {
        createPdf(bitmap);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (DocumentException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        pictureFile.createNewFile();
        FileOutputStream oStream = new FileOutputStream(pictureFile);
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, oStream);
        oStream.flush();
        oStream.close();
    } catch (IOException e) {
        e.printStackTrace();
        Log.i("TAG", "There was an issue saving the image.");
    }
    scanGallery( context,pictureFile.getAbsolutePath());
    return pictureFile;
}
//create bitmap from view and returns it
private Bitmap getBitmapFromView(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;
}

現在使用以下方法生成pdf

private void createPdf(Bitmap bitmap) throws IOException, DocumentException {

    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
    Image signature;
    signature = Image.getInstance(stream.toByteArray());
    signature.setAbsolutePosition(50f, 100f);
    signature.scalePercent(60f);
    //Image image = Image.getInstance(byteArray);
    File pdfFolder = new File(Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_DOCUMENTS), "pdfdemo");
    if (!pdfFolder.exists()) {
        pdfFolder.mkdirs();
        Log.i("Created", "Pdf Directory created");
    }

    //Create time stamp
    Date date = new Date() ;
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(date);

    File myFile = new File(pdfFolder + timeStamp + ".pdf");

    OutputStream output = new FileOutputStream(myFile);
    //Step 1
    Document document = new Document();

    //Step 2
    PdfWriter.getInstance(document, output);

    //Step 3
    document.open();

    //Step 4 Add content
    document.add(signature);
    //document.add(new Paragraph(text.getText().toString()));
    //document.add(new Paragraph(mBodyEditText.getText().toString()));

    //Step 5: Close the document
    document.close();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM