使用 C# 从 SQL 服务器数据库显示 PDF
Show PDF from SQL Server database using C#
我想显示一个 .pdf
我已经上传到我的 SQL 服务器数据库,但我需要它以表格形式显示并直接从数据库中显示(不将其保存到我的电脑)。
我正在使用 SQL Server 2012 和 Visual Studio 2019。
我尝试使用 AxAcroPdf,但我不知道它是如何工作的。
DataTable dt = new DataTable();
SqlCommand show = new SqlCommand("SELECT documento FROM table WHERE p = '" + contentP + "'AND n = '" + contentN + "' AND documento is not null;", con);
SqlDataAdapter adapter = new SqlDataAdapter(show);
adapter.Fill(dt);
if (dt.Rows.Count > 0)
{
byte[] ap = (byte[])dt.Rows[0]["documento"];
MemoryStream ms = new MemoryStream(ap);
var axacropdf = new AcroPDFLib.AcroPDF();
axacropdf.LoadFile(ap.ToString());
axacropdf.setShowToolbar(true);
axacropdf.setView("Fit");
}
最好不要为此目的使用 adobe reader,因为
- 必须安装在客户端PC上
- 它是一个非常慢的 COM 自动化服务器组件
而是使用 nuget 来获取:
https://github.com/pvginkel/PdfiumViewer
包。
根据我的测试,AcroPDF 似乎不支持加载字节数组以在 winform 中显示 pdf。
我找到了另一种直接从数据库中显示pdf的方法。
首先,请尝试安装以下nuget->ceTe.DynamicPDF.Viewer.NET
.
其次,请从工具箱中添加一个名为 pdfviewer
的控件。
第三,可以试试下面的代码,从winform中的byte数组加载pdf。
string connstr = "connstr";
SqlConnection connection = new SqlConnection(connstr);
connection.Open();
string sql = "select * from PdfReader";
SqlCommand cmd = new SqlCommand(sql, connection);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataTable table = new DataTable();
adapter.Fill(table);
if (table.Rows.Count > 0)
{
byte[] ap = (byte[])table.Rows[0]["Content"];
PdfDocument pdfDocument = new PdfDocument(ap);
pdfViewer1.Open(pdfDocument);
}
结果:
我找到了解决问题的方法:
我安装了 nuget Syncfusion.PdfViewer.Windows
然后我从名为 PdfDocumentView
的工具箱中添加了一个 pdf 查看器
然后我放下一段代码,在开头添加 SqlConnection:
DataTable dt = new DataTable();
SqlCommand verDoc = new SqlCommand("SELECT documento FROM inspeccionGestionDocumental WHERE placa = '" + contenidoPlaca + "'AND numeroPropuesta = '" + contenidoNumeroPropuesta + "' AND documento is not null;", con);
SqlDataAdapter adapter = new SqlDataAdapter(consultar);
adapter.Fill(dt);
if(dt.Rows.Count > 0)
{
byte[] ap = (byte[])dt.Rows[0]["documento"];
MemoryStream ms = new MemoryStream(ap);
pdfDocumentView1.Load(ms);
}
我想显示一个 .pdf
我已经上传到我的 SQL 服务器数据库,但我需要它以表格形式显示并直接从数据库中显示(不将其保存到我的电脑)。
我正在使用 SQL Server 2012 和 Visual Studio 2019。
我尝试使用 AxAcroPdf,但我不知道它是如何工作的。
DataTable dt = new DataTable();
SqlCommand show = new SqlCommand("SELECT documento FROM table WHERE p = '" + contentP + "'AND n = '" + contentN + "' AND documento is not null;", con);
SqlDataAdapter adapter = new SqlDataAdapter(show);
adapter.Fill(dt);
if (dt.Rows.Count > 0)
{
byte[] ap = (byte[])dt.Rows[0]["documento"];
MemoryStream ms = new MemoryStream(ap);
var axacropdf = new AcroPDFLib.AcroPDF();
axacropdf.LoadFile(ap.ToString());
axacropdf.setShowToolbar(true);
axacropdf.setView("Fit");
}
最好不要为此目的使用 adobe reader,因为
- 必须安装在客户端PC上
- 它是一个非常慢的 COM 自动化服务器组件
而是使用 nuget 来获取: https://github.com/pvginkel/PdfiumViewer 包。
根据我的测试,AcroPDF 似乎不支持加载字节数组以在 winform 中显示 pdf。
我找到了另一种直接从数据库中显示pdf的方法。
首先,请尝试安装以下nuget->ceTe.DynamicPDF.Viewer.NET
.
其次,请从工具箱中添加一个名为 pdfviewer
的控件。
第三,可以试试下面的代码,从winform中的byte数组加载pdf。
string connstr = "connstr";
SqlConnection connection = new SqlConnection(connstr);
connection.Open();
string sql = "select * from PdfReader";
SqlCommand cmd = new SqlCommand(sql, connection);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataTable table = new DataTable();
adapter.Fill(table);
if (table.Rows.Count > 0)
{
byte[] ap = (byte[])table.Rows[0]["Content"];
PdfDocument pdfDocument = new PdfDocument(ap);
pdfViewer1.Open(pdfDocument);
}
结果:
我找到了解决问题的方法:
我安装了 nuget Syncfusion.PdfViewer.Windows
然后我从名为 PdfDocumentView
然后我放下一段代码,在开头添加 SqlConnection:
DataTable dt = new DataTable();
SqlCommand verDoc = new SqlCommand("SELECT documento FROM inspeccionGestionDocumental WHERE placa = '" + contenidoPlaca + "'AND numeroPropuesta = '" + contenidoNumeroPropuesta + "' AND documento is not null;", con);
SqlDataAdapter adapter = new SqlDataAdapter(consultar);
adapter.Fill(dt);
if(dt.Rows.Count > 0)
{
byte[] ap = (byte[])dt.Rows[0]["documento"];
MemoryStream ms = new MemoryStream(ap);
pdfDocumentView1.Load(ms);
}