Programmatisch afdrukken naar PDF-bestand zonder te vragen om de bestandsnaam in C# met behulp van de Microsoft Print To PDF-printer die wordt geleverd met Windows 10

Microsoft Windows 10 wordt geleverd met een Microsoft Print To PDF-printer die iets naar een PDF-bestand kan afdrukken. Het vraagt ​​om de bestandsnaam om te downloaden.

Hoe kan ik dit programmatisch regelen vanuit C#, zodat ik niet om de PDF-bestandsnaam vraag, maar naar een specifieke bestandsnaam in een map die ik opgeef?

Dit is voor batchverwerking van het programmatisch afdrukken van een groot aantal documenten of andere soorten bestanden naar een PDF.


Antwoord 1, autoriteit 100%

Als u een PrintDocument-object wilt afdrukken met de Microsoft Print to PDF-printer zonder te vragen om een ​​bestandsnaam, volgt hier de pure codemanier om dit te doen:

// generate a file name as the current date/time in unix timestamp format
string file = (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();

U kunt deze methode ook gebruiken voor andere printers van het type Opslaan als bestand, zoals Microsoft XPS-printer


Antwoord 2

U kunt afdrukken naar de Windows 10 PDF-printer door de methode PrintOutte gebruiken en de vierde parameter voor de naam van het uitvoerbestand op te geven, zoals in het volgende voorbeeld:

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

Het OutputFileis een volledige padtekenreeks van het invoerdocument dat u wilt converteren, en het document is een gewoon documentobject. Voor meer informatie over het document, zie de volgende MSDN-links voor _Document.PrintOut()

De PrintOutin het voorbeeld resulteert in een stille afdruk, wanneer u afdrukt via het opgegeven inputFilenaar de OutputFileName, die in dezelfde map als het originele document, maar in PDF-formaat met de extensie .pdf.

Other episodes