Microsoft Windows 10 est livré avec une imprimante Microsoft Print To PDF) qui peut imprimer quelque chose dans un fichier PDF. Elle invite à télécharger le nom du fichier.
Comment puis-je contrôler cela par programme depuis C # afin de ne pas demander le nom de fichier PDF mais enregistrer sous un nom de fichier spécifique dans un dossier que je fournis?)?
Il s’agit du traitement par lots de l’impression d’un grand nombre de documents ou d’autres types de fichiers sur un PDF par programmation.
Pour imprimer un objet PrintDocument
à l'aide de l'imprimante Microsoft Print to PDF sans demander de nom de fichier, voici la méthode de code pure qui permet cela:
// generate a file name as the current date/time in unix timestamp format
string file = (string)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds.ToString();
// the directory to store the output.
string directory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
// initialize PrintDocument object
PrintDocument doc = new PrintDocument() {
PrinterSettings = new PrinterSettings() {
// set the printer to 'Microsoft Print to PDF'
PrinterName = "Microsoft Print to PDF",
// tell the object this document will print to file
PrintToFile = true,
// set the filename to whatever you like (full path)
PrintFileName = Path.Combine(directory, file + ".pdf"),
}
};
doc.Print();
Vous pouvez également utiliser cette méthode pour d’autres imprimantes de type Enregistrer en tant que fichier telles que Imprimante Microsoft XPS
Vous pouvez imprimer sur l’imprimante Windows 10 PDF) en utilisant la méthode PrintOut
et en spécifiant le quatrième paramètre du nom du fichier de sortie, comme dans l’exemple suivant:
/// <summary>
/// Convert a file to PDF using office _Document object
/// </summary>
/// <param name="InputFile">Full path and filename with extension of the file you want to convert from</param>
/// <returns></returns>
public void PrintFile(string InputFile)
{
// convert input filename to new pdf name
object OutputFileName = Path.Combine(
Path.GetDirectoryName(InputFile),
Path.GetFileNameWithoutExtension(InputFile)+".pdf"
);
// Set an object so there is less typing for values not needed
object missing = System.Reflection.Missing.Value;
// `doc` is of type `_Document`
doc.PrintOut(
ref missing, // Background
ref missing, // Append
ref missing, // Range
OutputFileName, // OutputFileName
ref missing, // From
ref missing, // To
ref missing, // Item
ref missing, // Copies
ref missing, // Pages
ref missing, // PageType
ref missing, // PrintToFile
ref missing, // Collate
ref missing, // ActivePrinterMacGX
ref missing, // ManualDuplexPrint
ref missing, // PrintZoomColumn
ref missing, // PrintZoomRow
ref missing, // PrintZoomPaperWidth
ref missing, // PrintZoomPaperHeight
);
}
OutputFile
est une chaîne de chemin d'accès complet du document d'entrée que vous souhaitez convertir, et le document est un objet de document standard. Pour plus d'informations sur la doc, veuillez consulter les liens MSDN suivants pour _Document.PrintOut()
Dans l'exemple, PrintOut
donne lieu à une impression silencieuse lorsque vous imprimez via le inputFile
spécifié sur le OutputFileName
qui sera placé dans le même dossier que le document d'origine. il sera au format PDF avec l’extension .pdf
.