IRONSOFTWAREHOME

Karışık Yönelimli PDF Her Sayfayı Yatay Olarak Yazdırır

Curtis Chau
Curtis Chau
Updated: 3 Temmuz 2026

IronPrint 2026.1.5, portre ve manzara sayfalarını karıştıran bir PDF yazdırırken sayfa bazında yönelimi korumaz. Her sayfa, orijinal yöneliminden bağımsız olarak yazıcıya yatay olarak ulaşır.

Bu durum, Windows 10 ve Windows Server 2022 üzerinde .NET 8 altında 2026.1.5 etkiler. Bu sürüm için düzeltilmiş bir yapı mevcut değildir.

Motor, her sayfanın boyutlarını okumak yerine, tüm belgeye tek bir yönelim uygular. Dosyayı aynı yönelimli sayfalarla bölmek ve her bölmeyi ayrı ayrı yazdırmak doğru çıktıyı geri kazandırır.

Çözüm

Önerilen: PDF'yi tek bir iş yerine yönelim tutarlı gruplar halinde yazdırın.

1. Her sayfanın yönelimini tespit edin

PDF'yi açın ve her sayfanın genişliğini yüksekliğiyle karşılaştırın. Genişliği yüksekliğinden fazla olan sayfa yataydır; diğer her şey portredir.

2. Art arda gelen aynı yönelimli sayfaları gruplandırın

Sayfaları sırayla yürütün ve yönelim her değiştiğinde yeni bir parti başlatın. Her parti, tek bir yönelime sahip bitişik bir sayfa aralığı olarak sonuçlanır.

3. Her partiyi kendi işi olarak yazdırın

Her aralığı ayrı ayrı göndermek, yazıcının o aralığın yönelimini uygulamasına izin verir, belgenin tamamını yataya zorlamaktansa.

4. Birden fazla kopyayı manuel olarak yönetin

Çünkü belge şimdi birkaç iş arasında bölünmüştür, her kopya için bir kere döngü yapın ve her defasında tam parti sırasını yazdırın. Bu, her kopya içinde sayfa sırasını sağlam tutar.

Tam uygulama:

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, bitişik bir çalışma başına bir PageOrientationBatch üretir ve Printer.PrintAsync, her aralığı kendi PaperOrientation ile çalıştırır. İşler arasındaki Task.Delay(500), sırayla sıraya koymaları için bekleme düzenleyicisine yardımcı olur.

Uyarı: Her yönelim aralığı ayrı bir yazdırma işi olarak gönderilir. Fiziksel bir yazıcıda, işler art arda sıraya girer, ancak Microsoft Print to PDF veya benzeri bir sanal yazıcı ile her parti kendi çıktı dosyasını isteyebilir.
Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapılandırılmış, görsel olarak çekici kılavuzlar oluşturmayı seviyor.

...
Daha Fazla Oku

Başlamaya Hazır mısınız?

Nuget Downloads 46,090Sürüm:2026.9yeni yayınlandı

Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez
PDF için C# NuGet Kütüphanesi
NuGet ile yükleyin

Sürüm: 2026.9

PM > Install-Package IronPrint
nuget.org/packages/IronPrint/
  1. Çözüm Gezgini'nde Referanslar'a sağ tıklayın, NuGet Paketlerini Yönet
  2. Gözat'ı seçin ve "IronPrint" arayın
  3. Paketi seçin ve yükleyin
C# PDF DLL
DLL İndir

Sürüm: 2026.9

  1. IronPrint'i indirin ve Çözüm dizininizdeki ~/Libs gibi bir konuma çıkarın
  2. Visual Studio Çözüm Gezgini'nde Referanslar'a sağ tıklayın. Gözat'ı seçin, "IronPrint.dll"

$999 'dan lisanslar

Key in blue circle

Ücretsiz 30 günlük Deneme Anahtarınızı anında edinin.

Your trial license will be sent to your email address

Herhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.

bullet_checkedKredi kartı veya hesap oluşturma gerektirmezHerhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Ücretsiz Canlı Demo rezervasyonu yapın
Booking Badge

Dünya Çapında Milyonlarca Mühendisin Güvendiği

Iron Software müşteri logoları
Bağımsız Danışmanlık Alın
Aşağıdaki formu doldurun veya sales@ironsoftware.com adresine e-posta gönderin
Bilgileriniz daima gizli kalacaktır.
Dünya Çapında Milyonlarca Mühendisin Güvendiği
Iron Software müşteri logoları
Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez