2012-01-31 198 views
0

我创建了一个包含图像的PDF文档,我试图在每个图像下添加文本请记住,该页面的模板是不同的,这取决于用户在页面上想要的图像数量。我的问题是我在添加和定位文本时遇到问题。在图像后添加文本到pdf

代码添加图片:添加文字

int count = 0; 

     imageStartX = (docSize.Width/100) * marginSizeProcent; 

     float imageMaxHeight = 0; 
     float imageMaxWidth = 0; 

     iTextSharp.text.Image image = null; 

     switch (pageLayout) 
     { 
      case PageLayoutEnum.SingleImage: 

       imageMaxWidth = docSize.Width - ((docSize.Width/100) * (2 * (float)marginSizeProcent)); 
       imageMaxHeight = imageStartY - ((docSize.Width/100) * (float)marginSizeProcent); 


       foreach (PDFObject o in pdfObjects) 
       { 
        if (count > 0) 
         AddPageWithHeader(false); 

        image = iTextSharp.text.Image.GetInstance(o.File); 
        image.ScaleToFit(imageMaxWidth, imageMaxHeight); 
        image.SetAbsolutePosition(imageStartX + (imageMaxWidth - image.ScaledWidth)/2, imageStartY - image.ScaledHeight - (imageMaxHeight - image.ScaledHeight)/2); 

        image.Border = Rectangle.BOX; 
        image.BorderWidth = 2f; 
        image.BorderColor = BaseColor.DARK_GRAY; 

        document.Add(image); 

        count++; 
       } 

       break; 

      case PageLayoutEnum.TwoImages: 

代码:

MemoryStream memoryStream = new MemoryStream(); 

     PdfReader pdfReader = new PdfReader(documentStream.ToArray()); 
     PdfStamper stamper = new PdfStamper(pdfReader, memoryStream); 

     PdfContentByte contentbyte = stamper.GetUnderContent(1); 
     ColumnText dispalyIdText = new ColumnText(contentbyte); 
     Paragraph idText; 

     int counter = 0; 

     switch (pageLayout) 
     { 
      case PageLayoutEnum.SingleImage: 
       foreach (PDFObject item in pdfObjects) 
       { 
        dispalyIdText.SetSimpleColumn(200, 200, 200, 200, 200, Element.ALIGN_LEFT); 
        idText = new Paragraph(new Chunk(item.DisplayId, FontFactory.GetFont("Arial", 20, Font.BOLD, BaseColor.RED))); 
        dispalyIdText.AddElement(idText); 
       } 
       break; 

      case PageLayoutEnum.TwoImages: 

回答

1

你不说你的实际问题是什么,只是你遇到他们。

如果我猜测,你的问题之一是文本没有真正显示在你的PDF文件中。这有三个不同的原因。第一条是这条线:

dispalyIdText.SetSimpleColumn(200, 200, 200, 200, 200, Element.ALIGN_LEFT); 

该方法的前四个参数是要约束绘图的矩形的坐标。第一个参数是左下角x,第二个是左下角y,第三个是右上角x,第四个是右上角y。在你的代码中,你说的是将文本绑定到一个左下角坐标为200,200,右上角坐标为200,200的矩形。这意味着你的矩形具有零宽度和高度。为了解决这个问题,你需要给出一个实际工作的矩形。在PDF中,左下角是0,0所以在左下角那是20个像素绘制文本的矩形(没有实际像素却是另一个故事)高,200宽,你会怎么做:

dispalyIdText.SetSimpleColumn(0, 0, 200, 20, 200, Element.ALIGN_LEFT); 

你的第二个问题是你将leading(行高)设置为200.根据你创建的对象,这可能会或可能不会使文本出口。你应该把它设置得更加健全,可能是字体的高度。这不会影响AddElement,但它确实会影响SetText

dispalyIdText.SetSimpleColumn(0, 0, 200, 20, 12, Element.ALIGN_LEFT); 

的最后一个问题是,使用ColumnText当你现在在“文本”模式,必须告诉系统,当你准备好开始处理。您可以通过发出Go()命令做到这一点:

dispalyIdText.Go(); 
+0

感谢克里斯,我发现使用PDFContentByte显示和文本位置的另一个解决方案。通常你对问题的解决方案非常合适,所以我也猜测你对这个问题的权利!如果我必须重新访问我的代码的这一部分,那么我会尝试你的建议。 – DaNet 2012-02-01 15:31:18