iTextSharp水平多页超宽图像

时间:2016-11-29 13:37:14

标签: image pdf itext

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

我试过这个,但它生成一个单页的PDF,图像调整了宽度和高度。

{{1}}

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

使用表格不是满足您要求的方式。

首先让我们看一下如何缩放图像,使高度适应旋转的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×2000,因为该图像适合500×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;
}

上面的代码片段会发生什么?在第一页上,我们在位置(0, 0)处添加图片,这意味着图片的左下角将与页面的左下角重合。

如果图片适合页面,例如如果宽度缩放小于新偏移量(2384),则不会触发新页面。如果图像不适合页面(例如,因为缩放宽度是4210,其大于2384)将创建新页面,并且将添加具有新偏移的相同图像(例如(-2384, 0))。

假设缩放图像的宽度确实是4210并且页面的宽度是2384,那么添加第二页之后的偏移将是4768.这大于4210,因此将没有第三页。