unity利用ITextSharp实现导出pdf文件

这篇具有很好参考价值的文章主要介绍了unity利用ITextSharp实现导出pdf文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

unity创建pdf文件首先需要搭建ITextSharp环境,先要导入所需要的dll文件。选用vs创建一个控制台项目,然后点击工具-包管理器-管理解决方案的Nuget程序包选项,如图所示:unity 利用itextsharp,unity,unity,游戏引擎

 打开包管理器后,搜索ITextSharp并安装此包。unity 利用itextsharp,unity,unity,游戏引擎

 安装完毕后,点击生成-生成(项目名),即可生成dll文件,在项目路径下bin\Debug中找到itextsharp.dll,BouncyCastle.Crypto.dll导入到unity中。这时基本就能使用itextsharp了,但是只是编辑器运行正常,打包后还是会报错。这时还需要导入另外一个dll文件。

打开unity安装目录,我这里使用的版本是unity2022.1,找到Editor\Data\MonoBleedingEdge\lib\mono文件夹。再打开文件夹unityaot-win32或者unityjit-win32也行,找到I18N.West.dll,I18N.dll这两个个文件并导入到unity。除此之外要确保api兼容级别设置成.NET Framework而不是.NET Standard2.1。设置方法是点击菜单编辑-项目设置-玩家-api兼容级别。如图所示:unity 利用itextsharp,unity,unity,游戏引擎这样就搭建好环境了。为了能够支持中文,我们需要自己导入一个字体文件在StreamingAssets中,为了支持安卓,需要把这个字体文件拷贝到可读写路径下面。我这里创建了一个PDFReport类来方便调用创建文件具体代码如下:

 

using iTextSharp.text;
using iTextSharp.text.pdf;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.IO;
using UnityEngine;
using UnityEngine.Networking;
using Font = iTextSharp.text.Font;
using Image = iTextSharp.text.Image;
public class PDFReport : IDisposable
{
    BaseFont heiBaseFont;//基础字体
    public Font titleFont;//报告字体样式
    public Font firstTitleFont;//大标题字体样式
    public Font secondTitleFont;//小标题字体样式
    public Font contentFont;//内容字体样式
    public Document document;//文档
    string newFontPath;

   public static  IEnumerator 拷贝资源到读写路径(string Oldpath, string newPath)
    {
        if (File.Exists(newPath))
        {
            yield break;
        }
        Uri uri = new Uri(Oldpath);
        using (UnityWebRequest request = UnityWebRequest.Get(uri))
        {
            yield return request.SendWebRequest();
            if (string.IsNullOrEmpty(request.error))
            {
                yield return File.WriteAllBytesAsync(newPath, request.downloadHandler.data);
            }
            else
            {
                Debug.LogError(request.error);
            }           
        }      
    }

   public IEnumerator 初始化(string filePath)
    {
        document = new Document(PageSize.A4);
        string dirPath = Path.GetDirectoryName(filePath);
        Directory.CreateDirectory(dirPath);
        //为该Document创建一个Writer实例:
        FileStream os = new FileStream(filePath, FileMode.Create);
        PdfWriter.GetInstance(document, os);
        //打开文档
        document.Open();
        string oldPath = Application.streamingAssetsPath + "/SourceHanSansSC-Medium.otf";
        newFontPath = Application.persistentDataPath  + "/SourceHanSansSC-Medium.otf";
        yield return 拷贝资源到读写路径(oldPath, newFontPath);
        //创建字体
        heiBaseFont = BaseFont.CreateFont(newFontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
        titleFont = new Font(heiBaseFont, 26, 1);
        firstTitleFont = new Font(heiBaseFont, 20, 1);
        secondTitleFont = new Font(heiBaseFont, 13, 1);
        contentFont = new Font(heiBaseFont, 11, Font.NORMAL);
    }

    public void 添加PDF表格(DataTable dt)
    {
        List<float> columns = new List<float>();
        for (int i = 0; i < dt.Columns.Count; i++)
        {
            columns.Add(1);
        }
        添加PDF表格(dt, columns.ToArray());
    }
    public void  添加PDF表格(DataTable dt, float[] columnW)
    {

        List<string> list = new List<string>();
        for (int i = 0; i < dt.Columns.Count; i++)
        {
            string s = dt.Columns[i].ColumnName;
            list.Add(s);
        }
        //数据
        foreach (DataRow row in dt.Rows)
        {
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                string s = row[i].ToString();
                list.Add(s);
            }
        }
        AddTable(columnW, list.ToArray());
    }
    /// <summary>
    /// 增加表格
    /// </summary>
    /// <param name="column">列数宽度比例</param>
    /// <param name="content">内容</param>
    public void AddTable(float[] columns, string[] content)
    {
        PdfPTable table = new PdfPTable(columns);
        table.WidthPercentage = 100;
        //table.SetTotalWidth(new float[] {10,10,10,10,10,10,10,20 });
        for (int i = 0; i < content.Length; i++)
        {
            PdfPCell cell = new PdfPCell(new Phrase(content[i], contentFont));
            cell.HorizontalAlignment = Element.ALIGN_CENTER;
            cell.VerticalAlignment = Element.ALIGN_MIDDLE;
            
            table.AddCell(cell);
        }
        document.Add(table);
    }


    /// <summary>
    /// 空格
    /// 加入空行,用以区分上下行
    /// </summary>
    public void AddNullLine()
    {
        Paragraph nullLine = new Paragraph(" ",secondTitleFont);
        nullLine.Leading = 5;
        document.Add(nullLine); 
    }

    /// <summary>
    /// 加入标题
    /// </summary>
    /// <param name="titleStr">标题内容</param>
    /// <param name="font">标题字体,分为一级标题和二级标题</param>
    /// <param name="alignmentType">对齐格式,0为左对齐,1为居中</param>
    public void AddTitle(string titleStr, int alignmentType = 0)
    {
        Paragraph contentP = new Paragraph(new Chunk(titleStr, titleFont));
        contentP.Alignment = alignmentType;
        document.Add(contentP);
    }

    /// <summary>
    /// 插入文字内容
    /// </summary>
    /// <param name="content">内容</param>
    /// <param name="alignmentType">对齐格式,0为左对齐,1为居中</param>
    public void AddContent(string content, int alignmentType = 0)
    {
        Paragraph contentP = new Paragraph(new Chunk(content, contentFont));
        contentP.Alignment = alignmentType;
        document.Add(contentP);
    }

    /// <summary>
    /// 插入图片
    /// </summary>
    /// <param name="imagePath"></param>
    /// <param name="scale"></param>
    public void AddImage(string imagePath,int width = 475,int height =325)
    {
        if (!File.Exists(imagePath))
        {
            Debug.LogWarning("该路径下不存在指定图片,请检测路径是否正确!");
            return;
        }
        Image image = Image.GetInstance(imagePath);
        image.ScaleToFit(width, height);
        image.Alignment = Element.ALIGN_JUSTIFIED;
        document.Add(image);
    }

    /// <summary>
    /// 关闭文档
    /// </summary>
    public void Dispose()
    {
        document.Close();
    }
}


以上代码可以添加pdf表格文本图片等功能。具体调用方法如下:

 void Start()
    {
        button.onClick.AddListener(() => { StartCoroutine(创建Pdf()); });
    }
   
    public IEnumerator 创建Pdf()
    {
        
        string[] Columns = new string[] { "编号", "名称", "产品", "系列2222222222222222222222222222222", "建筑面积", "用漆量", "数量", "详情" };
        DataTable dt = new DataTable();
        foreach (string item in Columns)
        {
            dt.Columns.Add(item);
        }
        for (int i = 0; i < 20; i++)
        {
            DataRow dr = dt.NewRow();
            object[] objs = { 999, "这是名称", "这是产品", "系列门窗",
                "建筑面积6666", "用漆量111", "数量33.3333", "详情啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊" };
            dr.ItemArray = objs;
            dt.Rows.Add(dr);
        }
        string path = Application.persistentDataPath + "/test.pdf";
        using (PDFReport pdf = new PDFReport())
        {
            yield return pdf.初始化(path);
            pdf.AddTitle("这是标题");
            pdf.AddContent("这是表格内容");
            pdf.添加PDF表格(dt);
        }
        Debug.Log("创建成功打开文件:" + path);
        Application.OpenURL(path);
    }

经过测试打包pc,安卓都能正常生成pdf文件。但是不支持webgl,不确定是否支持ios。实例项目下载地址:unity导出pdf文件-Unity3D文档类资源-CSDN下载文章来源地址https://www.toymoban.com/news/detail-613153.html

到了这里,关于unity利用ITextSharp实现导出pdf文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Figma怎么导出PDF文件?

    Figma 是一款备受网页和 UI 设计师喜爱的基于矢量的设计工具。其最大的优势在于方便用户与团队成员进行协作。当设计师需要与其他团队成员、设计师或客户共享设计文件时,设计师需要将设计图案导出为 PDF 格式以方便查看。同样地,当设计师需要将设计图稿打印出来时,

    2024年02月06日
    浏览(29)
  • 利用webview 内嵌实现小程序,h5 ,app 页面跳转和数据通讯,附带实现pdf文件的预览(兼容ios和安卓)

    承载网页的容器。会自动铺满整个小程序页面, 个人类型的小程序暂不支持使用。 客户端 6.7.2 版本开始,navigationStyle: custom 对 web-view 组件无效 相关的属性说明:开放能力 / web-view (qq.com) 2.bindmessage 可以实现网页端和小程序之间通讯, 但只在特定时机触发 网页端向小程序

    2024年02月02日
    浏览(60)
  • 【PHP】使用TCPDF导出PDF文件

    目录 一、安装TCPDF类库 二、安装字体 三、使用TCPDF导出PDF文件 目的:PHP通过TCPDF类库导出文件为PDF。 开发语言及类库:ThinkPHP、TCPDF 效果图如下 在项目根目录使用composer安装TCPDF,安装完成后会在vendor目录下生成tecnickcom文件夹,就是TCPDF类库 有时候导出的文件是乱码,是因为

    2024年02月09日
    浏览(28)
  • 【TCPDF】使用TCPDF导出PDF文件

    目录 一、安装TCPDF类库 二、安装字体 三、使用TCPDF导出PDF文件 目的:PHP通过TCPDF类库导出文件为PDF。 开发语言及类库:ThinkPHP、TCPDF 效果图如下 在项目根目录使用composer安装TCPDF,安装完成后会在vendor目录下生成tecnickcom文件夹,就是TCPDF类库 有时候导出的文件是乱码,是因为

    2024年02月06日
    浏览(31)
  • react-前端excel 文件/PDF文件 导入 --导出,照片上传

    需要了解,new FormData() --上传时,将内容转为文件流                   FormData提供一种表示表单数据的键值对的构造方式,实现表单数据的序列化,从而减少表单元素的拼接,提高工作效率                  new FileReader()--base64压缩,目前不了解 一、excel文件导出      三

    2023年04月08日
    浏览(33)
  • Vue中如何进行文件打印与PDF导出

    在Vue应用中,有时候需要将页面内容打印出来或者导出为PDF格式,以满足用户的需求。本文将介绍如何在Vue应用中实现文件打印和PDF导出的功能。 文件打印是指将页面内容输出到打印机上,将其打印成纸质文档。在Vue中,可以通过浏览器提供的 window.print() 方法来实现文件打

    2024年02月09日
    浏览(35)
  • 【PDF合并】利用 Python 合并 PDF 文件

    依赖安装 在 Python 中,可以使用 PyPDF2 模块来合并多个 PDF 文件。 首先导入 PdfFileMerger 类。接下来,创建一个 PdfFileMerger 对象 merger。 然后,使用 append 方法逐个添加要合并的 PDF 文件。在示例中,将要合并的 PDF 文件路径存储在列表 pdf_files 中,可以根据实际情况进行修改。

    2024年03月16日
    浏览(71)
  • Windows 安装 pandoc 将 jupyter 导出 pdf 文件

    访问 https://github.com/jgm/pandoc/releases,下载最新版安装文件,例如, 3.1.6.1 版, 下载完成后,双击安装文件进行安装。详细略。 访问 https://miktex.org/download,下载 MiKTeX 安装文件。 下载完成后,双击安装文件进行安装。详细略。 完结!

    2024年02月13日
    浏览(28)
  • vue3.2 导出pdf文件或表格数据

    要在Vue 3中导出PDF文件,你可以使用第三方库来处理PDF生成和导出。一个常用的库是jspdf,它允许你在客户端或服务器端生成PDF文档。 以下是在Vue 3中使用jspdf库导出PDF文件的基本步骤: 第一步首先,安装jspdf库。你可以使用npm或yarn来安装它: npm install jspdf --save  或  pnpm in

    2024年02月09日
    浏览(27)
  • 将Visio和Excel导出成没有白边的PDF文件

    在使用Latex时,要导入矢量图eps格式。但是VISIO无法输出eps格式,这就需要将其导出为pdf。但是导出pdf时,往往会有大量的白边。VISIO无白边导出pdf格式的方法如下: 1.文件——开发工具——显示shapeSheet——页 2.将其全部改为0 注:输入0之后先按enter之后再输入其他的0 3.设计—

    2024年02月14日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包