android 开发 将view保存为image的实现及将html保存为pdf格式

一、将view保存为image



public class ImageHelper {

  ///将view保存到bitmap中
    public Bitmap createBitmap(View view) {
        int widthSpec = View.MeasureSpec.makeMeasureSpec(view.getLayoutParams().width, View.MeasureSpec.EXACTLY);
        int heightSpec = View.MeasureSpec.makeMeasureSpec(view.getLayoutParams().height, View.MeasureSpec.EXACTLY);
        view.measure(widthSpec, heightSpec);
        int measureWidth = view.getMeasuredWidth();
        int measureHeight = view.getMeasuredHeight();
        view.layout(0, 0, measureWidth, measureHeight);
        int width = view.getWidth();
        int height = view.getHeight();
        Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        view.draw(canvas);
        return bitmap;
    }
    /**
     * 保存bitmap到本地并拷贝并刷新相册
     *
     * @param context  上下文
     * @param mBitmap  图片信息
     * @param savePath  保存路径(临时)
     * @param fileName  文件名
     * @return
     */
    //public  String saveBitmap(Context context,Bitmap mBitmap,String savePath,String fileName) {
        public  String saveBitmap(Context context,Bitmap mBitmap,String savePath) {
        File filePic;
        try {
            filePic = new File(savePath);
            if (!filePic.exists()) {
                filePic.getParentFile().mkdirs();
                filePic.createNewFile();
            }
            FileOutputStream fos = new FileOutputStream(filePic);
            mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
            fos.flush();
            fos.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return "保存图片到本地时报错:"+e.getMessage();
        }
        // 其次把文件插入到系统图库
//        try {
//            MediaStore.Images.Media.insertImage(context.getContentResolver(),
//                    filePic.getAbsolutePath(), fileName, null);
//            //MyToastUtils.showShortToast(context, "保存成功");
//        } catch (FileNotFoundException e) {
//            //MyToastUtils.showShortToast(context, "保存失败");
//            e.printStackTrace();
//            return "把文件插入到系统图库失败:"+e.getMessage();
//        }
        // 最后通知图库更新
        context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
                Uri.fromFile(new File(filePic.getPath()))));

        return "Success";
    }
}

二、将html代码保存为pdf

需要引入三个jar包:itextpdf-5.5.jar、jsoup-1.7.jar、xmlworker-5.5.3.jar

public class PDFHelper {

    ///保存文件的方法
    public String createPDF(String rawHTML, String fileName, ContextWrapper context){

        File file = new File(fileName);

        try{
            Document document = new Document();
            PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file));
            document.open();

            //  HTML
            String htmlText = Jsoup.clean( rawHTML, Whitelist.relaxed() );
            InputStream inputStream = new ByteArrayInputStream( htmlText.getBytes() );

            //  PDF
            XMLWorkerHelper.getInstance().parseXHtml(writer, document,
                    inputStream, null, Charset.defaultCharset(), new MyFont());

            document.close();
            return "";

        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return "Error|"+e.getMessage();
        } catch (DocumentException e) {
            e.printStackTrace();
            return "Error|"+e.getMessage();
        } catch (IOException e) {
            e.printStackTrace();
            return "Error|"+e.getMessage();
        }
    }

    public class MyFont implements FontProvider {
        private static final String FONT_PATH = "/system/fonts/DroidSansFallback.ttf";
        private static final String FONT_ALIAS = "my_font";

        public MyFont() {
            FontFactory.register(FONT_PATH, FONT_ALIAS);
        }

        @Override
        public Font getFont(String fontname, String encoding, boolean embedded,
                            float size, int style, BaseColor color) {

            return FontFactory.getFont(FONT_ALIAS, BaseFont.IDENTITY_H,
                    BaseFont.EMBEDDED, size, style, color);
        }

        @Override
        public boolean isRegistered(String name) {
            return name.equals(FONT_ALIAS);
        }
    }
}


原文地址:https://www.cnblogs.com/merlyn/p/9447792.html

时间: 2024-11-01 00:16:45

android 开发 将view保存为image的实现及将html保存为pdf格式的相关文章

关于android开发自定义view

Android App开发过程中,很多时候会遇到系统框架中提供的控件无法满足我们产品的设计需求,那么这时候我们可以选择先Google下有没有比较成熟的开源项目可以让我们用,或者Github上面的项目也非常丰富,能够满足我们绝不多数的开发需求,但是在使用这些炫酷的第三方控件时,需要我们掌控里面实现的细节,所以就滋生了今天“关于android开发中自定义view的探索” 粗体是我个人的疑问,下面小字部分是结合查阅资料以及实际操作的归纳理解. 什么是View? Android所有的控件都是View或者

Android开发自定义View

Android中View组件的作用类似于Swing变成中的JPanel,它只是一个空白的矩形区域,View组件中没有任何内容.对于Android应用的其他UI组件来说,它们都继承了View组件,然后在View组件提供的空白区域绘制外观. 当Android系统提供的UI组件不足以满足项目需求时,我们可以通过继承View并重写View类的一个或多个方法来自定义组件. 通常可以被用户重写的方法如下: 1.构造器:重写构造器是定制View的最基本的方式,当Java(或Kotlin)代码创建一个View实

Android 开发 -------- 自定义View 画 五子棋

自定义View  实现 五子棋 配图: 代码: package com.example.fiveson; import java.util.LinkedList; import java.util.List; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util

Android 开发自定义View

作者:卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/41551151 [附:--自定义View常处理的回调函数 onFinishInflate() 当View中所有的子控件均被映射成xml后触发 onMeasure(int, int) 确定所有子元素的大小 onLayout(boolean, int, int, int, int) 当View分配所有的子元素的大小和位置时触发 onSizeChanged(int, int, int

Android开发:View的几种布局及实践

引言 View的布局显示方式有下面几种:线性布局(Linear Layout).相对布局(Relative Layout).表格布局(Table Layout).网格视图(Grid View).标签布局(Tab Layout).列表视图(List View).绝对布局(AbsoluteLayout).本文虽然是介绍View的布局方式,但不仅仅是这样,其中涉及了很多小的知识点,绝对能给你带来Android大餐! 本文的主要内容就是分别介绍以上视图的七种布局显示方式效果及实现,大纲如下: 1.Vie

Android开发学习---android下的数据持久化,保存数据到rom文件,android_data目录下文件访问的权限控制

一.需求 做一个类似QQ登录似的app,将数据写到ROM文件里,并对数据进行回显. 二.截图 登录界面: 文件浏览器,查看文件的保存路径:/data/data/com.amos.datasave/files/LoginTest.txt------/data/data/(包名)/files/(文件名) 导出的文件内容: 三.实现代码 新建一个Android 工程.这里我选择的是2.1即API 7,进行开发的,其它都是默认下一步下一步即可. /datasave/res/layout/activity

Android开发系列(五):Android应用中文件的保存与读取

在本篇博客中,我们要实现在Android中"新建文件"和"读取文件": 目标界面: 在输入文件名称之后,输入文件内容,点击保存,可以保存成为一个文档 首先,我们先建立一个Android Project项目,项目名称:File. 然后,我们需要先实现目标视图中的界面: 编辑strings.xml文件: <?xml version="1.0" encoding="utf-8"?> <resources> &

Android开发本地及网络Mp3音乐播放器(十)最近播放界面与数据保存更新

实现功能: 实现MyLoveMusicActivity(音乐收藏界面) 实现MyRecordMusicActivity(最近播放界面) 实现MyMusicListFragment(本地音乐界面)ItemClick事件发生后,切换到PlayActivity(独立音乐播放界面)只播放 本地音乐. 实现MyLoveMusicActivity(音乐收藏界面)ItemClick事件发生后,切换到PlayActivity(独立音乐播放界面)只播放 音乐收藏. 实现MyRecordMusicActivity(

Android开发之自定义View-可动画展开收缩View的实现

有时候需要点击一个view可以动画展开和收缩折叠一个View这样的效果,这样就可以直接自定义View来实现. 本例中,采用继承FrameLayout来实现自定义的ExpandView.下面将详细介绍各个部分来实现该类以及如何使用该自定义视图. 效果图如下: 未展开效果: 正在向上折叠收缩中的效果: 已经展开效果: 自定义展开类:ExpandView的实现: package com.czm.customview; import android.content.Context; import and