以编程方式在Microsoft Print to PDF打印机中设置文件名和路径

时间:2015-11-29 17:19:26

标签: c# .net windows pdf printing

我有一个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

3 个答案:

答案 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();
 }