Распространите настройку ориентации при создании iTextSharp.text.Document в диалог Print. - PullRequest
1 голос
/ 11 ноября 2011

Я использую iTextSharp для создания PDF-документа в альбомной ориентации, используя PageSize.A4.Rotate () , чтобы установить его PageSize. Документ подается в Stream , а затем сохраняется в базе данных в виде байтового массива (в поле VARBINARY).

Stream stream = new MemoryStream(); 
iTextSharp document = new Document();
document.SetPageSize(PageSize.A4.Rotate());

var writer = PdfWriter.GetInstance(document, stream)
document.Open()

// Write to the document

document.Close();
byte[] file = stream.ToArray();

/* In the actual environment the byte array is stored in the database, to be retrievable later */   

// WHERE context: HttpContext in a class that implements IHttpHandler
context.Response.AppendHeader("Content-Disposition", "attachment;filename=Test.pdf");
context.Response.AppendHeader("Content-Length", file.Length.ToString());
context.Response.ContentType = MediaTypeNames.Application.Pdf;

context.Response.BinaryWrite(file);

Проблема, с которой я сталкиваюсь, заключается в том, что при ее извлечении и открытии через браузер (или при сохранении на диск) при печати открывается диалоговое окно «Печать» в книжной ориентации по умолчанию.

Поскольку не все так просто сообщить всем пользователям, что им следует сначала перейти к настройке страницы и установить ориентацию на Пейзаж, насколько возможно распространить настройку ориентации, использованную при создании документа, до диалогового окна «Печать»?

Ответы [ 2 ]

3 голосов
/ 11 ноября 2011

Вы можете попробовать установить для свойства PICKTRAYBYPDFSIZE вашего свойства PdfWriter значение true. Более новые версии Adobe Acrobat / Reader обнаружат это и автоматически установят флажок «Выбор источника бумаги по размеру страницы PDF» в диалоговом окне печати. К сожалению, это одна из тех «подсказок», которую реализуют не все программы чтения PDF.

        string outputFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Landscape.pdf");

        using (FileStream fs = new FileStream(outputFile, FileMode.Create, FileAccess.Write, FileShare.None))
        {
            using (Document doc = new Document(PageSize.LETTER.Rotate()))
            {
                using (PdfWriter writer = PdfWriter.GetInstance(doc, fs))
                {
                    writer.AddViewerPreference(PdfName.PICKTRAYBYPDFSIZE, PdfBoolean.PDFTRUE);
                    doc.Open();

                    doc.Add(new Paragraph("test"));

                    doc.Close();
                }
            }
        }
1 голос
/ 11 ноября 2011

Используйте это:

var rect = new Rectangle(0, 0, PageSize.A4.Height, PageSize.A4.Width, 0);
var document = new Document(rect, 0, 0, 0, 0);
...