我使用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);
我遇到的问题是,当它通过浏览器检索并打开(或保存到磁盘)时,打印时,“打印”对话框将以默认的纵向方向打开。
由于与所有用户进行通信并不是最简单的事情,他们应首先进入页面设置并将方向设置为横向,如何将文档创建时使用的方向设置一直传播到“打印”对话框?
答案 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);