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

C# 将iTextSharp.text.Document创建处的方向设置传播到“打印”对话框,c#,.net,itextsharp,httphandler,C#,.net,Itextsharp,Httphandler,我使用iTextSharp创建横向的PDF文档,方法是使用PageSize.A4.Rotate()设置其页面大小。文档被送入一个流,然后作为字节数组(在VARBINARY字段中)保存到数据库中 我遇到的问题是,当通过浏览器检索并打开它(或保存到磁盘)时,打印时,打印对话框以默认的纵向方向打开 由于向所有用户传达他们应该首先进入页面设置并将方向设置为横向并不是最容易的事情,如何将文档创建时使用的方向设置一直传播到打印对话框?使用以下方法: var rect = new Rectangle(0, 0

我使用iTextSharp创建横向的PDF文档,方法是使用PageSize.A4.Rotate()设置其页面大小。文档被送入一个,然后作为字节数组(在VARBINARY字段中)保存到数据库中

我遇到的问题是,当通过浏览器检索并打开它(或保存到磁盘)时,打印时,打印对话框以默认的纵向方向打开

由于向所有用户传达他们应该首先进入页面设置并将方向设置为横向并不是最容易的事情,如何将文档创建时使用的方向设置一直传播到打印对话框?

使用以下方法:

var rect = new Rectangle(0, 0, PageSize.A4.Height, PageSize.A4.Width, 0);
var document = new Document(rect, 0, 0, 0, 0);
使用以下命令:

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

您可以尝试将
PdfWriter
属性的
picktraybydfsize
属性设置为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();
                }
            }
        }

您可以尝试将
PdfWriter
属性的
picktraybydfsize
属性设置为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();
                }
            }
        }

我不确定您的iTextSharp版本,但我不认为
iTextSharp.text.Rectangle
有一个接受5个参数的构造函数。无论如何,即使在删除了PageSize.A4.Width之后的第五个参数(0)后,它仍然不起作用。我使用的是来自的最后一个版本。我不确定您的iTextSharp版本,但我认为
iTextSharp.text.Rectangle
没有一个包含5个参数的构造函数。无论如何,即使删除了
PageSize.A4.Width
之后的第五个参数(0),它也不起作用。我使用的是.Adobe Reader X的最后一个版本,它似乎理解这个属性。伟大的干预!谢谢。在我接受答案之前,我想在创建的文档中确定一些不一致的行为。即使没有您建议的属性,“打印”对话框有时也会自动选择横向方向。大多数情况下不会:)一分钟“复制”失败并显示错误消息,而另一分钟工作正常。为了正确理解一切,我决定逐步引入不同的功能。从
短语
s、
段落
s、
PdfPTable
s、
Image
s等开始-我只想说明可能导致此问题和其他问题的所有原因。Adobe Reader X似乎理解此属性。伟大的干预!谢谢。在我接受答案之前,我想在创建的文档中确定一些不一致的行为。即使没有您建议的属性,“打印”对话框有时也会自动选择横向方向。大多数情况下不会:)一分钟“复制”失败并显示错误消息,而另一分钟工作正常。为了正确理解一切,我决定逐步引入不同的功能。从
短语
s、
段落
s、
PdfPTable
s、
Image
s等开始,我将介绍所有可能导致此问题和其他问题的原因。