C#:将 iText7 PDF 保存到用户使用对话框选择的文件夹中
C#: Saving iText7 PDFs into a folder chosen by the user with a dialog
我会用 Windows 表单在 C# 中制作一个简单的程序,通过一些文本框获取用户提供的一些数据,当他按下按钮时,dialog
(我不'不知道显示的是哪一个),以便浏览 pc 文件夹并选择将其保存在那里的目标。
好吧,我使用了 FolderBrowserDialog
(我不知道这是否适合这个目的),但是有一个问题:为了用 itext7 存储 PDF,我必须给出一个Environment.SpecialFolder
变量,而方法selectedPath()
获取formBrowserDialog的用户路径returns一个字符串。
我试图以某种方式将 string
转换为 Environment.SpecialFolder
,但我总是得到 System.ArgumentException
这是我的代码:
string name = txtName.Text;
//
//bla bla bla getting the parameters given by the user
//...
string pdfName = surname+ " - " + hours + "ː" + minutes + ".pdf";
string folder="";
//"fbd" is the FolderBrowserDialog
if (fbd.ShowDialog() == DialogResult.OK)
{
//here I get the folder path (I hope I've chosen the right dialog for this scope, which is a FolderBrowserDialog)
folder = fbd.SelectedPath;
//starting my pdf generation
//here is my attempt to write something in order to parse the path string into an Environment.SpecialFolder type, to use it as a parameter in getFolderPath()
Environment.SpecialFolder path = (Environment.SpecialFolder)Enum.Parse(typeof(Environment.SpecialFolder), folder);
//here it's supposed to give to the GetFolderPath method the Environment.SpecialFolder type.
var exportFolder = Environment.GetFolderPath(path); //ON THIS LINE I GET THE EXCEPTION
var exportFile = System.IO.Path.Combine(exportFolder, pdfName);
using (var writer = new PdfWriter(exportFile))
{
using (var pdf = new PdfDocument(writer))
{
var doc = new Document(pdf);
doc.Add(new Paragraph("
//bla bla bla writing my things on it
"));
}
}
//pdf creation ends
}
为了简化这一切,您根本不需要 Environment.SpecialFolder
变量,也不需要将其作为参数传递。
抛出异常的原因是因为你试图将一个string
解析成一个Environment.SpecialFolder
变量enum
,当字符串无法解析成一个时
您可以查看 here 以查看包含的枚举列表。我敢打赌,您选择的特定路径与其中的 none 匹配。
这是您的代码当前正在执行的操作:
- 选择路径
- 正在尝试解析该路径以获得
enum
特殊文件夹
- 正在尝试获取与之关联的字符串
Environment.SpecialFolder
变量(所以如果你真的
能够解析它,你最终会得到你开始的东西
与)
- 将该字符串与您要赋予 PDF 的名称相结合。
您可以通过省略导致错误的步骤 2 和 3 来简化所有这些操作。
string pdfName = surname+ " - " + hours + "ː" + minutes + ".pdf";
//You select the folder here
if (fbd.ShowDialog() == DialogResult.OK)
{
string folder = fbd.SelectedPath;
//combine the path of the folder with the pdf name
string exportFile = System.IO.Path.Combine(folder, pdfName);
using (var writer = new PdfWriter(exportFile))
{
using (var pdf = new PdfDocument(writer))
{
var doc = new Document(pdf);
doc.Add(new Paragraph("//bla bla bla writing my things on it"));
}
}
//Pdf creation ends
}
我会用 Windows 表单在 C# 中制作一个简单的程序,通过一些文本框获取用户提供的一些数据,当他按下按钮时,dialog
(我不'不知道显示的是哪一个),以便浏览 pc 文件夹并选择将其保存在那里的目标。
好吧,我使用了 FolderBrowserDialog
(我不知道这是否适合这个目的),但是有一个问题:为了用 itext7 存储 PDF,我必须给出一个Environment.SpecialFolder
变量,而方法selectedPath()
获取formBrowserDialog的用户路径returns一个字符串。
我试图以某种方式将 string
转换为 Environment.SpecialFolder
,但我总是得到 System.ArgumentException
这是我的代码:
string name = txtName.Text;
//
//bla bla bla getting the parameters given by the user
//...
string pdfName = surname+ " - " + hours + "ː" + minutes + ".pdf";
string folder="";
//"fbd" is the FolderBrowserDialog
if (fbd.ShowDialog() == DialogResult.OK)
{
//here I get the folder path (I hope I've chosen the right dialog for this scope, which is a FolderBrowserDialog)
folder = fbd.SelectedPath;
//starting my pdf generation
//here is my attempt to write something in order to parse the path string into an Environment.SpecialFolder type, to use it as a parameter in getFolderPath()
Environment.SpecialFolder path = (Environment.SpecialFolder)Enum.Parse(typeof(Environment.SpecialFolder), folder);
//here it's supposed to give to the GetFolderPath method the Environment.SpecialFolder type.
var exportFolder = Environment.GetFolderPath(path); //ON THIS LINE I GET THE EXCEPTION
var exportFile = System.IO.Path.Combine(exportFolder, pdfName);
using (var writer = new PdfWriter(exportFile))
{
using (var pdf = new PdfDocument(writer))
{
var doc = new Document(pdf);
doc.Add(new Paragraph("
//bla bla bla writing my things on it
"));
}
}
//pdf creation ends
}
为了简化这一切,您根本不需要 Environment.SpecialFolder
变量,也不需要将其作为参数传递。
抛出异常的原因是因为你试图将一个string
解析成一个Environment.SpecialFolder
变量enum
,当字符串无法解析成一个时
您可以查看 here 以查看包含的枚举列表。我敢打赌,您选择的特定路径与其中的 none 匹配。
这是您的代码当前正在执行的操作:
- 选择路径
- 正在尝试解析该路径以获得
enum
特殊文件夹 - 正在尝试获取与之关联的字符串
Environment.SpecialFolder
变量(所以如果你真的 能够解析它,你最终会得到你开始的东西 与) - 将该字符串与您要赋予 PDF 的名称相结合。
您可以通过省略导致错误的步骤 2 和 3 来简化所有这些操作。
string pdfName = surname+ " - " + hours + "ː" + minutes + ".pdf";
//You select the folder here
if (fbd.ShowDialog() == DialogResult.OK)
{
string folder = fbd.SelectedPath;
//combine the path of the folder with the pdf name
string exportFile = System.IO.Path.Combine(folder, pdfName);
using (var writer = new PdfWriter(exportFile))
{
using (var pdf = new PdfDocument(writer))
{
var doc = new Document(pdf);
doc.Add(new Paragraph("//bla bla bla writing my things on it"));
}
}
//Pdf creation ends
}