小工具知识网

当前位置: 首页 > 行业知识 > Unity-PDF分割器(iTextSharp)

行业知识

Unity-PDF分割器(iTextSharp)

2026-10-22 04:37:52 来源:互联网转载

PDF分割器

  • Unity-PDF分割器
    • 前言
    • 核心思路
    • 解决过程
      • 一、Unity安装iTextSharp
      • 二、运行时计算将要生成文件的大小
      • 三、分割核心代码
      • 四、使用StandaloneFileBrowser
      • 五、其他的一些脚本
      • 六、游戏界面主体的构建
        • MainWindow
        • WarningPanel & FinishPanel
        • By-Round Moon

          Unity-PDF分割器

          PDFSplitter 资源包下载链接【CSDN】免费

          前言

          最近有这么一个需求,PDF太大了,需要拆分成多份,要求每份的PDF不大于10MB。刚开始,我认为这应该很简单,但是足足耗费了一天的时间去解决该问题。

          核心思路

          首先是核心部分当然是PDF如何进行分割了,不仅仅要分割,还要统计分割的大小。然后我还不想伤硬盘,直接写在硬盘上判断文件是否超过了大小,然后回溯。所以我只能在运行的时候检测文件大小。核心部分的难度基本如上所述。下面来讲解一下我是如何解决这个问题的吧。还有一个最难的问题,那就是如何不用UnityEditor库来打开FilePanel又叫FileDialog。

          解决过程

          一、Unity安装iTextSharp

              首先在Visual Studio Community中安装.NET 桌面开发,用来下载需要的dll。当然也可以直接在Unity中打开VS后下载,我这其实是脱裤子放屁,但是我想保持Unity的干净,不想事后卸载删除,所以我采用了这个方法。

              安装完成后创建一个控制台应用。

          将框架选为.NET Framework 2.0。

          打开后,在 工具》NuGet包管理器》管理解决方案的NuGet程序包。在浏览中搜索iTextSharp并安装。安装完成后,在.sln文件的同路径下有一个packages包,把里面BouncyCastle.1.8.9和iTextSharp.5.5.13.3的lib文件夹下的.dll文件拷贝到Unity项目的Plugins(自己创建)文件夹中。

          二、运行时计算将要生成文件的大小

              明确已知,没有提供方法来确定生成后的大小。但是我们可以先在MemoryStream中存储一下,并获取MemoryStream空间所消耗的大小。

              下面给出示例代码。

              long GetMemorySize(string inputFilePath)    {        PdfReader reader = new PdfReader(inputFilePath);        Document document = new Document();        MemoryStream memoryStream = new MemoryStream();        PdfCopy copy = new PdfCopy(document, memoryStream);        document.Open();        copy.AddPage(copy.GetImportedPage(reader, 1));//这里页码是从1到最后的,不是常规的从0开始。        long memorySize = memoryStream.Length;        reader.Close();        document.Close();        memoryStream.Close();        return memorySize;    }

          三、分割核心代码

          这份脚本为PDFSplitter。将来挂在GameController空物体上。

          using UnityEngine;using System.IO;using iTextSharp.text;using iTextSharp.text.pdf;using UnityEngine.UI;using System.Collections.Concurrent;using System.Collections;public class PDFSplitter : MonoBehaviour{    private string inputFilePath;    private string outputDirectory;    private long maxFileSizeMB = 10 * 1024 * 1024;    private PdfReader reader;    public InputField from;    public InputField save;    public Slider slider;    private ConcurrentQueue resultQueue = new ConcurrentQueue();    public void Splitter()    {        System.Threading.Thread thread = new System.Threading.Thread(Run);        thread.Start();        StartCoroutine(updateSlider());    }    IEnumerator updateSlider()    {        float res;        while (true)        {            while (!resultQueue.TryDequeue(out res)) ;            if (res 

上一篇:Win10禁用休眠功能指南,解决休眠难题,提升系统效率!

下一篇:怎么取消信息服务器?