【问题标题】:iTextSharp ultra wide image in multiple pages horizontallyiTextSharp 横向多页中的超宽图像
【发布时间】:2016-11-29 13:37:14
【问题描述】:

我对 iTextSharp 有疑问。我有一个 20000x1000 的图像,我必须把它放在一个页面大小为 A1 水平的 PDF 中。棘手的是我需要将图像的高度调整为 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();

提前感谢您的帮助。

【问题讨论】:

    标签: image pdf itext


    【解决方案1】:

    使用表格不符合您的要求。

    首先让我们看一下如何缩放图像以使高度适应旋转的 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 到 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;
    }
    

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

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

    假设缩放后的图片宽度确实是4210,页面宽度是2384,那么添加第二页后的偏移量就是4768,大于4210,所以不会有第三页。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-19
      • 1970-01-01
      • 2011-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多