2016-11-29 61 views
1

我有iTextSharp的问题。我有一张20000x1000的图片,我必须将其放在页面大小为A1水平的PDF中。棘手的是,我需要将图像的高度调整为PDF,并在图像上打印多页。iTextSharp横向多页超宽图像

我试过这个,但它生成一个页面的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(); 

非常感谢您的帮助。

回答

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×1500,然后缩放后的图像将在2000年因为图像适合由1684
  • 500矩形假设你有一个形象的措施有大小500图像500 x 2000,则缩放的图像将为421 x 1684.高度将缩小以适合旋转后的A1页面,宽度将相应减小。
  • 假设你在2000年有5000的图像,然后缩放后的图像将是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大,所以不会有第三页。