【如何使用ITextSharp生成PDF文件与问题】

在给学校制作虚拟教学项目时,需要将学生成绩与填写的答案生成PDF文件进行保存。只存文字又不太好看,就将学校logo放进行,情绪价值满满。

在实现过程中遇到很多小的问题,记录下来供后人提供解决方法。

本文使用的脚本主要来自这篇文章:Unity之创建与导出PDF

在此基础上进行优化更改。后续会写出更加完整详细的代码。

下面记录问题!

一:生成不了中文

默认字体是生成不了中文的,需要下载一个中文字体,我这里使用的是小米官方字体,同时摆脱了商用的侵权风险。下载字体后,放入Unity文件夹中。

二:生成的PDF只能在编辑器模式下使用,打包后无法使用

打包后的文件一直提示编码问题

经查找发现是设置字体时,传递的路径问题,无法识别到我所给的字体路径

#region 设置字体

        /// <summary>
        /// 设置字体
        /// </summary>
        public void SetBaseFont(string path)
        {
            basefont = BaseFont.CreateFont(path, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
        }

无论字体文件是放到Plugins文件夹还是Resources文件夹,均无法使用代码传递路径。

解决方法:

在生成脚本中不使用代码传递路径,直接在构造函数的脚本中指定字体路径。

#region 设置字体
private string fontPath = Application.streamingAssetsPath + "/Fonts/SimSun.ttf";
/// <summary>
/// 设置字体
/// </summary>
public void SetBaseFont(string path)
{
    //  basefont = BaseFont.CreateFont(path, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

    basefont = BaseFont.CreateFont(fontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

}

三:无法生成图片

与问题二一样,生成图片在编辑器模式下可用,在打包后,提示编码问题。经查证,同样是使用构造函数时,传递的图片路径无法识别。

构造函数代码:

/// <summary>
/// 添加图片
/// </summary>
/// <param name="path">图片路径</param>
/// <param name="Alignment">对齐方式(1为居中,0为居左,2为居右)</param>
/// <param name="newWidth">图片宽</param>
/// <param name="newHeight">图片高</param>
public Image AddImage(string imagePath, int Alignment, int fitWidth, int fitHeight)
{
    if (!File.Exists(imagePath))
    {
        Debug.Log("该路径下不存在指定图片,请检测路径是否正确!");
        return null;
    }
    Debug.Log("检查图片路径"+ imagePath);
    Image image = Image.GetInstance(imagePath);
    image.ScaleToFit(fitWidth, fitHeight);
    image.Alignment = Alignment;
    document.Add(image);
    return image;
}

解决方法:

具体出报错的代码时这一段:

 Image image = Image.GetInstance(imagePath);

GetInstance方法无法识别传递过来的图片路径,这次我们不使用指定路径的方法,太过死板。

GetInstance方法除了传递图片的路径,还可以接受图片的字节数组(byte[],我们将图片信息处理为byte[],就可以正常使用构造的函数了。

增加的构造函数代码:

 /// <summary>
 /// 纹理添加图片
 /// </summary>
 /// <param name="imagePath"></param>
 /// <param name="Alignment"></param>
 /// <param name="fitWidth"></param>
 /// <param name="fitHeight"></param>
 /// <returns></returns>
 public Image AddImage(byte[] imageBytes, int Alignment, int fitWidth, int fitHeight)
 {
     Image image = Image.GetInstance(imageBytes);
     image.ScaleToFit(fitWidth, fitHeight);
     image.Alignment = Alignment;
     document.Add(image);
     return image;
 }

图片字符化处理:

  Texture2D UIImage2d = Resources.Load<Texture2D>("logo");
  byte[] imageBytes = UIImage2d.EncodeToPNG();
  Image image2= pdf.AddImage(imageBytes,1, 400, 200);

这样就解决了读取图片的问题~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值