2011-11-11 1 views
1

iTextSharp를 사용하여 PageSize를 설정하려면 PageSize.A4.Rotate()을 사용하여 가로 방향으로 PDF 문서를 만듭니다. 이 문서는 스트림으로 공급되고 나중에 데이터베이스에 VARBINARY 필드의 바이트 배열로 저장됩니다.iTextSharp.text.Document 생성시 방향 설정을 인쇄 대화 상자로 전파

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); 

내가으로 실행하는 문제는 검색과 열린 브라우저를 통해 (또는 디스크에 저장) 할 때 인쇄 할 때 인쇄 대화 상자가 기본 세로 방향에서 열립니다 것입니다.

페이지 설정으로 이동하여 가로 방향으로 설정해야하는 모든 사용자에게 가장 쉬운 방법이 아니기 때문에 문서 작성시 사용 된 방향 설정을 인쇄 대화 상자로 전달하는 것이 가능합니다 ?

답변

3

. 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(); 
       } 
      } 
     } 
+0

Adobe Reader X가이 속성을 이해하는 것 같습니다. 위대한 개입! 감사. –

+0

답변을 수락하기 전에 작성된 문서에서 일관성없는 동작을 잠 그려면 제안한 속성이 없어도 인쇄 대화 상자가 자동으로 가로 방향을 선택하는 것으로 보입니다. 대개의 경우 :) 1 분 "복사"오류 메시지와 함께 실패하고 1 분이 지나면 정상적으로 작동합니다. 모든 것을 제대로 이해하기 위해 점차적으로 다른 기능을 도입하기로 결정했습니다. 'Phrase','Paragraph','PdfPTable','Image's 등으로 시작해서이 문제를 일으킬 수있는 모든 근거를 다룹니다. –

1

사용이 : 당신은 참으로 당신의 PdfWriter 재산의 PICKTRAYBYPDFSIZE 속성을 설정하려고 할 수 있습니다

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

iTextSharp의 버전이 확실하지 않지만 'iTextSharp.text.Rectangle'에는 5 개의 매개 변수를 사용하는 생성자가 있다고 생각하지 않습니다. 어쨌든, PageSize.A4.Width' 다음에 다섯 번째 매개 변수 (0)를 제거한 후에도 작동하지 않습니다. –

+0

[itextpdf.com] (http://itextpdf.com/download.php)의 마지막 버전을 사용하고 있습니다.). – Alex