`
happwang
  • 浏览: 577 次
文章分类
社区版块
存档分类
最新评论

java读取revit文件缩略图

阅读更多
package test;

import org.apache.poi.poifs.filesystem.POIFSDocument;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.poifs.storage.BlockWritable;

import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;

/**
 * Created with IntelliJ IDEA.
 * User: wzhoufeng 1039580989@qq.com
 * Date: 20-6-23
 * Time: 上午8:14
 * To change this template use File | Settings | File Templates.
 */
public class RvtFileHeaderImage {

    public static void main(String[] args){
        try {
            POIFSFileSystem poifsFileSystem = new POIFSFileSystem(new FileInputStream("E:\\11.rvt"));
            Iterator<Object> iterator = poifsFileSystem.getViewableIterator();
            while (iterator.hasNext()){
                Object o = iterator.next();
                if(o instanceof org.apache.poi.poifs.filesystem.DocumentNode){
                    org.apache.poi.poifs.filesystem.DocumentNode documentNode = (org.apache.poi.poifs.filesystem.DocumentNode)o;

                    if(documentNode.getName().equals("RevitPreview4.0")){

                        Iterator<Object> objectIterator = documentNode.getViewableIterator();
                        POIFSDocument document =    null;
                        while (objectIterator.hasNext()){
                            Object ob = objectIterator.next();
                            if(ob instanceof POIFSDocument){
                                document = (POIFSDocument)ob;
                            }
                        }

                        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
                        //document.writeBlocks(byteArrayOutputStream);
                        BlockWritable[] blockWritables = document.getSmallBlocks();
                        for (BlockWritable writable : blockWritables){
                            writable.writeBlocks(byteArrayOutputStream);
                        }
                        byte[] arr = byteArrayOutputStream.toByteArray();
                        byteArrayOutputStream.close();

                        int start = getFileHeader(arr);

                        FileOutputStream fileOutputStream = new FileOutputStream("E:\\out.png");
                        byte[] newArr = new byte[arr.length-start];
                        for(int is=start;is<arr.length;is++){
                            newArr[is-start] = arr[is];
                        }
                        fileOutputStream.write(newArr);
                        fileOutputStream.close();
                        break;
                    }
                }

            }

        } catch (IOException e) {
            e.printStackTrace();
        }


    }

    static int getFileHeader(byte[] rawData){
        for (int i = 0; i < rawData.length; i++)
        {

            byte bt = rawData[i];
            if(bt==0x50){                                  //P
                //89504E47
                if(rawData[i+1]==0x4E && rawData[i+2]==0x47){  //NG
                    return i - 1;
                }
            }

//            String x  = Character.toString((char)bt);
//            if(x.equals("P")){
//                System.out.println(x);
//
//                if(Character.toString((char)rawData[i+1]).equals("N") && Character.toString((char)rawData[i+2]).equals("G")){
//                    return i - 1;
//                }
//            }
        }
        return 0;
    }

}

 使用java语言获取revit文件中的缩略图,代码依赖POI jar

分享到:
评论

相关推荐

    Java读取Revit文件的C#代码

    Java读取Revit文件的C#代码

    如何预览REVIT缩略图中的缺少图像.docx

    在Revit这款强大的建筑信息模型(BIM)软件中,用户经常会遇到缩略图缺失的问题,这会影响工作流程的效率,因为缩略图是快速识别和导航项目中的不同视图和图纸的重要工具。本文将详细解释如何预览Revit缩略图中的...

    如何预览REVIT缩略图中的缺少图像.pdf

    在Revit建筑设计软件中,缩略图是一种便捷的可视化工具,它可以帮助用户快速识别和浏览项目中的不同视图和图纸。然而,有时你可能会遇到Revit缩略图无法正常显示的情况,这通常是因为缺少图像或者缩略图没有被正确...

    鼠标右键Revit文件查看

    在Revit软件中,Revit文件(通常具有.RVT扩展名)是Autodesk Revit用于建筑信息模型(BIM)的核心文件格式。这些文件包含了建筑物的设计、结构、系统和细节等详细信息。"鼠标右键Revit文件查看"这一主题指的是用户...

    revit删除授权文件

    6. **授权文件位置**:Revit的授权文件通常存储在`C:\ProgramData\Autodesk\Network License Manager`或`C:\Program Files\Autodesk\Revit \Version\AdskLicensing`等路径下,但具体位置可能因版本和安装配置而异。...

    Revit导出JSON数据源代码_rvt_RVT导出为OBJ格式_rvt转obj_revit导出obj_revit生成obj_源

    OBJ是一种常见的3D模型文件格式,支持多边形网格、顶点、纹理坐标和法线等信息,能被许多3D软件和游戏引擎所读取。这种转换过程可以帮助用户将Revit模型集成到其他非Revit环境中,如Unity、Unreal Engine等。 标签...

    不打开Revit批量升级族文件到2019

    插件的工作原理可能是读取并解析旧版族文件的内容,然后按照Revit 2019的文件格式标准重新构建文件结构,最后保存为新版本的文件格式。同时,由于它是在Revit外部运行的,所以不会占用Revit的系统资源,也不会干扰...

    Dynamo批量删除Revit中链接或导入的cad文件

    1. **数据输入**:这部分通常包括从Revit项目中读取CAD文件信息的节点,例如“Revit.Elements Links”或“Revit.Elements Imports”,这些节点会获取项目中的所有链接或导入的CAD元素。 2. **条件判断**:在批量...

    C++代替C#对revit编程,读取revit中的dwg信息

    bool CDlgDwgImage::CDwgPaint::ChargeLine(const RMatrix &xForm, RLine *pLine) { RPoint pt1, pt2; pLine-&gt;GetPoint(0, pt1); pLine-&gt;GetPoint(1, pt2); xForm.TransPoint3D(RPoint(pt1), (pt1));...

    Revit 文件 不需要要安装Revit软件 进行查看 文件版本

    *.rvt; *.rte; *.rfa; *.rft文件版本格式查询小工具

    Revit 2018 项目样板

    Revit 2018 项目样板是Autodesk Revit软件的一个重要组成部分,它为Revit用户提供了预设的工作环境和参数,以便于快速启动建筑信息模型(BIM)项目。Revit是一款专为建筑设计、结构工程和机械工程等领域设计的专业...

    revit小别墅模型

    Revit可以导入这些CAD文件,将它们作为设计的基础,或者与现有CAD数据进行对比和协作。CAD图纸的使用有助于确保模型与原始设计意图的一致性。 “小别墅绘制方法及过程”可能是一份教程文档或视频,详细介绍了如何从...

    如何在不打开Revit文件的情况下查看Revit文件版本

    revit文件版本查看器

    Revit2016项目样板文件

    安装完Revit后,新建项目发现没有对应的项目样板文件 产生的原因:是因为下载了官方或不含离线内容包的Revit安装包,在安装过程由于网速不稳定或断网安装导致安装过程下载远程内容包失败! 那么安装完成后就会出现...

    Revit2016族样板文件中文免费版(附导入方法)

    Revit2016族样板文件是Revit2016必备的文件之一,如果你在安装revit2016时由于网络不稳定造成了这个样板文件丢失,可以在本站站重新下载,完成后替换到指定的位置后就可以正常使用了,有需要Revit2016族样板文件的...

    Revit导Dae.rar

    这个库提供了对Dae文件内容的读写支持,帮助开发者将Revit模型数据写入Dae文件。 5. **自定义参数**:描述中提到“看明白了自己定义一些参数自行导出”,这意味着可能涉及将特定的Revit参数(如房间面积、楼层高度...

    Revit2018帮助文档、lookup及外部加载工具

    通过查看源码,开发者可以理解其内部工作机制,学习如何高效地读取和分析Revit模型数据,这对于调试和优化自己的插件非常有帮助。同时,研究开源工具的源码也是提升编程技巧的好方式。 "外部加载工具Addin-Manager...

    revit二次开发读取cad信息并生成构件

    在这个特定的案例中,我们关注的是如何通过二次开发来读取CAD(计算机辅助设计)文件的信息,并利用这些信息在Revit中生成构件。 Revit二次开发通常使用.NET Framework和Revit API进行,开发者可以编写C#或Visual ...

    Revit族库文件支持2014~2018版本使用

    Revit族库文件是 Autodesk Revit 软件中的一个重要组成部分,它包含了各种预先设计好的建筑元素模型,如门窗、柱梁、家具、管道配件等。Revit 是一款专为建筑信息模型(BIM)设计的软件,它允许用户创建三维建筑模型...

    导出图纸.rar_DWGExportOptions_REVIT 外部应用_Revit二次开发_hows3n_revit出图

    标题中的“导出图纸.rar_DWGExportOptions_REVIT 外部应用_Revit二次开发_hows3n_revit出图”表明这是一个关于Revit软件的二次开发教程,重点关注如何使用DWGExportOptions来导出图纸,并通过外部应用程序进行操作。...

Global site tag (gtag.js) - Google Analytics