2016-11-29 18 views
1

iTextSharpに問題があります。私は20000x1000の画像を持っており、ページサイズA1の水平のPDFにする必要があります。面倒なことは、画像の高さをPDFに合わせて調整し、画像に関連して複数のページを印刷する必要があることです。iTextSharp超広角画像を水平方向に複数ページで表示

私はこれを試しましたが、PDFを1ページで生成し、画像の幅と高さを調整しました。

Rectangle pageSize = PageSize.A1; 
Document doc = new Document(pageSize.Rotate(), 10f, 10f, 10f, 10f); 

PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(@"C:\TestFiles\Default.pdf", FileMode.Create)); 
doc.Open(); 

Image image = Image.GetInstance(@"C:\TestFiles\image.png"); 

PdfPTable table = new PdfPTable(1); 
table.WidthPercentage = 100; 
PdfPCell c = new PdfPCell(image, true); 
c.Border = PdfPCell.NO_BORDER; 
c.Padding = 5; 
c.Image.ScaleAbsoluteHeight(pageSize.Height); 
table.AddCell(c); 
doc.Add(table); 

doc.Close(); 

ありがとうございます。

答えて

2

テーブルを使用することは、要件を満たす方法ではありません。

まず者は、高さが回転A1ドキュメントの高さに適応するように、あなたが画像を拡大縮小する方法を見てみましょう:

Image image = Image.GetInstance(@"C:\TestFiles\image.png"); 
image.ScaleToFit(image.ScaledWidth, PageSize.A1.Width); 

それはに収まるようScaleToFit()方法は、画像を拡大縮小します矩形。この場合、幅を小さくしたくないので、その長方形の幅を元の画像の幅と同じにします。我々は回転したA1ページの高さに合うように高さをスケールする必要があります。 A1ページを回転させると、PageSize.A1.Heightの代わりにPageSize.A1.Widthを使用する必要があります。

  • あなたがX 1500 500を測定した画像があると、そのイメージは、1684
  • によって500の長方形にフィットするので、その後、スケーリングされた画像は2000年のことでサイズ500を持つことになりますが、イメージその対策を持っていると仮定500 x 2000の場合、スケーリングされた画像は421 x 1684になります。回転したA1ページに合わせて高さが下がり、それに応じて幅が縮小されます。
  • その後、スケーリングされた画像は、4210 X 1684

になり、あなたは2000年までに5000の画像があると今、私たちは、必要に応じて、完全な画像がレンダリングされるまで、何度も同じ画像を追加する必要があります。イメージのバイトはPDFに1回だけ格納されることに注意してください。これらのバイトはすべてのページで再利用されます。

Float offset = 0; 
while (offset <= img.ScaledWidth) { 
    document.NewPage(); 
    img.SetAbsolutePosition(-offset, 0); 
    document.Add(img); 
    offset += PageSize.A1.HEIGHT; 
} 

上記のコードスニペットはどうなりますか?最初のページでは、イメージの位置の左下がページの左下隅と一致することを意味する位置(0, 0)にイメージを追加します。

画像がページに合っている場合(例:幅が新しいオフセット(2384)より小さい場合、新しいページはトリガーされません。画像がページに収まらない場合(たとえば、幅が2310より大きい4210の場合)、新しいページが作成され、同じ画像に新しいオフセット(例:(-2384, 0))が追加されます。

スケーリングされたイメージの幅が4210であり、ページの幅が2384であるとすると、2ページ目が追加された後のオフセットは4768になります。これは4210より大きいため、3番目のページはありません。

関連する問題