Karışık Yönelimli PDF Her Sayfayı Yatay Olarak Yazdırır
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
}
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.

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.