0

首先,我是法国人,我会尽力用流利的英语解释我的问题。

所以,我想在那个屏幕上转换成 PDF:listeTrouActivity.java

但是正如你所看到的,有滚动视图,并且孔列正在下降到 18 个孔。

所以我遵循了一些教程:

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

我开始使用图书馆 ITextG

但我的问题是,当我将位图转换为 PDF 时,它给了我一个只有屏幕大小的 PDF。我的活动完全停止了。

所以我希望你们能帮助我,我的代码可以在我的名为 ListTrouActivity.java 的活动中将我的位图转换为 PDF:

@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);
}

CoursePDF.java 中 getBitmapFromView 的代码:

    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;
}

我 CoursePDF.java 中 addImage 的代码:

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();
    }
}

不幸的是,我无法在此处跳过我的 liste_trou_activity.xml 代码,否则我将达到 157 000 个字符。

如果你们真的需要它只是问,我会再试一次。

我希望你们都明白我的要求,如果没有,请再问我一次,我会再次尝试解释。

感谢阅读,希望大家能帮到我。

4

1 回答 1

0

看看我能想到的最好的方法是拍摄完整的可滚动活动的快照,然后动态地编写一个 pdf,并将其内容作为快照。对于快照首选[拍摄可滚动活动的快照]

然后写动态pdf。你会得到你想要的

于 2016-06-17T11:51:49.623 回答