首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用pdf java转换布局

用pdf java转换布局
EN

Stack Overflow用户
提问于 2020-02-13 23:36:36
回答 1查看 99关注 0票数 0

我有下面的表单,使用LinearLayout创建

代码:

代码语言:javascript
复制
private LinearLayout buildBox(Integer w){
    LinearLayout.LayoutParams boxParams =
            new LinearLayout.LayoutParams(
                    getDpToInt(w),
                    LinearLayout.LayoutParams.WRAP_CONTENT);
    LinearLayout whiteBox = new LinearLayout(this.getContext());
    whiteBox.setLayoutParams(boxParams);
    whiteBox.setOrientation(LinearLayout.VERTICAL);
    whiteBox.setBackgroundResource(R.color.colorAccent);
    return whiteBox;
}

我需要转换这个表单后,它是呈现为pdf位图。在同一屏幕上,您将有一个按钮来打印它。我尝试了一些在网站上找到的解决方案,但我没有成功。有人能帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-14 06:30:22

在pdf文件上写代码按一下按钮,

代码语言:javascript
复制
btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d("size"," "+llPdf.getWidth() +"  "+llPdf.getWidth());
                bitmap = loadBitmapFromView(llPdf, llPdf.getWidth(), llPdf.getHeight());
                createPdfFile();
            }
        });

并实施这些方法,

代码语言:javascript
复制
public static Bitmap loadBitmapFromView(View v, int width, int height) {
        Bitmap b = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        Canvas c = new Canvas(b);
        v.draw(c);

        return b;
    }

    private void createPdfFile(){
        WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);

        DisplayMetrics displaymetrics = new DisplayMetrics();
        this.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
        float hight = displaymetrics.heightPixels ;
        float width = displaymetrics.widthPixels ;

        int convertHighet = (int) hight, convertWidth = (int) width;

        PdfDocument document = new PdfDocument();
        PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(convertWidth, convertHighet, 1).create();
        PdfDocument.Page page = document.startPage(pageInfo);

        Canvas canvas = page.getCanvas();

        Paint paint = new Paint();
        canvas.drawPaint(paint);

        bitmap = Bitmap.createScaledBitmap(bitmap, convertWidth, convertHighet, true);

        paint.setColor(Color.BLUE);
        canvas.drawBitmap(bitmap, 0, 0 , null);
        document.finishPage(page);


        String targetPdf = "/storage/mypdflayout.pdf";
        File filePath;
        filePath = new File(targetPdf);
        try {
            document.writeTo(new FileOutputStream(filePath));

         } catch (IOException e) {
            e.printStackTrace();
            Toast.makeText(this, "Something wrong: " + e.toString(), Toast.LENGTH_LONG).show();
        }


        document.close();
        Toast.makeText(this, "PDF is created successfully!!!", Toast.LENGTH_SHORT).show();

        openGeneratedPDFFile();

    }

    private void openGeneratedPDFFile(){
        File file = new File("/sdcard/pdffromlayout.pdf");
        if (file.exists())
        {
            Intent i=new Intent(Intent.ACTION_VIEW);
            Uri uri = Uri.fromFile(file);
            i.setDataAndType(uri, "application/pdf");
            i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

            try
            {
                startActivity(i);
            }
            catch(ActivityNotFoundException e)
            {
                Toast.makeText(MainActivity.this, "No pdf view available", Toast.LENGTH_LONG).show();
            }
        }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60218051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档