iTextSharp не работает с циклом foreach

#c# #asp.net-mvc-4 #itext

#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();
 

Комментарии:

1. Лучше всего будет установить точку останова в вашем цикле foreach и пошагово просматривать каждую строку, наблюдая за переменными, чтобы увидеть, как они меняются. Вполне может быть, что переменная getAllPositions не содержит данных так, как вы планируете.

2. Я отладил свой код, он правильно определяет все позиции.

3. Можете ли вы определить, что означает «не работает»? Делает ли это что-то вроде размещения только 1 изображения на странице? Если это так, вы можете попытаться переместить создание и инициализацию вашего signImg в цикл (мне любопытно, работает ли document.add по ссылке, а не по значению).

4. отсутствие woking означает, что он не вставляет изображения в PDF-документ

5. «еще одна проблема в этом коде заключается в том, что он просто экспортирует первую страницу PDF-файла, вместо этого я хочу экспортировать все страницы PDF-файла» — ваш код создает только одну страницу. Так что я не понимаю вашего замечания.