Cómo imprimir mediante progtwigción en un archivo PDF sin solicitar el nombre del archivo en C # utilizando la impresora Microsoft Print To PDF que viene con Windows 10

Microsoft Windows 10 viene con una impresora Microsoft Print To PDF que puede imprimir algo en un archivo PDF. Solicita que se descargue el nombre de archivo.

¿Cómo puedo controlar esto programáticamente desde C # para no solicitar el nombre del archivo PDF, pero guardarlo en un nombre de archivo específico en alguna carpeta que proporcione?

Esto es para el procesamiento por lotes de la impresión de muchos documentos u otros tipos de archivos a un PDF mediante progtwigción.

Para imprimir un objeto PrintDocument utilizando la impresora Microsoft Print to PDF sin preguntar por un nombre de archivo, esta es la forma de código puro para hacer esto:

 // 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(); 

También puede usar este método para otros métodos de Guardar como tipo de archivo , como la Impresora XPS de Microsoft.

Puede imprimir en la impresora PDF de Windows 10, utilizando el método PrintOut y especificando el cuarto parámetro de nombre de archivo de salida, como en el siguiente ejemplo:

 ///  /// Convert a file to PDF using office _Document object ///  /// Full path and filename with extension of the file you want to convert from ///  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 es una cadena de ruta de acceso completa del documento de entrada que desea convertir, y el documento es un objeto de documento normal. Para obtener más información sobre el documento, consulte los siguientes enlaces de MSDN para _Document.PrintOut()

  • Office 2003
  • Office 2013 y posterior

PrintOut en el ejemplo da como resultado una impresión silenciosa, cuando imprime a través del inputFile de inputFile especificado a OutputFileName , que se colocará en la misma carpeta que el documento original, pero estará en formato PDF con la extensión .pdf .