vb.net 导出PDF
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vb.net 导出PDF相关的知识,希望对你有一定的参考价值。
vb.net 导出PDF。大神给段代码,我研究研究学习下,谢啦!~
利用DataWindow.net在 vb.net 下导出PDF格式文件利用datawindow.net,导出PDF文件,实现前提:
1.安装Acrobat Distiller虚拟打印机,注意要用datawindow.net提供的打印驱动,在c:\program files\sybase\datawindow.net2.0\driver中,在文章最后,我会提供一个静态安装虚拟打印机的批处理文件,方便安装。
2.安装Ghostscript 7.05 ,在网上找,免费的。
3.导出PDF文件前,一要指定虚拟打印机名,其次导出格式为PDF(Export.PDF.Method=Distill!),另外还要指定 PDF.Distill.CustomPostScript=Yes。
具体代码如下:
''' <summary>
''' 导出文件
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub btnExport_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExport.Click
Try
Dim strFilename, strPrinter As String
Dim saveDg As New SaveFileDialog
strPrinter = Me.dwPrint.Describe("DataWindow.Print.PrinterName")
saveDg.FileName = Me.dwPrint.Tag.ToString
saveDg.Filter = "Pdf文件|*.pdf|Excel文件|*.xls|所有文件|*.*"
If saveDg.ShowDialog = Windows.Forms.DialogResult.OK Then
strFilename = saveDg.FileName
If strFilename.IndexOf(".pdf") > 0 Then
Me.dwPrint.Modify("DataWindow.Print.PrinterName='Acrobat Distiller'")
Me.dwPrint.Modify("DataWindow.Export.PDF.Method=Distill!")
Me.dwPrint.Modify("DataWindow.Export.PDF.Distill.CustomPostScript=Yes")
Me.dwPrint.SaveAs(strFilename, Sybase.DataWindow.FileSaveAsType.Pdf, True)
ElseIf strFilename.IndexOf(".xls") > 0 Then
Me.dwPrint.SaveAs(strFilename, Sybase.DataWindow.FileSaveAsType.Excel, True)
End If
Me.dwPrint.Modify("DataWindow.Print.PrinterName='" + strPrinter + "'")
MessageBox.Show("导出成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
End If
Catch ex As Exception
MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
4 批处理文件(实现静默安装) 参考技术A 这是MSDN给出的一些答案:
http://social.msdn.microsoft.com/Forums/vstudio/en-US/e79afbe3-70d8-4d4e-b651-a864b7e5e7d9/read-parse-a-pdf-file-using-vbnet
http://social.msdn.microsoft.com/Forums/vstudio/en-US/4ca6b6fc-b483-44b3-bce0-eeb2f159c879/how-to-read-a-pdf-text-in-vbnet
http://social.msdn.microsoft.com/Forums/vstudio/en-US/83dd4a50-ee2a-4a57-a71b-7d2f5e06d024/how-to-read-pdf-file-line-by-line-like-text-file
PDF 生成后无法打开 (vb.net) (asp.net)
【中文标题】PDF 生成后无法打开 (vb.net) (asp.net)【英文标题】:Unable to open PDF after it's generated (vb.net) (asp.net) 【发布时间】:2018-05-01 16:01:39 【问题描述】:很抱歉这个问题,但我是 .net 和 vb.net 的新手。我真的需要你的帮助!我在 asp.net (vb.net) 中生成一个 PDF 文件。它应该在浏览器中自动打开,但它给出了错误 - 无法加载 PDF 文档。我看到它是在驱动器上创建并正确打开的。可能是什么问题?
Protected Sub ExportToPDF(sender As Object, e As EventArgs)
Response.ContentType = "application/pdf"
Dim pdfDoc As New Document(PageSize.A4, 50.0F, 10.0F, 10.0F, 10.0F)
PdfWriter.GetInstance(pdfDoc, New
FileStream(Context.Server.MapPath("~/ejik.pdf"), FileMode.CreateNew))
pdfDoc.Open()
pdfDoc.Add(New Paragraph("What is going on?"))
pdfDoc.Close()
Response.Write(pdfDoc)
Response.End()
End Sub
提前感谢您!
P.S.:抱歉,我忘了说我使用 iTextSharp 创建 PDF
【问题讨论】:
您可能想要写入 pdfDoc 的字节。 抱歉,不明白你的意思 【参考方案1】:你的代码全错了。您正在创建一个 Web 应用程序,并创建了一个 Document
类型的 对象,以便您可以将 PDF 文件 写入磁盘。 (您甚至需要磁盘上的那个文件吗?您正在编写一个 Web 应用程序!)然后,您不将文件发送给最终用户,而是将 Document
object 写入 Response
而不是(文件的字节)。那永远都行不通,不是吗?
如果你先在内存中创建PDF文件会更好:
MemoryStream ms = new MemoryStream();
PdfWriter writer = PdfWriter.GetInstance(document, ms);
document.Open();
document.Add(Assinatura());
document.Close();
然后你在内存中获取那个文件的字节,并将它们发送到Response
:
byte[] bytes = ms.ToArray();
ms.Close();
Response.Clear();
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition", "attachment;filename=ejik.pdf");
Response.Buffer = true;
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.BinaryWrite(bytes);
Response.End();
这就是评论的意思。您需要发送 PDF 文件的 byte
数组,而不是 pdfDoc
。另见iTextSharp is producing a corrupt PDF with Response
【讨论】:
非常感谢!我明白了!以上是关于vb.net 导出PDF的主要内容,如果未能解决你的问题,请参考以下文章
如何在 VB.NET 中将 DataGridView 导出为 Excel 格式