0

I have a pdf document that I'm filling with iTextSharp. I can load my document, fill in the fields with results from a sql query and then output to a tabbed browsers window.

I would like to save the document to a location on the server so there is a physical copy of that document that can be loaded on the customer screen, I can't for the life of me figure out how to output the same data to a saved location on the server. I've tried different google results but I'm not even close, I may not have a correct understanding of the process.

Here is my current code:

        Dim mapPath As String = Server.MapPath("~/Content/PDF/Standard_HD.pdf")

    Dim reader As New PdfReader(mapPath)
    Dim output = New MemoryStream()
    Dim stamper = New PdfStamper(reader, output, "\0", True)



    'LOAD UNIT DETAILS FROM DATABASE
    makeSQLceConnection()

    sqlCmd = New SqlCommand("EXEC dbo.[web_wizardSheetPDF] @wizardID= '" & guid & "'")

    sqlCmd.Connection = myCon
    sqlReader = sqlCmd.ExecuteReader
    Dim rowNumber As Integer = 1
    Dim headerText As String = Nothing
    Dim controlText As String = Nothing


    While sqlReader.Read()
        headerText = sqlReader(14).ToString

        stamper.AcroFields.SetField("BoxColor", sqlReader(12).ToString)
        stamper.AcroFields.SetField("HardwareColor", sqlReader(13).ToString)

        Select Case rowNumber
            Case = 1
                stamper.AcroFields.SetField("Unit1", rowNumber)

                stamper.AcroFields.SetField("TopBack1", sqlReader(6).ToString)
                stamper.AcroFields.SetField("FrontBottom1", sqlReader(7).ToString)
                stamper.AcroFields.SetField("Handing1", sqlReader(8).ToString)
                stamper.AcroFields.SetField("Operation1", sqlReader(9).ToString)

                stamper.AcroFields.SetField("Slat1", sqlReader(10).ToString)

                stamper.AcroFields.SetField("Tracks1", sqlReader(11).ToString)

            Case = 2
                stamper.AcroFields.SetField("Unit2", rowNumber)

                stamper.AcroFields.SetField("TopBack2", sqlReader(6).ToString)
                stamper.AcroFields.SetField("FrontBottom2", sqlReader(7).ToString)
                stamper.AcroFields.SetField("Handing2", sqlReader(8).ToString)
                stamper.AcroFields.SetField("Operation2", sqlReader(9).ToString)

                stamper.AcroFields.SetField("Slat2", sqlReader(10).ToString)

                stamper.AcroFields.SetField("Tracks2", sqlReader(11).ToString)

            Case = 3
                stamper.AcroFields.SetField("Unit3", rowNumber)

                stamper.AcroFields.SetField("TopBack3", sqlReader(6).ToString)
                stamper.AcroFields.SetField("FrontBottom3", sqlReader(7).ToString)
                stamper.AcroFields.SetField("Handing3", sqlReader(8).ToString)
                stamper.AcroFields.SetField("Operation3", sqlReader(9).ToString)

                stamper.AcroFields.SetField("Slat3", sqlReader(10).ToString)

                stamper.AcroFields.SetField("Tracks3", sqlReader(11).ToString)

            Case = 4
                stamper.AcroFields.SetField("Unit4", rowNumber)

                stamper.AcroFields.SetField("TopBack4", sqlReader(6).ToString)
                stamper.AcroFields.SetField("FrontBottom4", sqlReader(7).ToString)
                stamper.AcroFields.SetField("Handing4", sqlReader(8).ToString)
                stamper.AcroFields.SetField("Operation4", sqlReader(9).ToString)

                stamper.AcroFields.SetField("Slat4", sqlReader(10).ToString)

                stamper.AcroFields.SetField("Tracks4", sqlReader(11).ToString)

            Case = 5
                stamper.AcroFields.SetField("Unit5", rowNumber)

                stamper.AcroFields.SetField("TopBack5", sqlReader(6).ToString)
                stamper.AcroFields.SetField("FrontBottom5", sqlReader(7).ToString)
                stamper.AcroFields.SetField("Handing5", sqlReader(8).ToString)
                stamper.AcroFields.SetField("Operation5", sqlReader(9).ToString)

                stamper.AcroFields.SetField("Slat5", sqlReader(10).ToString)

                stamper.AcroFields.SetField("Tracks5", sqlReader(11).ToString)

            Case = 6
                stamper.AcroFields.SetField("Unit6", rowNumber)

                stamper.AcroFields.SetField("TopBack6", sqlReader(6).ToString)
                stamper.AcroFields.SetField("FrontBottom6", sqlReader(7).ToString)
                stamper.AcroFields.SetField("Handing6", sqlReader(8).ToString)
                stamper.AcroFields.SetField("Operation6", sqlReader(9).ToString)

                stamper.AcroFields.SetField("Slat6", sqlReader(10).ToString)

                stamper.AcroFields.SetField("Tracks6", sqlReader(11).ToString)

        End Select
        rowNumber += 1
    End While

    stamper.AcroFields.SetField("MotorsControls", controlText)
    stamper.AcroFields.SetField("Header", headerText)

    sqlReader.Close()
    myCon.Close()
    closeSQLceConnection()

    'close the stamper after we our done
    stamper.FormFlattening = False

    stamper.Close()
    reader.Close()

    'send completed pdf to browser
    Response.AddHeader("Content-Disposition", "inline; filename=SWSC_DOC_PDF.pdf")
    Response.ContentType = "application/pdf"

    Response.BinaryWrite(output.ToArray())
    'File.WriteAllBytes(Server.MapPath("~/Test"),output.ToArray())
    Response.[End]()

I apologizes for not having any examples of what I've tried so far, they are embarrassingly not even close.

  • 1
    What happens when this is uncommented (also, I assume that directory exists with allowing IIS write access)? 'File.WriteAllBytes(Server.MapPath("~/Test"),output.ToArray()) – NoAlias Mar 27 '17 at 22:05
  • I get the following error: I've added Network Service, IUSR and even went as far as Everyone but nothing seems to work. ASP.NET is not authorized to access the requested resource. – Paul Walker Mar 29 '17 at 01:10
  • See if this link helps: http://stackoverflow.com/questions/14653722/how-do-i-give-asp-net-permission-to-write-to-a-folder-in-windows-7 – NoAlias Mar 29 '17 at 14:41
  • You can't write a **file** to a **directory** path. So the commented line should be: `File.WriteAllBytes(Server.MapPath("~/Test/PDF-FILENAME.pdf"),output.ToArray())` - substitute `PDF-FILENAME.pdf` with whatever you want to name the PDF file. – kuujinbo Mar 29 '17 at 19:03
  • Thanks @NoAlias I tried so many different things I'd forgot that line was at the bottom. – Paul Walker Mar 30 '17 at 15:07
  • Thanks @kuujinbo As soon as I added a filename it worked as expected. – Paul Walker Mar 30 '17 at 15:07

0 Answers0