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

打开包管理器后,搜索ITextSharp并安装此包。

安装完毕后,点击生成-生成(项目名),即可生成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,这样就搭建好环境了。为了能够支持中文,我们需要自己导入一个字体文件在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下载

unity利用ITextSharp实现导出pdf文件相关推荐

  1. asp.net2.0导出pdf文件完美解决方案【月儿原创】

    asp.net2.0导出pdf文件完美解决方案 作者:清清月儿 主页:http://blog.csdn.net/21aspnet/           时间:2007.5.28 PDF简介:PDF(P ...

  2. c 将html导出pdf文件,将HTML页面转换为PDF文件并导出

    目碎前整要们开自近事端个广的的带近事端个广前,在大多数的管理系统中,都会有这样一个功能:根据相关的条件查询相应的数据,并生成可视化报表,然后可导出为PDF文件.本文只展现生成可视化报表之后导出PDF文 ...

  3. html与css入门经典doc,HTML+CSS入门 flying-saucer如何利用HTML来生成PDF文件

    本篇教程介绍了HTML+CSS入门 flying-saucer如何利用HTML来生成PDF文件,希望阅读本篇文章以后大家有所收获,帮助大家HTML+CSS入门. < 1.导入maven依赖 9. ...

  4. Excel VBA自动化办公:选择Excel文件合并订单数据生成订单汇总表、生成发货单并导出pdf文件、自动统计业绩生成业绩表

    基本需求: 让用户可以选择多个文件,根据用户选中的工作簿进行合并订单数据,按照预先设计好的订单模板写入数据. 对于同一个交易序号下面有多个订单的,需要计算该交易序号下所有订单的总金额.总票数.相同交易 ...

  5. Itext导出pdf文件

    使用iText生成pdf文件并导出 前言: 项目中需要给用户提供一个可以导出pdf文件的功能,用来展示本月的数据.像excel.word这种直接就可以使用POI进行导出了,但是导出pdf格式的文件 我 ...

  6. python读取pdf文档书签 bookmark_Python利用PyPDF2库获取PDF文件总页码实例

    Python中可以利用PyPDF2库来获取该pdf文件的总页码,可以根据下面的方法一步步进行下去: 1.首先,要安装PyPDF2库,利用以下命令即可: pip install PyPDF2 2.接着, ...

  7. python读取扫描形成的pdf_Python利用PyPDF2库获取PDF文件总页码实例

    Python中可以利用PyPDF2库来获取该pdf文件的总页码,可以根据下面的方法一步步进行下去: 1.首先,要安装PyPDF2库,利用以下命令即可: pip install PyPDF2 2.接着, ...

  8. 关于RDLC使用导出PDF文件时,中文乱码解决方案

    MicrosftReportViewer控件导出乱码,主要需要设置的是RDCL文件: 关于使用RDLC导出PDF文件时,中文出现乱码现象,本文进行了解决: 其实很简单. 本人平台情况VS2008 英文 ...

  9. java 使用itext导出PDF文件,中文不显示问题解决

    之前写的java 使用itext 导出pdf 发现有个问题,在今天使用的时候,发现一个问题,就是当单元格中写中文的时候,导出来的pdf中文不显示. java 使用itext导出PDF文件,图片文字左右 ...

最新文章

  1. 数据库实时转移之Confluent介绍(一)
  2. 11 为了进一步_小米11正式官宣!12月28号整装待发,这几点或成关键
  3. springer journal recommendation tool
  4. vs java调试_基于VSCode的Java编程语言的构建调试环境搭建指南(作业三)
  5. arm-linux-gcc 4.7.4 源码编译 手工制作
  6. Aop动态代理解决问题
  7. tools URL 收集
  8. 20sccm_SCCM 2012安装图解教程(一步一步详细步骤)
  9. 如何应对软件项目的投标答辩
  10. Windows下搭建HTK
  11. win7查看硬盘序列号
  12. RTCM CRC-24校验计算
  13. PyMuPDF 拼版(一)
  14. 如何在腾讯云学生服务器搭建个人网站——配置web开发环境详细步骤
  15. java 是否数字 正则_java使用正则判断是否是数字
  16. 异步实现商品详情页查询
  17. 【翻译】西川善司「实验做出的游戏图形」「GUILTY GEAR Xrd -SIGN-」中实现的「纯卡通动画的实时3D图形」的秘密,前篇(1)...
  18. 怎么制作视频的动态字幕?
  19. Lawliet|C语言学习笔记2——变量/数据类型/表达式
  20. 服务器无法在此时接收控制信息,如何修复win10专业版wifi错误1061服务无法在此时接受控制信息...

热门文章

  1. uniapp中的input,输入input回车事件和输入input事件
  2. MySQL Like模糊查询速度太慢如何进行优化
  3. 电脑底部工具栏跑到侧面了怎么办
  4. 安卓手机访问 linux系统文件下载,安卓手机跑起完整的Linux系统
  5. WebDriver 原理
  6. 长沙四大商圈你足够了解吗?
  7. pd虚拟机Parallels Desktop 17 mac
  8. tsung 安装及测试使用
  9. 协众信息:平面设计色彩搭配九大技巧
  10. vue如何部署二级目录