2015-11-29 20 views
6

Ho un programma C# .net che crea vari documenti. Questi documenti devono essere archiviati in posizioni diverse e con nomi diversi e chiaramente definiti.Imposta nome file e percorso al livello di programmazione in Microsoft Print to PDF printer

Per fare ciò, utilizzo la classe System.Drawing.Printing.PrintDocument. Seleziono la stampante Microsoft Print to PDF come stampante con questa istruzione:

PrintDocument.PrinterSettings.PrinterName = "Microsoft Print to PDF";

Durante questa operazione sono in grado di stampare il documento in un pdf file. L'utente ottiene una finestra di selezione file. Può quindi specificare in questa finestra di dialogo il nome del file pdf e dove memorizzarlo.

Poiché la quantità di file è ampia ed è fastidiosa e soggetta a errori nel trovare sempre il percorso e il nome corretti, vorrei impostare il percorso e il nome file corretti in questa finestra di dialogo a livello di programmazione.

Ho già provato questi attributi:

PrintDocument.PrinterSettings.PrintFileName PrintDocument.DocumentName

Scrivendo il percorso richiesto e il nome a questi attributi non ha aiutato. Qualcuno sa, come impostare i valori predefiniti per il percorso e il nome file per la stampante Microsoft Print to PDF in C#?

Nota: Il mio ambiente: di Windows 10, Visual Studio 2010, .NET framework 4.5

risposta

0

Sembra che il PrintFilename viene ignorato se la proprietà è PrintToFilenon insieme a true. Se PrintToFile è impostato su true e viene fornito un nome file valido (percorso completo), il file con filedialog in cui l'utente seleziona il nome file non verrà visualizzato.

Suggerimento: quando si imposta il printername delle impostazioni della stampante, è possibile controllare la proprietà IsValid per verificare che questa stampante esista effettivamente. Per maggiori informazioni su PrinterSettings e trovare le stampanti installate check this post

0

Ho fatto qualche sperimentare me stesso, ma come lei non era in grado di precompilare la finestra di dialogo Salva con nome nel PrintDialog con la DocumentName o PrinterSettings.PrintFileName già compilato l'istanza PrintDocument. Questo sembra poco intuitivo, quindi forse mi manca qualcosa

Se lo si desidera, è comunque possibile ignorare il printdialog e stampare automaticamente senza alcuna interazione dell'utente. Se si sceglie di farlo, è necessario assicurarsi in anticipo che la directory a cui si desidera aggiungere un documento sia esistente e che il documento da aggiungere non esista.

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

Come già sottolineato in altre risposte, è possibile forzare PrinterSettings.PrintToFile = true, e impostare il PrinterSettings.PrintFileName, ma poi l'utente non ottiene il salvataggio come comparsa. La mia soluzione è di andare avanti e mostrare me stesso la finestra di dialogo Salva con nome, popolandolo con il mio nome file "suggerito" [nel mio caso, un file di testo (.txt) che modificherò in .pdf], quindi impostare PrintFileName sul risultato.

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(); 
    } 
} 
Problemi correlati