将iTextSharp.text.Document创建时的方向设置传播到“打印”对话框

时间:2011-11-11 07:16:38

标签: c# .net itextsharp httphandler

我使用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 个答案:

答案 0 :(得分:3)

您可以尝试将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 :(得分:1)

使用此:

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