Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win


export to a formatted pdf

Posted on 2004-08-16
Medium Priority
Last Modified: 2008-01-09
I am trying to export data from sql server database to an adobe pdf file using asp.net.  I'm not able to find much documentation on how to accomplish this.  Do you have any references for me to learn how to do this?  Easiest Ways? Etc?

Thank you for any help you can provide.
Question by:rock815
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 3
  • 2
  • +1
LVL 17

Expert Comment

ID: 11810765
This will create a file from the blob value in SQL Server:

Private Sub saveFile(ByVal sFileName As String, sBlobText As String)
    Dim fileStream As IO.FileStream
    Dim streamWriter As IO.BinaryWriter
    Dim filePath As String

    'create a new instance of the file stream object
    'note: if the file does not exist, the constructor will create it
    fileStream = New IO.FileStream(path:=sFileName, mode:=IO.FileMode.OpenOrCreate, access:=IO.FileAccess.Write)

    'create an instance of a character writer
    streamWriter = New IO.StreamWriter(stream:=fileStream)

    'set the file pointer to the end of the file
    streamWriter.BaseStream.Seek(offset:=0, origin:=IO.SeekOrigin.Begin)

    'write a line of text to the end of the file

    'apply the update to the file

    'close the stream writer

    'close the file stream object

  End Sub

And this will print the file:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim wrdApp As New Word.Application
    wrdApp.Visible = False
    wrdApp.ActiveDocument.PrintOut = False
End Sub


LVL 17

Expert Comment

ID: 11810769
will also print pdf!!

Expert Comment

ID: 11810971
I was under the impression that it is not that easy to do as Aeros has suggested.  I have not tried his code, so who knows it may export the data to PDF.

You may want to check out this link: http://www.aspnetworld.com/articles/2004011801.aspx

That should give you some other options.
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!


Author Comment

ID: 11814201
Anymore information out there on asp.net to pdf?
LVL 10

Expert Comment

ID: 11826373

You can use Crystal Reports.NET, which comes with Visual Studio .NET.  You design the report just like you would if you were going to print the report in a desktop app.  Crystal's ReportClass has an Export() method that, with a number of property settings, will write the report to a PDF file.  You then use Response.WriteFile() to stream it to the browser.  In my case I delete the file after streaming it to the browser.  All the info you need, with code and all, is here:


Also, configuring your target server to support this is a bit of a PIA, but it is manageable.  Everything you will need is at:


Also, make sure to go to BusinessObjects website and get the latest hotfixes for Crystal Reports.NET.  Apply them to your dev box and to any target servers AFTER you run the setup project referred to in the crnet_deployment.pdf document linked to above.

I recommend you have an aspx page dedicated solely to managing the retrieval of data, instantiating of the report, exporting to a PDF file and streaming it to the browser.  If someone clicks a button meant to show the report, do a Response.Redirect() to that page with info in the querystring concerning what report will be shown and any parameters that might be needed for the data retrieval.  This will enable them to hit the back button and go back to the page they were on.  If you stream a PDF file from the page that the user clicked a button to get the report, you are still on that page, technically.  If they hit the back button, they will get the previous page, which will be very confusing.

I have done a lot of this.  Once you get the hang of the coding, it will be pretty easy and I think you will find it a very elegant way to handle presenting data nicely in a PDF file.  I'd be happy to throw some code up if you need it.


Author Comment

ID: 11829896

Thanks for your help, I think your route is the one I'll take.  Can you email me or post some code that would allow a parameter to be passed to crystal reports?  I'm using the common report parameters that will be input by the user (Start Date & End Date).  This would be most helpful! :-)  If you prefer to email me the code, please send it to afraze@gmail.com

Thanks again!,
LVL 10

Accepted Solution

jnhorst earned 500 total points
ID: 11832448

I would pass the parameter info in the querystring of the Response.Redirect() and then use that info either to set command parameters for a stored procedure or the create the SQL statement (if you're using SQL Server I would recommend creating a stored procedure that takes the start and end dates and returns just the data needed).

It would look something like this in the page where the user clicks a button or something to get to the report (this assumes you have text boxes or some other control for the start and end dates):

... in the click event:
Dim strURL As String = yourPDFExportPage.aspx?rpt=yourreportname&start=" & txtStart.Text & "&End=" & txtEnd.Text

Then in yourPDFExportPage.aspx:

Protected Sub Page_Load()
' get data.
Select Case Request.QueryString("rpt")
     Case "thisreport"
          thisReportsDataAdapter.SelectCommand.Parameters(1).Value = Request.QueryString("start")
          thisReportsDataAdapter.SelectCommand.Parameters(2).Value = Request.QueryString("end")
End Select

If Not Page.IsPostBack
     ' set export options.
     Dim expOpts As ExportOptions()
     Dim destOpts As New DiskFileDestinationOptions()

     ' if the file is going to be saved, you might put this within the select case block to give it a different name
     ' depending on which report you are exporting.  since I delete the file after writing it to the browser, I
     ' usually put this here since the name of the file really does not matter if it is going to be deleted right away.
     ' make sure write permissions are granted to the user (or the anonymous account) on the folder to which the file
     ' will be saved.
     destOpts.DiskFileName = "theFileName"
     ' which report?
     Select Case Request.QueryString("rpt")
          Case "thisreport"
               ' the rptThisReport class will be defined when you drag a ReportDocument from the toolbar to your page
               ' designer (the ReoprtDocument usually shows up in the Component toolbar).  A dialog will ask which report
               ' you want.  Select the report and deselect the "Generate Cached Strongly Typed Report" checkbox.  The tray
               ' at the bottom of the page designer will show the instance.  right click it, select properties, and change the name
               ' to rptThisReport (or whatever you want it to be).
               Dim rpt As New rptThisReport()

               ' set the datasource with the DataSet that contains the datatable that is the basis for the report.  you populated
               ' this datatable at the beginning of the Page_Load event with the report's data.

               ' set the export options.
               expOpts = rpt.ExportOptions
               expOpts.ExportDestinationType = ExportDestinationType.DiskFile;
               expOpts.ExportFormatType = ExportFormatType.PortableDocFormat;
               expOpts.DestinationOptions = destOpts;                  

               ' Export.

          Case "thatReport"
               ' instantiate the report.
               Dim rpt As New rptThatReport()

               '... and so on.

               ' Export.

     End Select

     ' write the report to the broswer.
     Response.ContentType = "application/pdf"

     ' delete file.  You may not want to do this if the report needs to be saved.
End If

End Sub

God Luck
LVL 10

Expert Comment

ID: 11835063

I just realized that if you follow the comments above and drag a ReportDocument object from the Components toolbar to the page designer and select your report, you will not need to dim a variable to an instance of the report.  That will be done in the automatically generated code.  You just need to call rpt.SetDataSource(theDataSet) and then follow the rest of the code above.


Author Comment

ID: 11835430

Thanks for all your help on this, I really appreciate it.  I think I understand where you are going with this, so I can take it from here.. Should I have any issues, maybe I'll drop you an email.

Thanks again,

Featured Post

Tech or Treat!

Submit an article about your scariest tech experience—and the solution—and you’ll be automatically entered to win one of 4 fantastic tech gadgets.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

One of the pain points with developing AJAX, JavaScript, JQuery, and other client-side behaviors is that JavaScript doesn’t allow for cross domain request for pulling content. For example, JavaScript code on www.johnchapman.name could not pull conte…
Sometimes in DotNetNuke module development you want to swap controls within the same module definition.  In doing this DNN (somewhat annoyingly) swaps the Skin and Container definitions to the default admin selections.  To get around this you need t…
This course is ideal for IT System Administrators working with VMware vSphere and its associated products in their company infrastructure. This course teaches you how to install and maintain this virtualization technology to store data, prevent vuln…
Have you created a query with information for a calendar? ... and then, abra-cadabra, the calendar is done?! I am going to show you how to make that happen. Visualize your data!  ... really see it To use the code to create a calendar from a q…

604 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question