IRONSOFTWAREHOME

Gemischte Ausrichtungs-PDF druckt jede Seite als Querformat

Curtis Chau
Curtis Chau
Updated: 3. Juli 2026

IronPrint 2026.1.5 bewahrt nicht die Ausrichtung pro Seite, wenn ein PDF gedruckt wird, das Hoch- und Querformatseiten mischt. Jede Seite kommt im Querformat auf dem Drucker an, unabhängig von ihrer ursprünglichen Ausrichtung.

Dies betrifft 2026.1.5 unter Windows 10 und Windows Server 2022 mit .NET 8. Eine korrigierte Version für diese Version existiert nicht.

Die Engine wendet eine einzige Ausrichtung auf das gesamte Dokument an, anstatt die Abmessungen jeder Seite zu lesen. Das Aufteilen der Datei in Läufe identischer Ausrichtungsseiten und das separate Drucken jedes Laufs stellt die korrekte Ausgabe wieder her.

Lösung

Empfohlen: Drucken Sie das PDF in ausrichtungskonsistenten Stapeln statt als einen einzigen Auftrag.

1. Erkennen Sie die Ausrichtung jeder Seite

Öffnen Sie das PDF und vergleichen Sie die Breite jeder Seite mit ihrer Höhe. Eine Seite, die breiter als hoch ist, ist Querformat; alles andere ist Hochformat.

2. Gruppieren Sie aufeinanderfolgende Seiten mit derselben Ausrichtung

Gehen Sie die Seiten der Reihe nach durch und beginnen Sie einen neuen Stapel, wann immer sich die Ausrichtung ändert. Jeder Stapel endet als ein zusammenhängender Seitenbereich mit einer Ausrichtung.

3. Drucken Sie jeden Stapel als eigenen Auftrag

Indem Sie jeden Bereich separat senden, kann der Drucker die Ausrichtung des Bereichs anwenden, anstatt das gesamte Dokument ins Querformat zu zwingen.

4. Behandeln Sie mehrere Kopien manuell

Da das Dokument jetzt auf mehrere Aufträge aufgeteilt ist, durchlaufen Sie es einmal pro Kopie und drucken Sie die gesamte Stapelsequenz jedes Mal. Dadurch bleibt die Seitenreihenfolge innerhalb jeder Kopie intakt.

Vollständige Implementierung:

using IronPrint;
using IronPdf;
await PrintDocumentByOrientationBatchesAsync(
    documentPath: documentPath,
    printerName: printerName,
    numberOfCopies: effectiveCopies);
async Task PrintDocumentByOrientationBatchesAsync(
    string documentPath,
    string printerName,
    int numberOfCopies)
{
    var tempFolder = Path.Combine(
        Path.GetTempPath(),
        "ironprint-orientation-workaround",
        Guid.NewGuid().ToString("N"));
    Directory.CreateDirectory(tempFolder);
    try
    {
        using var pdf = PdfDocument.FromFile(documentPath);
        var batches = GetConsecutiveOrientationBatches(pdf);
        // Since the document is printed in multiple jobs, copies are handled manually
        // to preserve the full document order per copy.
        for (var copy = 1; copy <= numberOfCopies; copy++)
        {
            foreach (var batch in batches)
            {
                var batchPath = Path.Combine(
                    tempFolder,
                    $"copy_{copy}_pages_{batch.StartPageNumber}_{batch.EndPageNumber}_{batch.Orientation}.pdf");
                using var batchPdf = pdf.CopyPages(batch.StartIndex, batch.EndIndex);
                batchPdf.SaveAs(batchPath);
                var printSettings = new PrintSettings
                {
                    PrinterName = printerName,
                    NumberOfCopies = 1,
                    PaperOrientation = batch.Orientation == DetectedPageOrientation.Landscape
                        ? PaperOrientation.Landscape
                        : PaperOrientation.Portrait,
                    PaperSize = PaperSize.PrinterDefault
                };
                await Printer.PrintAsync(batchPath, printSettings);
                // Optional delay to help ensure print jobs are queued in order.
                await Task.Delay(500);
            }
        }
    }
    finally
    {
        try
        {
            Directory.Delete(tempFolder, recursive: true);
        }
        catch
        {
            // Ignore cleanup errors in case the print spooler is still accessing the files.
        }
    }
}
List<PageOrientationBatch> GetConsecutiveOrientationBatches(PdfDocument pdf)
{
    var batches = new List<PageOrientationBatch>();
    if (pdf.PageCount == 0)
    {
        return batches;
    }
    var currentOrientation = GetPageOrientation(pdf.Pages[0].Width, pdf.Pages[0].Height);
    var batchStartIndex = 0;
    for (var pageIndex = 1; pageIndex < pdf.PageCount; pageIndex++)
    {
        var page = pdf.Pages[pageIndex];
        var pageOrientation = GetPageOrientation(page.Width, page.Height);
        if (pageOrientation != currentOrientation)
        {
            batches.Add(new PageOrientationBatch(
                StartIndex: batchStartIndex,
                EndIndex: pageIndex - 1,
                Orientation: currentOrientation));
            batchStartIndex = pageIndex;
            currentOrientation = pageOrientation;
        }
    }
    batches.Add(new PageOrientationBatch(
        StartIndex: batchStartIndex,
        EndIndex: pdf.PageCount - 1,
        Orientation: currentOrientation));
    return batches;
}
DetectedPageOrientation GetPageOrientation(double width, double height)
{
    return width > height
        ? DetectedPageOrientation.Landscape
        : DetectedPageOrientation.Portrait;
}
record PageOrientationBatch(
    int StartIndex,
    int EndIndex,
    DetectedPageOrientation Orientation)
{
    public int StartPageNumber => StartIndex + 1;
    public int EndPageNumber => EndIndex + 1;
}
enum DetectedPageOrientation
{
    Portrait,
    Landscape
}
C#

GetConsecutiveOrientationBatches erzeugt ein PageOrientationBatch pro zusammenhängendem Lauf, und Printer.PrintAsync führt jeden Bereich mit seinem eigenen PaperOrientation aus. Das Task.Delay(500) zwischen den Aufträgen hilft der Spooler, sie in der richtigen Reihenfolge zu positionieren.

Warnung: Jeder Ausrichtungsbereich wird als separater Druckauftrag gesendet. Bei einem physischen Drucker werden die Aufträge nacheinander in die Warteschlange gestellt, aber mit Microsoft Print to PDF oder einem ähnlichen virtuellen Drucker kann jeder Stapel nach seiner eigenen Ausgabedatei fragen.
Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender Handbücher.

...
Weiterlesen

Bereit anzufangen?

Nuget Downloads 46,090Version:2026.9gerade veröffentlicht

Erhalten Sie sofort Ihren kostenlosen 30-Tage-Testschlüssel.
Ihr Testlizenzschlüssel wurde Ihnen per E-Mail gesendet.
C# NuGet-Bibliothek für PDF
Installation mit NuGet

Version: 2026.9

PM > Install-Package IronPrint
nuget.org/packages/IronPrint/
  1. Rechtsklick auf Referenzen, NuGet-Pakete verwalten
  2. Wählen Sie Durchsuchen und suchen Sie nach "IronPrint"
  3. Paket auswählen und installieren
C# PDF DLL
Download DLL

Version: 2026.9

  1. Laden Sie IronPrint herunter und entpacken Sie es an einem Ort wie ~/Libs innerhalb Ihres Lösungsverzeichnisses
  2. Klicken Sie im Visual Studio Solution Explorer mit der rechten Maustaste auf Verweise. Wählen Sie Durchsuchen, "IronPrint.dll"

Lizenzen ab $999

Key in blue circle

Holen Sie sich sofort Ihren kostenlosen 30-Tage-Testschlüssel.

Your trial license will be sent to your email address

Keine Einschränkungen. 100 % freigeschaltet. Keine Kreditkarte.

bullet_checkedIhr Testlizenzschlüssel wurde Ihnen per E-Mail gesendet.Keine Einschränkungen. 100 % freigeschaltet. Keine Kreditkarte.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
AWS-Logo
Booking Badge

Von Millionen von Ingenieur*innen weltweit vertraut

Azure (WebApps, Funktionen v3)
Erhalten Sie Ihre unverbindliche Beratung
Füllen Sie das Formular unten aus oder senden Sie eine E-Mail an sales@ironsoftware.com
Ihre Daten werden immer vertraulich behandelt.
Von Millionen von Ingenieur*innen weltweit vertraut
Azure (WebApps, Funktionen v3)
Erhalten Sie sofort Ihren kostenlosen 30-Tage-Testschlüssel.
Ihr Testlizenzschlüssel wurde Ihnen per E-Mail gesendet.