2012-05-02 4 views
1

ストリームにpdfを生成する次のコードがあります。これはうまくいくが、私は今、以下の要件を持っている。ページ番号を追加し、itextでストリームに風景A4を作成する

1)make page landscape:他の例を見ると、プロパティをドキュメントオブジェクトに追加します。しかし、私はこのインストリームをやっています。だから私はこのプロパティをどのように追加しますか?

2)ページ番号を追加してください。ページあたりの行数がxになるようにアイテムをグリッドに配置する必要があります。ページのフッターにページ番号が表示されます。この種の機能は、どのようにしてItext sharpで習得できますか?

public static void Create(ICollection<Part> parts, string path) 
{ 
    PdfReader reader = new PdfReader(path); 

    var pageWidth = 500; 
    byte[] bytes; 
    using (MemoryStream ms = new MemoryStream()) 
    { 
     using (PdfStamper stamper = new PdfStamper(reader, ms)) 
     { 
      PdfContentByte cb = stamper.GetOverContent(1); 

        //Flush the PdfStamper's buffer 
      stamper.Close(); 
      //Get the raw bytes of the PDF 
      bytes = ms.ToArray(); 
      var now = String.Format("{0:d-M-yyyy}", DateTime.Now); 
      var pdfName = string.Format("{0}_factory_worksheet", now).Replace("%", "").Replace(" ", "_"); 

      var context = HttpContext.Current; 
      context.Response.ContentType = "application/pdf"; 
      context.Response.AddHeader("content-disposition", "attachment;filename=" + pdfName); 
      context.Response.Buffer = true; 
      context.Response.Clear(); 
      context.Response.OutputStream.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length); 
      context.Response.OutputStream.Flush(); 
      context.Response.End(); 
     } 
    } 

} 
+0

PDFを最初から生成していないので、実際には既存のものから部品を取っていますよね? –

答えて

1

私は本当にあなたがC#、それを扱う方法を知りませんが、論理的な流れは次のようになります:あなたのPDFファイルをdegree.Assuming 90を読者のコンテンツを回転させるように
使用PdfDictionary複数のページが含まれている、 PdfReader reader =新しいPdfReader(パス); (; pgCnt < = reader.getNumberOfPages(); int型pgCnt = 1 pgCnt ++)のための
{
//論理ページ番号
追加回転&を実装する}

はあなたを想定した(現在の回転を得るためには、ポートレートモードを使用しています&ランドスケープモードで変換しようとすると)
int rttnPg = reader.getPageRotation(pgCnt);
また、そのページのPdfDictionaryを取得します。
pgDctnry = reader.getPageN(i); 90度の使用
pgDctnry.put(PdfName.ROTATE、新しいPdfNumber(rttnPg + 90))でそれを回転させるために今
(私はpgDctnryとしてその変数の名前)。

今、あなたは、現在のページ番号がコンテンツを乗り越える追加するit.Nowを行っているように、現在のページの(ここで私はpgCntntBtそれを命名)PdfStamperを使用して、それをバインド
pgCntntBt =スタンパ.getOverContent(pgCnt)。
rctPgSz = rdrPgr.getPageSizeWithRotation(pgCnt);
pgCntntBt.beginText();
bfUsed = //表示するテキストに使用するベースフォント。また、フォントサイズを設定します
pgCntntBt.setFontAndSize(bfUsed、8.2f); txtPg = String.format(pgTxt + "%d /%d"、pgCnt、totPgCnt);
pgCntntBt.showTextAligned(2、txtPg、// Put Width、// Put Height、// Rotation);
pgCntntBt.endText();

実際に私はこのことが意味することを理解していません。"グリッドにアイテムを入れて、ページあたりの行数がxになるようにする必要があります。ページのフッターにページ番号を付けてください。"。スタンパーを閉じて出力ストリームでフラッシュします。

関連する問題