Создание 2-страничного PDF с другим фоновым изображением на второй странице - PullRequest
1 голос
/ 01 октября 2011

Я пытаюсь использовать itextsharp для получения динамической информации и создания PDF-файла с ним. В PDF-файлах используется фоновое изображение на каждой странице, которое отличается, а текстовое содержимое располагается там, где необходимо использовать помощник contentByte. Это план в любом случае. Я зависаю, когда пытаюсь добавить другую страницу, а затем перетащить изображение и текст на эту страницу ... Моя первая страница заканчивается изображением, которое должно быть на моей второй странице, а изображение первой страницы вообще не отображается. на любой странице ... Мой код пока выглядит следующим образом:

                Function ID_and_Parking(ByVal id As Integer) As ActionResult
        Dim _reg_info As reg_info = db.reg_info.Single(Function(r) r.id = id)
        Dim _conf_info As conf_info = db.conf_info.Single(Function(f) f.id = 0)
        Dim _name As String = String.Empty


        If Not String.IsNullOrWhiteSpace(_reg_info.name_tag_pref) Then
            _name = _reg_info.name_tag_pref
        Else
            _name = _reg_info.first_name + " " + _reg_info.last_name
        End If
        Dim _LastName As String = _reg_info.last_name
        Dim _Employer As String = _reg_info.business_name
        Dim _Class_1 As String = _reg_info.tues_class
        Dim _Class_2 As String = _reg_info.wed_class
        Dim _Class_3 As String = _reg_info.thur_class
        Dim _Class_4 As String = _reg_info.fri_class
        Dim _BeginDate As String = _conf_info.conf_start_date
        Dim _endDate As String = _conf_info.conf_end_date
        Dim _dates As String = _BeginDate + "-" + _endDate

        If IsDBNull(_reg_info.tues_class) Then
            _Class_1 = ""
        End If
        If IsDBNull(_reg_info.wed_class) Then
            _Class_2 = ""
        End If
        If IsDBNull(_reg_info.thur_class) Then
            _Class_3 = ""
        End If
        If IsDBNull(_reg_info.fri_class) Then
            _Class_4 = ""
        End If


        Dim pdfpath As String = Path.Combine(AppDomain.CurrentDomain.BaseDirectory) + "\PDF_Files\"
        Dim imagepath As String = Path.Combine(AppDomain.CurrentDomain.BaseDirectory) + "\PDF_Files\"
        Dim _PdfName As String = _LastName + ".pdf"
        Dim doc As New Document
        doc.SetPageSize(iTextSharp.text.PageSize.LETTER)
        doc.SetMargins(0, 0, 0, 0)

        Dim _PnameFont As iTextSharp.text.Font = FontFactory.GetFont(FontFactory.TIMES_ROMAN, 18, iTextSharp.text.Font.NORMAL)
        Dim BF_Times As BaseFont = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1252, False)
        Dim _Parking_Name As New Font(BF_Times, 18, Font.NORMAL, BaseColor.BLACK)
        Dim _Parking_Date As New Font(BF_Times, 24, Font.BOLD, BaseColor.BLACK)



        Try
            Dim writer As PdfWriter = PdfWriter.GetInstance(doc, New FileStream(pdfpath + _PdfName, FileMode.Create))
            doc.Open()


            Dim jpg As Image = Image.GetInstance(imagepath + "/Parking_Pass.jpg")
            jpg.Alignment = iTextSharp.text.Image.UNDERLYING
            jpg.ScaleToFit(612, 792)
            doc.add(jpg)
            Dim cb As PdfContentByte = writer.DirectContent
            'Render Parking Permit
            cb.BeginText()
            cb.SetFontAndSize(BF_Times, 16)
            cb.SetTextMatrix(145, 135.5)
            cb.ShowText(_BeginDate)
            cb.EndText()

            cb.BeginText()
            cb.SetFontAndSize(BF_Times, 16)
            cb.SetTextMatrix(429, 135.5)
            cb.ShowText(_endDate)
            cb.EndText()



            Dim _idJpg As Image = Image.GetInstance(imagepath + "/Id_Tag.jpg")
            Dim imageWidth As Decimal = _idJpg.Width
            Dim imageHeight As Decimal = _idJpg.Height

            doc.SetPageSize(iTextSharp.text.PageSize.LETTER)


            _idJpg.Alignment = iTextSharp.text.Image.UNDERLYING
            _idJpg.ScaleToFit(612, 792)
            doc.NewPage()
            doc.Add(_idJpg)

            cb.BeginText()
            cb.SetFontAndSize(BF_Times, 18)
            cb.SetTextMatrix(100, 50)
            cb.ShowText(_name)
            cb.EndText()

            cb.BeginText()
            cb.SetFontAndSize(BF_Times, 18)
            cb.SetTextMatrix(200, 100)
            cb.ShowText(_Employer)
            cb.EndText()

            cb.BeginText()
            cb.SetFontAndSize(BF_Times, 18)
            cb.SetTextMatrix(300, 150)
            cb.ShowText(_Class_1)
            cb.EndText()

            cb.BeginText()
            cb.SetFontAndSize(BF_Times, 18)
            cb.SetTextMatrix(310, 50)
            cb.ShowText(_Class_2)
            cb.EndText()

            cb.BeginText()
            cb.SetFontAndSize(BF_Times, 18)
            cb.SetTextMatrix(320, 50)
            cb.ShowText(_Class_3)
            cb.EndText()

            cb.BeginText()
            cb.SetFontAndSize(BF_Times, 18)
            cb.SetTextMatrix(330, 50)
            cb.ShowText(_Class_4)
            cb.EndText()



            doc.Close()
        Catch dex As DocumentException
            Response.Write(dex.Message)
        Catch ioex As IOException
            Response.Write(ioex.Message)
        Catch ex As Exception
            Response.Write(ex.Message)



        End Try



        Return RedirectToAction("showUserPDF", New With {.pdfName = _PdfName})


    End Function

Я был на каждом форуме по этому поводу, но вся информация, которую я нашел, кажется, не соответствует тому, что я ищу, ИЛИ, может быть, я просто говорю, что неправильно все было вместе ... Любая помощь могла бы с благодарностью ...

Ответы [ 2 ]

1 голос
/ 01 октября 2011

В вашем коде у вас есть это:

    Dim jpg As iTextSharp.text.Image = iTextSharp.text.Image.GetInstance(imagepath + "/Parking_Pass.jpg")
    jpg.Alignment = iTextSharp.text.Image.UNDERLYING
    jpg.ScaleToFit(612, 792)

Но вы никогда не добавляете jpg к doc

0 голосов
/ 02 октября 2011

Я на самом деле выяснил проблему, я упустил из виду мое размещение новой страницы и размещение изображения ... У меня было изображение 2-й страницы перед новой страницей ... Спасибо за вашу помощь ... Если кому-то еще нужно динамически заполнитьизображение с данными вышеупомянутого решения работает ...

...