问题描述
我有一个创建 PDF 的 vb.net Windows 应用程序。创建后,我想提示用户他们想要保存文件的位置。默认保存文件夹与创建的 PDF 的文件夹不同。我让 SaveDialog 框提供我想要的默认文件夹和文件名。如果我选择“保存”,我会收到一条消息,提示该文件不存在,并且 ShowDialog 下方的代码均未执行(我确定我在这部分也做错了)。
Dim saveFileDialog1 As New SaveFileDialog
saveFileDialog1.InitialDirectory = MyDocsFolder
saveFileDialog1.FileName = "Report.pdf"
saveFileDialog1.Title = "Save Report"
saveFileDialog1.CheckFileExists = True
saveFileDialog1.CheckPathExists = True
saveFileDialog1.DefaultExt = "pdf"
saveFileDialog1.Filter = "All files (*.*)|*.*|All files (*.*)|*.*"
saveFileDialog1.FilterIndex = 2
saveFileDialog1.RestoreDirectory = True
saveFileDialog1.ShowDialog()
If saveFileDialog1.ShowDialog = DialogResult.OK Then
If saveFileDialog1.FileName() <> "" Then
Dim newStream As FileStream = File.Open(newFile,FileMode.Open)
Dim pdfStream As New FileStream(saveFileDialog1.FileName,FileMode.Create)
newStream.copyTo(fs,FileMode.Append)
newStream.Close()
fs.Close()
End If
End If
解决方法
你可以这样做:
Imports Microsoft.WindowsAPICodePack.Dialogs
Public NotInheritable Class Form1
Private Sub ButtonSave_Click(sender As Object,e As EventArgs) Handles ButtonSave.Click
Dim Path As String
Using SFD1 As New CommonSaveFileDialog
SFD1.Title = "Where should the file be saved?"
SFD1.Filters.Add(New CommonFileDialogFilter("PDF",".pdf"))
SFD1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
If SFD1.ShowDialog() = CommonFileDialogResult.Ok Then
Path = SFD1.FileName
Else
Return
End If
End Using
Dim dest As IO.FileInfo
Using fs As IO.FileStream = IO.File.Create(Path & ".pdf")
dest = My.Computer.FileSystem.GetFileInfo(fs.Name)
End Using
End Sub
End Class
请注意,我使用的是从 Visual Studios 自己的 Nuget 包管理器下载的 FileDialog。见图片。您不必这样做,但我更喜欢这个 FileDialog,因为它提供的选项比已包含的选项更多。
于是用户输入文件名;因此路径结果。在我的代码示例中,这会创建一个空白的 PDF。还不能像这样打开。 为了将某些内容写在 PDF 中,您可以下载 itext7(也可以通过 NuGet)。
然后,你写Imports iText.Kernel.Pdf
,
Imports iText.Kernel.Utils
并在您的子 Dim pdfwriter As New PdfWriter(dest)
中使用上面的“dest”。
我又瞎又蠢...
saveFileDialog1.CheckFileExists = True
抱歉浪费了大家的时间。