2017-11-22 6 views
1

私はitextsharpで自分のPDF文書にページ番号を書き込もうとしています。 例hereに従ってきました。この答えは、this implementation in C#の方向に私を指しています。PdfStamperは常にA4の寸法を仮定します

ここでは、ページの向きをA4とすると、すべて正常に動作します。私の場合はそうではありません。私はランドスケープA3のページを使用しています。ページ番号をうまく配置したいので、私が作業しているページの寸法が必要です。

stamper.GetOverContent().PdfDocument.PageSizeは常にA4ページの寸法を返すようです。

矩形:1191x842(腐敗:90度)
RectangleReadOnly:595x842(腐敗:0度)

using (var ms = new MemoryStream()) 
{ 
    using (var doc = new Document(PageSize.A3.Rotate())) 
    { 
     Debug.WriteLine(doc.PageSize); 
     var writer = PdfWriter.GetInstance(doc, ms); 

     doc.Open(); 
     doc.Add(new Paragraph("Hello!")); 
    } 

    byte[] firstPass = ms.ToArray(); 

    PdfReader reader = new PdfReader(firstPass); 
    using (var fs = new FileStream("out2.pdf", FileMode.Create, FileAccess.Write, FileShare.None)) 
    { 
     using (PdfStamper stamper = new PdfStamper(reader, fs)) 
     { 
      int totalPages = reader.NumberOfPages; 
      for (var i = 1; i <= totalPages; i++) 
      { 
       var under = stamper.GetUnderContent(i); 
       var over = stamper.GetOverContent(i); 

       Debug.WriteLine(under.PdfDocument.PageSize); 
       Debug.WriteLine(over.PdfDocument.PageSize); 
      } 
     } 
    } 
} 

となっている出力:ここ

は再現例です。 RectangleReadOnly:595x842(腐敗:0度)

どうすればPdfStamperのドキュメントのページサイズを取得できますか?

iTextSharpでページ番号を生成することについては、ではなく、です。さまざまな回避策があります。この質問は、特に文書の正しい寸法をPdfStamperで読むことに関するものです。これはマージンを含めフルページ・サイズが、あることを

var pageSize = reader.GetPageSizeWithRotation(i); 

注:

答えて

1

私は、しかし、ページサイズを取得するための正しい方法は、A4にstamper.GetUnderContent(i).PdfDocumentデフォルトである理由の説明を持っていません。

+1

'PdfStamper'ページの' PdfContentByte'の 'PdfDocument'インスタンスを取得する理由はありません。それを公開することで、人々はそれを使うことができると思うので、私たちはそのオブジェクトを公開してはいけません。 iTextの最初のバージョン(私は独学の開発者だったので、私は2000年にiTextの最初のバージョンをリリースしました;私は当時のコードを見るとまだ気分が悪いです)。 2016年に、私たちはついにiTextを一から書き直す手段を得ました。 iText 7のような設計上のエラーは表示されません(コードを将来的に証明したい場合に使用してください)。 –

+2

古い(7.0より前の)APIでiTextを使用しています。そのAPIは、時には激しく成長し、奇妙な結果をもたらしました。 'PdfDocument'の' PageSize'は、そのクラスが純粋な 'PdfWriter'を使ってゼロからPDFを作成するために使われるときだけ意味を持ちます。 'PdfStamper'ユースケースでは、それは興味のないデフォルト値を含んでいます。 – mkl

+0

@BrunoLowagieさて、私はちょっと馬鹿だと感じました - iText7がiTextSharpとは別のNuGetパッケージであることは実際にはわかりませんでした。今見てみましょう。はるかに良い感じ。先端のための乾杯 – Rob

関連する問題