iTextSharp无法使用foreach循环

时间:2019-04-18 16:36:16

标签: c# asp.net-mvc-4 itext

我正在尝试将图像插入pdf文件,并且此代码可以在没有foreach循环的情况下正常运行,但不能在foreach循环中工作。图像的位置(顶部,左侧)保存在数据库中,因此foreach循环获取图像的位置,然后将其动态放置。但是,当我使用foreach循环时,此代码无法正常工作,如果我为要插入pdf文件中的图像提供静态位置,则可以正常工作。 而且我必须放置多个图像,这就是为什么我使用foreach循环,并且图像的位置将是动态的,因此必须使用foreach循环。 此代码中的另一个问题是它只是导出pdf文件的第一页,而不是我要导出pdf文件的所有页面,即带有图像的完整pdf文档。这里的任何人都可以帮助我解决这个问题

        string pdfFile = Server.MapPath("~/files/" + arg);

        ViewBag.file = pdfFile;

        var getAllPostitions = db.DraggedElements.Where(l => l.doc_name == arg).ToList();
        ViewBag.tag_positions = getAllPostitions;

        string imagepath = Server.MapPath("~/images/sign.png");
        string DEST = @"e:/TestComplete.pdf";
        //string IMG = @"C:Saved//TestImage.JPG";
        iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(pdfFile);
        iTextSharp.text.Rectangle Size = reader.GetPageSizeWithRotation(1);
        Document document = new Document(Size);
        FileStream fs = new FileStream(DEST, FileMode.Create, FileAccess.Write);
        iTextSharp.text.pdf.PdfWriter weiter = iTextSharp.text.pdf.PdfWriter.GetInstance(document, fs);
        document.Open();
        PdfContentByte cb = weiter.DirectContent;
        PdfImportedPage page = weiter.GetImportedPage(reader, 1);
        cb.AddTemplate(page, 0, 0);
        iTextSharp.text.Image signImg = iTextSharp.text.Image.GetInstance(imagepath);
        signImg.ScaleToFit(50, 50);
        foreach (var position in getAllPostitions)
        {
            string topStr = position.top;
            string topStr1 = topStr.Split(':')[1];
            string topStr2 = topStr1.Split('p')[0];
            float top = float.Parse(topStr2);

            string leftStr = position.left;
            string leftStr1 = leftStr.Split(':')[1];
            string leftStr2 = leftStr1.Split('p')[0];
            float left = float.Parse(leftStr2);
            signImg.SetAbsolutePosition(top, left);
            document.Add(signImg);
        }
        document.Close();
        fs.Close();
        weiter.Close();
        reader.Close();

0 个答案:

没有答案