Image iTextSharp超宽图像水平显示在多个页面中

Image iTextSharp超宽图像水平显示在多个页面中,image,pdf,itext,Image,Pdf,Itext,我对iTextSharp有问题。我有一个20000x1000的图像,我必须把它放在一个PDF中,页面大小为A1水平。棘手的是,我需要将图像的高度调整为PDF格式,并相对于图像打印多页宽 我试过了,但它生成了一个PDF,只有一页,图像的宽度和高度都进行了调整 Rectangle pageSize = PageSize.A1; Document doc = new Document(pageSize.Rotate(), 10f, 10f, 10f, 10f); PdfWriter writer =

我对iTextSharp有问题。我有一个20000x1000的图像,我必须把它放在一个PDF中,页面大小为A1水平。棘手的是,我需要将图像的高度调整为PDF格式,并相对于图像打印多页宽

我试过了,但它生成了一个PDF,只有一页,图像的宽度和高度都进行了调整

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

提前感谢您的帮助。

使用表格不是满足您需求的方法

首先,让我们看看如何缩放图像,使高度适应旋转的A1文档的高度:

Image image = Image.GetInstance(@"C:\TestFiles\image.png");
image.ScaleToFit(image.ScaledWidth, PageSize.A1.Width);
ScaleToFit()
方法缩放图像,使其适合矩形。在这种情况下,我们不希望宽度减小,因此我们将该矩形的宽度定义为等于原始图像的宽度。我们确实希望缩放高度,使其适合旋转A1页面的高度。旋转A1页面时,必须使用
PageSize.A1.Width
而不是
PageSize.A1.Height

  • 假设您有一个尺寸为500 x 1500的图像,那么缩放图像的大小将为500 x 2000,因为该图像适合一个500 x 1684的矩形
  • 假设您有一个尺寸为500 x 2000的图像,则缩放后的图像将为421 x 1684。高度将减小以适合旋转的A1页面,宽度将相应减小
  • 假设您的图像为5000 x 2000,则缩放后的图像将为4210 x 1684
现在,我们必须根据需要多次添加相同的图像,直到渲染完整的图像。请注意,图像字节在PDF中只存储一次:这些字节将在每个页面上重复使用

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