展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 编程开发 > Java实现PDF与PDF/A互转的超详细教程

Java实现PDF与PDF/A互转的超详细教程

Java实现PDF与PDF/A互转,借助PdfStandardsConverter类完成多种标准转换,支持加密PDF解密、元数据保留、PDF/A转普通PDF、创建带附件的PDF/A-3B及批量转换,满足合规性与文档管理需求。

本文目录
    在处理企业文档、档案或需要长期保存的文件时,经常会听到“PDF/A”这个概念。很多人对PDF还算熟悉,但PDF/A到底是个什么角色,心里有些没底。它和普通PDF有什么区别?为什么要进行转换?在Ja va环境中又该如何实现?今天,我们就来系统地梳理一下。 Ja va实现PDF与PDF/A互转的超详细教程

    先搞清楚:什么是PDF/A?

    PDF/A(Portable Document Format/Archive)是PDF的一种归档版本,专门为长期保存电子文档而设计。那它到底和普通PDF有什么不同呢? **PDF/A的限制:** * ❌ 不允许嵌入字体以外的外部依赖 * ❌ 不允许Ja vaScript、音频、视频等动态内容 * ❌ 不允许加密(部分级别允许) * ❌ 所有颜色必须明确定义(不能用设备相关颜色) **PDF/A的优势:** * ✅ 确保文档在几十年后仍能正确显示 * ✅ 自包含,不依赖外部资源 * ✅ 符合ISO标准(ISO 19005) * ✅ 被政府、法院、档案馆广泛采用 **常见的PDF/A标准:** * PDF/A-1(2005年):最早的标准,基于PDF 1.4 * PDF/A-2(2011年):支持透明效果、JPEG 2000压缩 * PDF/A-3(2012年):允许嵌入任意文件格式(如XML、CSV) 每个标准又分两个级别: * Level A(Accessible):保留结构信息,支持无障碍访问 * Level B(Basic):只保证视觉呈现一致

    环境准备

    Ma ven依赖

    
        
            com.e-iceblue
            e-iceblue
            https://repo.e-iceblue.cn/repository/ma ven-public/
        
    
    
        
            e-iceblue
            spire.pdf
            12.6.1
        
    

    Gradle配置

    repositories {
        ma ven {
            url 'https://repo.e-iceblue.cn/repository/ma ven-public/'
        }
    }
    dependencies {
        implementation 'e-iceblue:spire.pdf:12.6.1'
    }

    一、基础转换:PDF转各种PDF/A格式

    最直接的用法——使用​​PdfStandardsConverter​​类进行转换:
    import com.spire.pdf.conversion.PdfStandardsConverter;
    
    public class BasicPdfToPdfA {
        public static void main(String[] args) {
            // 创建转换器实例
            PdfStandardsConverter converter = new PdfStandardsConverter("sample.pdf");
            
            // 转换为不同级别的PDF/A
            converter.toPdfA1A("output/PdfA1A.pdf");   // PDF/A-1A
            converter.toPdfA1B("output/PdfA1B.pdf");   // PDF/A-1B
            converter.toPdfA2A("output/PdfA2A.pdf");   // PDF/A-2A
            converter.toPdfA2B("output/PdfA2B.pdf");   // PDF/A-2B
            converter.toPdfA3A("output/PdfA3A.pdf");   // PDF/A-3A
            converter.toPdfA3B("output/PdfA3B.pdf");   // PDF/A-3B
            
            System.out.println("转换完成!");
        }
    }
    

    是不是很简单?一行代码就能完成一种格式的转换。

    **如何选择PDF/A级别?**
    格式适用场景特点
    PDF/A-1B通用归档兼容性最好,最保守
    PDF/A-2B现代文档支持透明度、图层
    PDF/A-3B数据嵌入可嵌入XML、Excel等附件
    Level A无障碍需求保留标签结构,适合残障人士
    Level B一般用途只保证视觉一致性
    **实际建议:** * 政府/法律文档 → PDF/A-1B(最严格) * 企业内部归档 → PDF/A-2B(平衡兼容性和功能) * 需要嵌入数据 → PDF/A-3B(灵活性最高)

    二、处理加密PDF

    如果源PDF有密码保护,需要先解密再转换:
    import com.spire.pdf.conversion.PdfStandardsConverter;
    
    public class EncryptedPdfToPdfA {
        public static void main(String[] args) {
            String inputFile = "data/encrypted.pdf";
            String password = "your_password";
            
            // 传入密码创建转换器
            PdfStandardsConverter converter = new PdfStandardsConverter(inputFile, password);
            
            // 转换为PDF/A-2A
            converter.toPdfA2A("output/decrypted_pdfa.pdf");
            
            System.out.println("加密PDF转换完成!");
        }
    }
    
    需要注意两点:转换后的PDF/A文件不再加密,这是PDF/A标准的要求;如果归档后还需要重新加密,需要单独加一层处理。

    三、保留元数据

    默认情况下,转换可能会丢失部分元数据。如果需要保留,可以这样设置:
    import com.spire.pdf.conversion.PdfStandardsConverter;
    
    public class PdfToPdfAWithMetadata {
        public static void main(String[] args) {
            String input = "data/document_with_metadata.pdf";
            String output = "output/pdfa_with_metadata.pdf";
            
            PdfStandardsConverter converter = new PdfStandardsConverter(input);
            
            // 关键设置:保留允许的元数据
            converter.getOptions().setPreserveAllowedMetadata(true);
            
            // 执行转换
            converter.toPdfA1A(output);
            
            System.out.println("转换完成,元数据已保留!");
        }
    }
    
    **哪些元数据会被保留?** * ✅ 标题、作者、主题、关键词 * ✅ 创建日期、修改日期 * ✅ PDF/A合规性信息 * ❌ 某些自定义属性(如果不符合PDF/A标准)

    四、PDF/A转回普通PDF

    反向操作也很实用——把PDF/A转回普通PDF,比如要添加交互功能时:
    import com.spire.pdf.*;
    import com.spire.pdf.graphics.PdfMargins;
    import ja va.awt.geom.Dimension2D;
    
    public class PdfAToPdf {
        public static void main(String[] args) {
            String input = "data/sample_pdfa.pdf";
            String output = "output/regular_pdf.pdf";
            
            // 加载PDF/A文件
            PdfDocument doc = new PdfDocument();
            doc.loadFromFile(input);
            
            // 创建新文档(非PDF/A)
            PdfNewDocument newDoc = new PdfNewDocument();
            newDoc.setCompressionLevel(PdfCompressionLevel.None);
            
            // 逐页复制内容
            for (PdfPageBase page : (Iterable) doc.getPages()) {
                Dimension2D size = page.getSize();
                PdfPageBase p = newDoc.getPages().add(size, new PdfMargins(0));
                
                // 使用模板绘制页面内容
                page.createTemplate().draw(p, 0, 0);
            }
            
            // 保存为普通PDF
            newDoc.sa ve(output);
            
            // 释放资源
            newDoc.close();
            newDoc.dispose();
            doc.close();
            doc.dispose();
            
            System.out.println("PDF/A转PDF完成!");
        }
    }
    
    核心思路很清晰:加载PDF/A文档,创建新的普通PDF文档,逐页复制内容(通过模板),最后保存为新文件。 **应用场景:** * 需要添加Ja vaScript交互 * 要嵌入多媒体内容 * 解除PDF/A限制进行编辑

    五、创建带附件的PDF/A

    PDF/A-3允许嵌入任意文件作为附件,这在归档场景中非常实用:
    import com.spire.pdf.*;
    import com.spire.pdf.attachments.PdfAttachment;
    import com.spire.pdf.graphics.PdfMargins;
    import ja va.awt.geom.Dimension2D;
    import ja va.io.*;
    
    public class PdfAWithAttachments {
        public static void main(String[] args) throws IOException {
            String input = "data/report.pdf";
            String output = "output/report_with_attachments.pdfa";
            
            // 加载源PDF
            PdfDocument doc = new PdfDocument();
            doc.loadFromFile(input);
            
            // 创建PDF/A-3B文档
            PdfNewDocument newDoc = new PdfNewDocument();
            newDoc.setConformance(PdfConformanceLevel.Pdf_A_3_B);
            
            // 复制页面内容
            for (PdfPageBase page : (Iterable) doc.getPages()) {
                Dimension2D size = page.getSize();
                PdfPageBase p = newDoc.getPages().add(size, new PdfMargins(0));
                page.createTemplate().draw(p, 0, 0);
            }
            
            // 读取附件数据
            byte[] excelData = readBytesFromFile("data/raw_data.xlsx");
            byte[] xmlData = readBytesFromFile("data/metadata.xml");
            
            // 创建附件对象
            PdfAttachment attach1 = new PdfAttachment("raw_data.xlsx", excelData);
            PdfAttachment attach2 = new PdfAttachment("metadata.xml", xmlData);
            
            // 添加附件
            newDoc.getAttachments().add(attach1);
            newDoc.getAttachments().add(attach2);
            
            // 保存
            newDoc.sa ve(output, FileFormat.PDF);
            
            // 释放资源
            doc.close();
            doc.dispose();
            newDoc.close();
            newDoc.dispose();
            
            System.out.println("PDF/A-3B创建完成,包含2个附件!");
        }
        
        private static byte[] readBytesFromFile(String filePath) throws IOException {
            FileInputStream input = new FileInputStream(filePath);
            byte[] data = new byte[input.a vailable()];
            input.read(data);
            input.close();
            return data;
        }
    }
    
    **典型应用场景:** * 财务报告 + 原始Excel数据 * 学术论文 + 研究数据集 * 合同文档 + 签署记录XML * 技术文档 + 源代码包

    六、实战:批量转换工具

    实际项目中经常需要批量处理,这里提供一个完整的工具类:
    import com.spire.pdf.conversion.PdfStandardsConverter;
    import ja va.io.File;
    import ja va.util.ArrayList;
    import ja va.util.List;
    
    public class BatchPdfToPdfAConverter {
        
        /**
         * 批量转换文件夹中的所有PDF为PDF/A
         * 
         * @param inputDir 输入文件夹路径
         * @param outputDir 输出文件夹路径
         * @param pdfALevel PDF/A级别(如"1B", "2B", "3B")
         */
        public static void batchConvert(String inputDir, String outputDir, String pdfALevel) {
            File dir = new File(inputDir);
            
            if (!dir.exists() || !dir.isDirectory()) {
                System.err.println("错误:输入目录不存在 - " + inputDir);
                return;
            }
            
            // 创建输出目录
            new File(outputDir).mkdirs();
            
            // 获取所有PDF文件
            File[] pdfFiles = dir.listFiles((d, name) -> 
                name.toLowerCase().endsWith(".pdf") && !name.toLowerCase().contains("pdfa")
            );
            
            if (pdfFiles == null || pdfFiles.length == 0) {
                System.out.println("未找到PDF文件");
                return;
            }
            
            int successCount = 0;
            int failCount = 0;
            List errors = new ArrayList<>();
            
            System.out.println("开始批量转换,共 " + pdfFiles.length + " 个文件...n");
            
            for (File pdfFile : pdfFiles) {
                try {
                    String outputFileName = pdfFile.getName().replace(".pdf", "_PDFA-" + pdfALevel + ".pdf");
                    String outputPath = outputDir + File.separator + outputFileName;
                    
                    PdfStandardsConverter converter = new PdfStandardsConverter(pdfFile.getAbsolutePath());
                    
                    // 根据指定级别转换
                    switch (pdfALevel.toUpperCase()) {
                        case "1A":
                            converter.toPdfA1A(outputPath);
                            break;
                        case "1B":
                            converter.toPdfA1B(outputPath);
                            break;
                        case "2A":
                            converter.toPdfA2A(outputPath);
                            break;
                        case "2B":
                            converter.toPdfA2B(outputPath);
                            break;
                        case "3A":
                            converter.toPdfA3A(outputPath);
                            break;
                        case "3B":
                            converter.toPdfA3B(outputPath);
                            break;
                        default:
                            throw new IllegalArgumentException("不支持的PDF/A级别: " + pdfALevel);
                    }
                    
                    successCount++;
                    System.out.println("✓ " + pdfFile.getName() + " -> " + outputFileName);
                    
                } catch (Exception e) {
                    failCount++;
                    String errorMsg = pdfFile.getName() + ": " + e.getMessage();
                    errors.add(errorMsg);
                    System.err.println("✗ " + errorMsg);
                }
            }
            
            // 输出统计结果
            System.out.println("n========== 转换完成 ==========");
            System.out.println("成功: " + successCount);
            System.out.println("失败: " + failCount);
            
            if (!errors.isEmpty()) {
                System.out.println("n错误详情:");
                for (String error : errors) {
                    System.out.println("  - " + error);
                }
            }
        }
        
        public static void main(String[] args) {
            // 批量转换为PDF/A-2B
            batchConvert("input/pdfs", "output/pdfa", "2B");
        }
    }
    
    **功能特点:** * 自动扫描文件夹中的所有PDF * 支持所有PDF/A级别 * 详细的进度反馈和错误报告 * 跳过已转换的文件(文件名不含“pdfa”) * 自动创建输出目录

    七、常见问题与解决方案

    问题1:转换失败,提示字体问题

    **原因:** PDF中使用了未嵌入的字体。 **解决方案:**
    // Spire.PDF会自动处理字体嵌入
    // 如果仍然失败,检查源PDF是否损坏
    PdfStandardsConverter converter = new PdfStandardsConverter(inputFile);
    converter.getOptions().setDisableFontSubstitution(false); // 允许字体替换
    converter.toPdfA1B(outputFile);
    

    问题2:转换后文件大小暴增

    **原因:** PDF/A要求嵌入所有字体和资源。 **优化建议:** 1. 转换前压缩源PDF 2. 使用更高效的压缩算法 3. 移除不必要的元数据
    // 对于大文件,考虑分批处理
    Runtime runtime = Runtime.getRuntime();
    long freeMemory = runtime.freeMemory();
    if (freeMemory < 100 * 1024 * 1024) { // 小于100MB
        System.gc(); // 触发垃圾回收
    }

    问题3:如何验证生成的PDF/A是否合规?

    **方法1:使用在线验证工具** * ​​veraPDF​​ - 开源PDF/A验证器 * Adobe Acrobat Pro - 内置验证功能 **方法2:编程验证(需要额外库)** * 可以使用Apache PDFBox的preflight模块 * 或者调用第三方API进行验证

    问题4:转换速度慢

    **优化策略:**
    // 1. 并行处理多个文件
    ExecutorService executor = Executors.newFixedThreadPool(4);
    for (File file : files) {
        executor.submit(() -> convertSingleFile(file));
    }
    executor.shutdown();
    
    // 2. 使用SSD存储提高I/O速度
    // 3. 增加JVM堆内存:-Xmx4g
    

    八、最佳实践总结

    1. 选择合适的PDF/A级别

    * 法律/政府文档 → PDF/A-1B(最严格,兼容性最好) * 企业内部归档 → PDF/A-2B(平衡功能和兼容性) * 科研数据归档 → PDF/A-3B(可嵌入数据集) * 无障碍需求 → Level A系列(保留结构信息)

    2. 资源管理

    // 始终在finally块中释放资源
    PdfStandardsConverter converter = null;
    try {
        converter = new PdfStandardsConverter(inputFile);
        converter.toPdfA1B(outputFile);
    } finally {
        if (converter != null) {
            converter.dispose();
        }
    }
    

    3. 错误处理

    try {
        converter.toPdfA1B(outputFile);
    } catch (Exception e) {
        // 记录详细错误信息
        logger.error("PDF转换失败: " + inputFile, e);
        
        // 提供用户友好的提示
        if (e.getMessage().contains("font")) {
            System.err.println("字体问题,请检查源PDF是否使用了特殊字体");
        } else if (e.getMessage().contains("corrupt")) {
            System.err.println("文件损坏,请重新生成源PDF");
        }
    }
    

    4. 性能监控

    long startTime = System.currentTimeMillis();
    
    // 执行转换
    converter.toPdfA1B(outputFile);
    
    long endTime = System.currentTimeMillis();
    System.out.println("转换耗时: " + (endTime - startTime) + " ms");
    
    // 监控内存使用
    Runtime runtime = Runtime.getRuntime();
    long usedMemory = (runtime.totalMemory() - runtime.freeMemory()) / (1024 * 1024);
    System.out.println("内存使用: " + usedMemory + " MB");
    

    总结

    总的来说,PDF到PDF/A的转换在实际项目中非常普遍,特别是在需要长期归档的场景下。使用Spire.PDF for Ja va,整个过程相当简洁: **核心要点:** * 使用​​PdfStandardsConverter​​进行转换 * 根据需求选择合适的PDF/A级别 * 注意资源释放(调用​​dispose()​​) * 处理加密文件和元数据保留 * 批量处理时做好错误处理和日志记录 **实际应用建议:** 1. 先小规模测试,确认转换质量 2. 建立自动化流程,定期归档文档 3. 保留原始PDF和转换后的PDF/A 4. 定期验证PDF/A文件的合规性
    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 Java
    相关文章 更多
    精品专题 更多
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    IOS软件

    正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

    AI

    正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

    Mac软件 更多
    AirBuddy 3 macOS版
    AirBuddy 3 macOS版

    AirBuddy 3 是面向 macOS 的蓝牙外设增强工具,可集中查看 AirPods、Beats 与苹果设备电量,提供快速连接、播放控制、电量提醒、桌面小组件和多台 Mac 外设接力等功能。

    AirServer macOS版
    AirServer macOS版

    AirServer macOS版可把 Mac 转换为无线投屏接收端,通过 AirPlay 或 Google Cast 接收手机、平板和电脑画面,并支持多设备同时连接、高清镜像及会话录制,适合家庭娱乐、课堂教学、会议演示和应用展示。

    AnyDesk macOS版
    AnyDesk macOS版

    AnyDesk macOS版是一款适用于远程办公、设备维护和客户支持的远程桌面工具,可连接并操作异地计算机,支持文件传输、无人值守访问、会话权限控制及跨平台协作。

    Beamer 4 macOS版
    Beamer 4 macOS版

    Beamer 4是面向macOS的本地视频投屏工具,可将Mac中的影片投放到Apple TV、Chromecast及兼容设备,支持常见格式、多类字幕、环绕声、播放列表和电视遥控操作。

    Boom 3D macOS版
    Boom 3D macOS版

    Boom 3D macOS版是一款系统级音效增强工具,可为音乐、电影、游戏和流媒体提供3D虚拟环绕声、31段均衡器、音量增强及应用独立音量控制,并支持本地播放器与多种音频输出设备。

    Boris FX macOS版
    Boris FX macOS版

    Boris FX macOS版是一套面向剪辑、合成、调色及动态图形工作的专业后期工具,涵盖视觉特效、平面与三维跟踪、转描、画面修复、粒子动画和音频清理,可配合多种主流宿主软件使用。

    Capto macOS版
    Capto macOS版

    Capto 是面向 macOS 的屏幕截图、高清录屏与媒体编辑工具,支持区域及整屏捕获、网页长截图、双音轨处理、图片和视频标注、素材分类与多渠道分享,适合教师、学生、内容创作者及需要制作演示教程的用户。

    ChemDraw macOS版
    ChemDraw macOS版

    ChemDraw macOS版是一款面向化学学习、科研和制药工作的专业结构绘图工具,可创建分子、反应及生物聚合物图形,并提供结构整理、格式转换和科研成果展示能力。

    Cursor Crane macOS版
    Cursor Crane macOS版

    Cursor Crane 是一款仅面向 macOS 的键盘操控效率工具,可通过提示标签、网格、文字查找和窗口模式完成点击、滚动、定位与切换,并支持屏幕内容提取、脚本及工作流扩展。

    Deep Freeze 冰点还原 macOS版
    Deep Freeze 冰点还原 macOS版

    Deep Freeze 冰点还原 macOS版通过冻结系统配置,让受保护的Mac在重新启动后回到预设状态,并提供解冻空间、维护计划、密码保护及Apple Remote Desktop管理能力。

    Focusky macOS版
    Focusky macOS版

    Focusky macOS版是一款面向教学课件、商务汇报、产品展示和动画宣传内容的演示制作工具。它通过无限画布、路径编排、缩放旋转转场及多媒体编辑,将传统逐页幻灯片转化为更具空间感的动态演示。

    Folder Colorizer 2 macOS版
    Folder Colorizer 2 macOS版

    Folder Colorizer 2 macOS版是一款直观的文件夹外观定制工具,可更换颜色,添加表情、贴纸及图片背景,并支持批量处理、智能推荐和恢复默认样式,帮助用户更快辨认工作、学习与生活资料。

    WINDOWS 更多
    Fuzor Windows版
    Fuzor Windows版

    Fuzor Windows版是一套面向建筑、工程与施工团队的BIM/VDC平台,可汇集多来源模型和进度数据,完成实时可视化、4D施工推演、场地物流规划、问题检查、成果演示及团队协同。

    Gety Windows版
    Gety Windows版

    Gety Windows版是一款本地AI文件搜索工具,可索引电脑中的文档和图片,通过全文搜索、语义检索与OCR快速定位内容,并提供原版式预览、筛选和AI工具连接功能。

    iMazing Windows版
    iMazing Windows版

    iMazing Windows版是一款面向iPhone、iPad和iPod用户的本地设备管理工具,可在电脑上完成多版本备份、照片与音乐传输、信息导出、应用数据管理以及新旧设备迁移。

    Mercalli Windows版
    Mercalli Windows版

    Mercalli是一款面向Windows用户的专业视频稳定与画面修复工具,可分析手持、运动相机、无人机和长焦素材中的抖动,校正滚动快门及CMOS果冻效应,并提供曝光、色彩、锐度和镜头画面优化功能。

    NiceLabel Windows版
    NiceLabel Windows版

    NiceLabel是面向Windows平台的商业条码标签设计与打印工具,可制作文字、图像、条码及变量数据标签,并支持数据库连接、批量打印、打印自动化和集中管理,适用于制造、仓储、物流及零售等场景。

    pdfFactory Windows版
    pdfFactory Windows版

    pdfFactory是一款面向Windows的PDF虚拟打印机,可从支持打印的应用程序创建PDF,在保存前完成即时预览、页面排序、旋转、删除及多文档合并,并支持字体嵌入、邮件发送等办公功能。

    Polarr Windows版
    Polarr Windows版

    Polarr Windows版是一款面向摄影爱好者与内容创作者的照片编辑工具,提供曝光和色彩调整、曲线、HSL、滤镜、局部蒙版、人像修饰、叠加效果及批量导出等功能,适合日常修图、社交媒体配图和较细致的影像后期处理。

    AIDA64 Windows版
    AIDA64 Windows版

    AIDA64是一款面向Windows电脑用户的系统信息、硬件诊断与基准测试工具,可识别处理器、主板、显卡、存储设备和系统组件,并实时监控温度、电压、功耗及风扇转速,适合装机验收、性能比较和稳定性排查。

    Portraiture Windows版
    Portraiture Windows版

    Portraiture Windows版是一款面向人像摄影后期的智能润饰插件,可在Photoshop、Lightroom Classic和Affinity中完成皮肤平滑、AI区域识别、肤色统一及补光处理,

    priPrinter 7 Windows版
    priPrinter 7 Windows版

    priPrinter 7 Windows版是一款虚拟打印机与打印预览工具,可接收其他程序的打印任务,在输出前调整页面顺序、边距与版式,并添加水印、页码或批注。专业版还支持文本修正、内容脱敏、打印历史和PDF发布。

    PSD Manager Windows版
    PSD Manager Windows版

    PSD Manager是适用于Windows版Autodesk 3ds Max的渲染后期插件,可把画面、渲染元素、对象及材质蒙版整理成分层PSD或PSB文件,便于在Photoshop、Affinity Photo和After Effects

    RayFire Windows版
    RayFire Windows版

    RayFire是运行于Windows版Autodesk 3ds Max中的破碎与刚体动力学插件,集成实时Voronoi切割、交互式拆除、爆炸、裂纹、缓存和体素等工具,适合影视特效、游戏动画及建筑坍塌镜头制作。