使用c#将表从Sql Server导出到PDF文件

时间:2014-04-12 17:07:30

标签: c# sql pdf

我在sql中有几个表,我想在单击表单按钮后将它们导出为PDF文件 有谁知道我该怎么做?

当我将表从SQL导出到Excel时,我有这段代码:

protected void insertBTN(object sender, EventArgs e)
{
string conString = @"Data Source =XXXX; Initial Catalog=XXXX;     Persist Security     Info=True;User ID=XXXX; Password=XXXX";SqlConnection sqlCon     = new     SqlConnection(conString);
sqlCon.Open();

SqlDataAdapter da = new SqlDataAdapter("SELECT * from InjuryScenario", sqlCon);
System.Data.DataTable dtMainSQLData = new System.Data.DataTable();
da.Fill(dtMainSQLData);
DataColumnCollection dcCollection = dtMainSQLData.Columns;
// Export Data into EXCEL Sheet
Microsoft.Office.Interop.Excel.ApplicationClass ExcelApp = new                                            
Microsoft.Office.Interop.Excel.ApplicationClass();
ExcelApp.Application.Workbooks.Add(Type.Missing);
// ExcelApp.Cells.CopyFromRecordset(objRS);
for (int i = 1; i < dtMainSQLData.Rows.Count + 2; i++)
{
    for (int j = 1; j < dtMainSQLData.Columns.Count + 1; j++)
    {
        if (i == 1)
        {
            ExcelApp.Cells[i, j] = dcCollection[j - 1].ToString();
        }
        else
            ExcelApp.Cells[i, j] = dtMainSQLData.Rows[i - 2][j - 1].ToString();
    }
}
ExcelApp.ActiveWorkbook.SaveCopyAs("C:\\Users\\Mor Shivek\\Desktop\\test.xls");
ExcelApp.ActiveWorkbook.Saved = true;
ExcelApp.Quit();
}

2 个答案:

答案 0 :(得分:0)

“导出为PDF”是什么意思?仅使用上面的excel导出然后使用PDF打印机发送文件的打印命令,这不是最简单的方法吗? 如果要本机创建PDF,则很可能需要一些工作来布局文档。

//编辑:对SO的一点点研究也会带来这个:Best C# API to create PDF

答案 1 :(得分:0)

请参阅this

using System;
using System.Windows.Forms;
using System.Diagnostics;
using PdfSharp;
using PdfSharp.Drawing;
using PdfSharp.Pdf;
using System.Data.SqlClient;
using System.Data;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    private void button1_Click(object sender, EventArgs e)
    {
        try
        {
            string connetionString = null;
            SqlConnection connection ;
            SqlCommand command ;
            SqlDataAdapter adapter = new SqlDataAdapter();
            DataSet ds = new DataSet();
            int i = 0;
            string sql = null;
            int yPoint = 0;
            string pubname = null;
            string city = null;
            string state = null;

            connetionString = "Data Source=YourServerName;Initial Catalog=pubs;User ID=sa;Password=zen412";
            sql = "select pub_name,city,country from publishers";
            connection = new SqlConnection(connetionString);
            connection.Open();
            command = new SqlCommand(sql, connection);
            adapter.SelectCommand = command;
            adapter.Fill(ds);
            connection.Close();

            PdfDocument pdf = new PdfDocument();
            pdf.Info.Title = "Database to PDF";
            PdfPage pdfPage = pdf.AddPage();
            XGraphics graph = XGraphics.FromPdfPage(pdfPage);
            XFont font = new XFont("Verdana", 20, XFontStyle.Regular );

            yPoint = yPoint + 100;

            for (i = 0; i < = ds.Tables[0].Rows.Count - 1; i++)
            {
                pubname = ds.Tables[0].Rows[i].ItemArray[0].ToString ();
                city = ds.Tables[0].Rows[i].ItemArray[1].ToString();
                state = ds.Tables[0].Rows[i].ItemArray[2].ToString();

                graph.DrawString(pubname, font, XBrushes.Black, new XRect(40, yPoint, pdfPage.Width.Point, pdfPage.Height.Point), XStringFormats.TopLeft);

                graph.DrawString(city, font, XBrushes.Black, new XRect(280, yPoint, pdfPage.Width.Point, pdfPage.Height.Point), XStringFormats.TopLeft);

                graph.DrawString(state, font, XBrushes.Black, new XRect(420, yPoint, pdfPage.Width.Point, pdfPage.Height.Point), XStringFormats.TopLeft);

                yPoint = yPoint + 40;
            }


            string pdfFilename = "dbtopdf.pdf";
            pdf.Save(pdfFilename);
            Process.Start(pdfFilename);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }
}

}