web-dev-qa-db-fra.com

Comment imprimer par programme dans un fichier PDF sans demander de nom de fichier en C # à l'aide de l'imprimante Microsoft Imprimer vers PDF fournie avec Windows 10

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.

41
pdfman

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

38
Kraang Prime

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.

2
Jancsik Zsolt