yujing_huan 2022-09-11 15:37 采纳率: 0%
浏览 101
已结题

itextsharp时填充图片报错,如何解决?(语言-c#)

问题遇到的现象和发生背景

ITextSharp.dll,在将图片处理好后没法将图片放入已经处理好的pdf中;

问题相关代码,请勿粘贴截图

private void pdf() //PDF的相关操作流程
{

        string tempFilePath = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"testpdf\E0105-" + SN.Text + ".pdf";  //生成pdf文件的路径定义

        iTextSharp.text.pdf.PdfDocument document = new iTextSharp.text.pdf.PdfDocument();

        iTextSharp.text.pdf.PdfReader pdfReader = new iTextSharp.text.pdf.PdfReader(System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"\E0105插箱下线测试报告-模板.pdf");  //pdf模板文件定义
        PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(tempFilePath, FileMode.OpenOrCreate));
        AcroFields pdfFormFields = pdfStamper.AcroFields;
        pdfStamper.FormFlattening = true;


        //pdf添加图片
        string imagePath = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "image";  //插入图片的文件路径
        //iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(imagePath + @"/E0105-" + SN.Text + ".jpg");
        iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"image\E0105-" + SN.Text + ".jpg");

        float percentage = 1;
        //这里都是图片最原始的宽度与高度  
        float resizedWidht = img.Width;
        float resizedHeight = img.Height;

        //这时判断图片宽度是否大于页面宽度减去也边距,如果是,那么缩小,如果还大,继续缩小,  
        //这样这个缩小的百分比percentage会越来越小  
        while (resizedWidht > (document.PageSize.Width - document.LeftMargin - document.RightMargin) * 0.8)
        {
            percentage = percentage * 0.9f;
            resizedHeight = img.Height * percentage;
            resizedWidht = img.Width * percentage;
        }

        while (resizedHeight > (document.PageSize.Height - document.TopMargin - document.BottomMargin) * 0.8)
        {
            percentage = percentage * 0.9f;
            resizedHeight = img.Height * percentage;
            resizedWidht = img.Width * percentage;
        }

        //这里用计算出来的百分比来缩小图片  
        img.ScalePercent(percentage * 100);
        //图片定位,页面总宽283,高416;这里设置0,0的话就是页面的左下角 让图片的中心点与页面的中心店进行重合  
        img.SetAbsolutePosition(document.PageSize.Width / 2 - resizedWidht / 2, document.PageSize.Height / 2 - resizedHeight / 2);
        document.Add(img);  //无法将实例放到对象里?????



        //
        BaseFont simheiBase = BaseFont.CreateFont(@"C:\Windows\Fonts\simhei.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);  //添加中文显示

        pdfFormFields.AddSubstitutionFont(simheiBase);

        #region  //将数据显示的数值添加至pdf文本域
        pdfStamper.AcroFields.SetField("SN", SN.Text);
        pdfStamper.AcroFields.SetField("TIME", label9.Text);
        pdfStamper.AcroFields.SetField("VOLT", VOLT.Text);
        pdfStamper.AcroFields.SetField("MAXV", MAXV.Text);
        pdfStamper.AcroFields.SetField("MINV", MINV.Text);
        pdfStamper.AcroFields.SetField("MAXT", MAXT.Text);
        pdfStamper.AcroFields.SetField("MINT", MINT.Text);
        pdfStamper.AcroFields.SetField("VD", CELLVD.Text);
        pdfStamper.AcroFields.SetField("TD", TD.Text);
        pdfStamper.AcroFields.SetField("V1", CELL1.Text);
        pdfStamper.AcroFields.SetField("V2", CELL2.Text);
        pdfStamper.AcroFields.SetField("V3", CELL3.Text);
        pdfStamper.AcroFields.SetField("V4", CELL4.Text);
        pdfStamper.AcroFields.SetField("V5", CELL5.Text);
        pdfStamper.AcroFields.SetField("V6", CELL6.Text);
        pdfStamper.AcroFields.SetField("V7", CELL7.Text);
        pdfStamper.AcroFields.SetField("V8", CELL8.Text);
        pdfStamper.AcroFields.SetField("V9", CELL9.Text);
        pdfStamper.AcroFields.SetField("V10", CELL10.Text);
        pdfStamper.AcroFields.SetField("V11", CELL11.Text);
        pdfStamper.AcroFields.SetField("V12", CELL12.Text);
        pdfStamper.AcroFields.SetField("V13", CELL13.Text);
        pdfStamper.AcroFields.SetField("V14", CELL14.Text);
        pdfStamper.AcroFields.SetField("V15", CELL15.Text);
        pdfStamper.AcroFields.SetField("V16", CELL16.Text);
        pdfStamper.AcroFields.SetField("T1", T1.Text);
        pdfStamper.AcroFields.SetField("T2", T2.Text);
        pdfStamper.AcroFields.SetField("T3", T3.Text);
        pdfStamper.AcroFields.SetField("T4", T4.Text);
        pdfStamper.AcroFields.SetField("T5", T5.Text);
        pdfStamper.AcroFields.SetField("T6", T6.Text);
        pdfStamper.AcroFields.SetField("T7", T7.Text);
        pdfStamper.AcroFields.SetField("T8", T8.Text);
        #endregion


        //****************************************************************************************************************************************


       // pdfStamper.AcroFields.SetField("chk", "yes", true);
        pdfStamper.Close();
        pdfReader.Close();

        ////解析文本
        //PdfReaderContentParser parser = new PdfReaderContentParser(pdfReader);

        //PdfWriter pdfWriter;

        //ITextExtractionStrategy strategy;
        //strategy = parser.ProcessContent<SimpleTextExtractionStrategy>(1, new SimpleTextExtractionStrategy());
        //string ss = strategy.GetResultantText();

        //byte[] buffer = pdfReader.GetPageContent(1);

        //string strBody = System.Text.Encoding.Default.GetString(buffer);
    }
运行结果及报错内容

img

我的解答思路和尝试过的方法

我想按模板保存另一个pdf,在设置的文本域填充值;在将图片处理好大小放到文件里,再关闭文件;
目前填充值是可以的,一填充图片,就会报错;

  • 写回答

2条回答 默认 最新

  • 来灵 2022-09-11 20:44
    关注

    document.Add(img);
    这行代码打个断点,代码执行到这里时,看下img对象各属性值,哪个有异常

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月12日
  • 创建了问题 9月11日

悬赏问题

  • ¥200 使用python编写程序,采用socket方式获取网页实时刷新的数据,能定时print()出来就行。
  • ¥15 matlab如何根据图片中的公式绘制e和v的曲线图
  • ¥15 我想用Python(Django)+Vue搭建一个用户登录界面,但是在运行npm run serve时报错了如何解决?
  • ¥15 QQ邮箱过期怎么恢复?
  • ¥15 登录他人的vue项目显示服务器错误
  • ¥15 (标签-android|关键词-app)
  • ¥60 如何批量获取json的url
  • ¥15 comsol仿真压阻传感器
  • ¥15 Python线性规划函数optimize.linprog求解为整数
  • ¥15 llama3中文版微调