image - iTextSharp 水平多页超宽图像

标签 image pdf itext

我在使用 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();

预先感谢您的帮助。

最佳答案

使用表格不能满足您的要求。

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

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

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

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

关于image - iTextSharp 水平多页超宽图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40867312/

相关文章:

ios - 如何在 UIImagePickerController 捕获图像的瞬间获取当前位置?

java - 图像未在 Swing 中更新

java - 用 ScrollingImagePanel 替换 JPanel?

parsing - PDF 页面组件(解析、字体、图形等)的渲染时间

java - iText PDF文档页面尺寸不准确

java - 在 iText PDF 中插入大于或等于符号,即 >=

java - EJB服务PDF,导致重新请求对象属于其他PDF异常

c# - 比较两个图像,并返回以 % 为单位的相似率

c# - 使用 itextsharp 将页面插入现有 PDF

python - .doc 到 pdf 使用 python