我创建了一个包含图片的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:
答案 0 :(得分: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();