我用的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();
悬浮按钮用的自定义FloatingActionButton,借鉴的是
随便写写主要是给自己做个记录,不求写的多么好。看不懂再问吧,没什么事我也会一两天的上来看看。也欢迎大神来指教。