我有一个C# .net
程序,可以创建各种文档。这些文件应存放在不同的位置,并使用不同的,明确定义的名称。
为此,我使用System.Drawing.Printing.PrintDocument
类。
我使用以下语句选择Microsoft Print to PDF
作为打印机:
PrintDocument.PrinterSettings.PrinterName = "Microsoft Print to PDF"
;
这样做我可以在pdf file
打印我的文档。用户获得文件选择对话框。然后,他可以在此对话框中指定pdf文件的名称以及存储位置。
由于文件数量很大且很容易找到正确的路径和名称,我想在此对话框中以编程方式设置正确的路径和文件名。
我已经测试了这些属性:
PrintDocument.PrinterSettings.PrintFileName
PrintDocument.DocumentName
将所需的路径和文件名写入这些属性没有帮助。
有谁知道,如何在C#中为Microsoft Print to PDF
打印机设置路径和文件名的默认值?
注意:我的环境: Windows 10, Visual Studio 2010, .net framework 4.5
答案 0 :(得分:2)
如其他答案中所述,您可以强制PrinterSettings.PrintToFile = true
,并设置PrinterSettings.PrintFileName
,但是您的用户不会将保存设置为弹出窗口。我的解决方案是继续自己显示“另存为”对话框,用我的"建议"填充它。 filename [在我的例子中,我改为.pdf的文本文件(.txt)],然后将PrintFileName
设置为结果。
DialogResult userResp = printDialog.ShowDialog();
if (userResp == DialogResult.OK)
{
if (printDialog.PrinterSettings.PrinterName == "Microsoft Print to PDF")
{ // force a reasonable filename
string basename = Path.GetFileNameWithoutExtension(myFileName);
string directory = Path.GetDirectoryName(myFileName);
prtDoc.PrinterSettings.PrintToFile = true;
// confirm the user wants to use that name
SaveFileDialog pdfSaveDialog = new SaveFileDialog();
pdfSaveDialog.InitialDirectory = directory;
pdfSaveDialog.FileName = basename + ".pdf";
pdfSaveDialog.Filter = "PDF File|*.pdf";
userResp = pdfSaveDialog.ShowDialog();
if (userResp != DialogResult.Cancel)
prtDoc.PrinterSettings.PrintFileName = pdfSaveDialog.FileName;
}
if (userResp != DialogResult.Cancel) // in case they canceled the save as dialog
{
prtDoc.Print();
}
}
答案 1 :(得分:0)
如果PrintFilename
属性不设置为PrintToFile
,则true
似乎会被忽略。如果PrintToFile
设置为true
并且提供了有效的文件名(完整路径),则不会显示用户选择文件名的文件管理域。
提示:设置打印机设置的printername时,您可以检查IsValid
属性以检查此打印机是否确实存在。有关打印机设置和查找已安装打印机的更多信息check this post
答案 2 :(得分:0)
我自己做了一些实验,但是像自己一样,也无法在PrintDialog中预先填充SaveAs对话框,并且PrintDocument实例中已经填充了DocumentName或PrinterSettings.PrintFileName。这似乎违反直觉,所以也许我错过了一些东西
如果您愿意,您可以绕过printdialog并自动打印,而无需任何用户交互。如果选择这样做,则必须事先确保要添加文档的目录存在,并且要添加的文档不存在。
string existingPathName = @"C:\Users\UserName\Documents";
string notExistingFileName = @"C:\Users\UserName\Documents\TestPrinting1.pdf";
if (Directory.Exists(existingPathName) && !File.Exists(notExistingFileName))
{
PrintDocument pdoc = new PrintDocument();
pdoc.PrinterSettings.PrinterName = "Microsoft Print to PDF";
pdoc.PrinterSettings.PrintFileName = notExistingFileName;
pdoc.PrinterSettings.PrintToFile = true;
pdoc.PrintPage += pdoc_PrintPage;
pdoc.Print();
}