Android手写签名 附带加载pdf合同 及可拖动签名(二)

我用的mupdf版本是1.9a,这里是官方源码地址https://mupdf.com/downloads/archive/

        我看网上好多用的版本是1.0的,但是会有个问题,当项目里集成了相关64位so文件的时候,系统会默认指加载arm64-v8a下的so文件,所以我就自行打了一个1.9a版本的64so文件,亲测可行,如果需要,在下面的项目里就可获取到。

     我这个版本可实现的功能就是根据我自己的项目需求做的整改,可以正常加载1.9a版本的pdf文件,签名(我没用这个版本自带的)可拖动,悬浮按钮,pdf的盖章签名的保存,当然这个demo是我随便写的 ,随便看看就好,可根据自己的需求做出相应的修改。下面是预览图:

    集成步骤也很简单,首先把相关文件拷贝到自己项目对应路径中,app中build文件里再引用一下就好了,下面的路径名和so文件名都不要改

       然后它的主页面是在MuPDFActivity中,布局是用代码写进去的

    // 父布局
        RelativeLayout layout = new RelativeLayout(this);
        layout.addView(mDocView);

        LayoutInflater inflater = LayoutInflater.from(this);
        RelativeLayout.LayoutParams rlp;

        //页码布局
        pageNumView = inflater.inflate(R.layout.activity_page_num,
                null);
        pageNumView.setBackgroundColor(0x00000000);
        tv_page_num = (TextView) pageNumView.findViewById(R.id.tv_page_num);
        rlp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        rlp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
        rlp.addRule(RelativeLayout.CENTER_HORIZONTAL);
        layout.addView(pageNumView, rlp);

        //签名布局
        signLayout = inflater.inflate(R.layout.activity_mupdf,
                null);
        signLayout.setBackgroundColor(0x00000000);
        btn_sign = (DragFloatActionButton) signLayout.findViewById(R.id.btn_sign);
        btn_clear = (DragFloatActionButton) signLayout.findViewById(R.id.btn_clear);
//        btn_save = (ImageView) signLayout.findViewById(R.id.btn_save);
        image = (ImageView) signLayout.findViewById(R.id.image);
        signView = (VDHDeepLayout) signLayout.findViewById(R.id.signView1);

        rlp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, (int) core.getPageSize(0).y);
        rlp.addRule(RelativeLayout.CENTER_IN_PARENT);
        signView.setLayoutParams(rlp);

        layout.addView(mButtonsView);

        layout.addView(signLayout, RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);

        setContentView(layout);

可拖动签名和可拖动按钮都是自定义view,直接放在xml布局文件中使用就好了

这个是签名后可根据接口返回坐标进行签名的定位

//                    RelativeLayout.MarginLayoutParams margin = new RelativeLayout.MarginLayoutParams(
//                            image.getLayoutParams());
//                    WindowManager wm = (WindowManager) this
//                            .getSystemService(Context.WINDOW_SERVICE);
//                    int width = wm.getDefaultDisplay().getWidth();
//                    margin.leftMargin = (int) (bean.getData().getQmx() * width);
//                    margin.bottomMargin = (int) (bean.getData().getQmy() * (core.getPageSize(0).y));//接口返回的getQmy定位外边距和pdf原尺寸的宽和高的比值
//                    RelativeLayout.LayoutParams layoutParams9 = new RelativeLayout.LayoutParams(margin);
//                    layoutParams9.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
//                    image.setLayoutParams(layoutParams9);

这里是在保存签名的时候控制的签名图片的偏移量

                        in_path =pathToEdit;
                        out_path = in_path.substring(0, in_path.length() - 4) + "1.pdf";
                        SavePdf savePdf = new SavePdf(in_path, out_path);
                        savePdf.setScale(1.0f);
                        savePdf.setPageNum(mDocView.getDisplayedViewIndex() + 1);

                        savePdf.setWidthScale(1.0f * mDocView.getScaleX() / mDocView.getDisplayedView().getWidth());//计算宽偏移的百分比
                        savePdf.setHeightScale(1.0f * mDocView.getScaleY() / mDocView.getHeight());//计算长偏移的百分比

                        //计算分辨率密度
                        DisplayMetrics metric = new DisplayMetrics();
                        getWindowManager().getDefaultDisplay().getMetrics(metric);
                        float density = metric.density;
                        savePdf.setDensity(density);
                        Bitmap bitmap = Bitmap.createBitmap(signView.getWidth(), signView.getHeight(),
                                Bitmap.Config.ARGB_8888);
                        Canvas canvas = new Canvas(bitmap);
                        signView.draw(canvas);
                        savePdf.setBitmap(bitmap);
                        save_pdf = new Save_Pdf(savePdf);
                        save_pdf.execute();  savePdf.setWidthScale(1.0f * mDocView.getScaleX() / mDocView.getDisplayedView().getWidth());//计算宽偏移的百分比
                        savePdf.setHeightScale(1.0f * mDocView.getScaleY() / mDocView.getHeight());//计算长偏移的百分比

                        //计算分辨率密度
                        DisplayMetrics metric = new DisplayMetrics();
                        getWindowManager().getDefaultDisplay().getMetrics(metric);
                        float density = metric.density;
                        savePdf.setDensity(density);
                        Bitmap bitmap = Bitmap.createBitmap(signView.getWidth(), signView.getHeight(),
                                Bitmap.Config.ARGB_8888);
                        Canvas canvas = new Canvas(bitmap);
                        signView.draw(canvas);
                        savePdf.setBitmap(bitmap);
                        save_pdf = new Save_Pdf(savePdf);
                        save_pdf.execute();

悬浮按钮用的自定义FloatingActionButton,借鉴的是https://blog.csdn.net/chen_xi_hao/article/details/74347023

随便写写主要是给自己做个记录,不求写的多么好。看不懂再问吧,没什么事我也会一两天的上来看看。也欢迎大神来指教。

demo下载

MuPDF1.9a的64位so文件(其他版本用不了)

评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值