/// <summary>Places retrieved text to canvas to a separate layer.</summary> /// <param name="imageSize"> /// size of the image according to the selected /// <see cref="ScaleMode"/> /// </param> /// <param name="pageText">text that was found on this image (or on this page)</param> /// <param name="pdfCanvas">canvas to place the text</param> /// <param name="multiplier">coefficient to adjust text placing on canvas</param> /// <param name="pageMediaBox">page parameters</param> private void AddTextToCanvas(Rectangle imageSize, IList <TextInfo> pageText, PdfCanvas pdfCanvas, float multiplier , Rectangle pageMediaBox) { if (pageText != null && pageText.Count > 0) { Point imageCoordinates = PdfCreatorUtil.CalculateImageCoordinates(ocrPdfCreatorProperties.GetPageSize(), imageSize ); foreach (TextInfo item in pageText) { String line = item.GetText(); IList <float> coordinates = item.GetBbox(); float left = coordinates[0] * multiplier; float right = (coordinates[2] + 1) * multiplier - 1; float top = coordinates[1] * multiplier; float bottom = (coordinates[3] + 1) * multiplier - 1; float bboxWidthPt = PdfCreatorUtil.GetPoints(right - left); float bboxHeightPt = PdfCreatorUtil.GetPoints(bottom - top); FontProvider fontProvider = GetOcrPdfCreatorProperties().GetFontProvider(); String fontFamily = GetOcrPdfCreatorProperties().GetDefaultFontFamily(); if (!String.IsNullOrEmpty(line) && bboxHeightPt > 0 && bboxWidthPt > 0) { Document document = new Document(pdfCanvas.GetDocument()); document.SetFontProvider(fontProvider); // Scale the text width to fit the OCR bbox float fontSize = PdfCreatorUtil.CalculateFontSize(document, line, fontFamily, bboxHeightPt, bboxWidthPt); float lineWidth = PdfCreatorUtil.GetRealLineWidth(document, line, fontFamily, fontSize); float deltaX = PdfCreatorUtil.GetPoints(left); float deltaY = imageSize.GetHeight() - PdfCreatorUtil.GetPoints(bottom); iText.Layout.Canvas canvas = new iText.Layout.Canvas(pdfCanvas, pageMediaBox); canvas.SetFontProvider(fontProvider); Text text = new Text(line).SetHorizontalScaling(bboxWidthPt / lineWidth); Paragraph paragraph = new Paragraph(text).SetMargin(0).SetMultipliedLeading(1.2f); paragraph.SetFontFamily(fontFamily).SetFontSize(fontSize); paragraph.SetWidth(bboxWidthPt * 1.5f); if (ocrPdfCreatorProperties.GetTextColor() != null) { paragraph.SetFontColor(ocrPdfCreatorProperties.GetTextColor()); } else { paragraph.SetTextRenderingMode(PdfCanvasConstants.TextRenderingMode.INVISIBLE); } canvas.ShowTextAligned(paragraph, deltaX + (float)imageCoordinates.x, deltaY + (float)imageCoordinates.y, TextAlignment.LEFT); canvas.Close(); } } } }
private static void SingleLimitedCanvasSizeCase(Document document, Paragraph paraOnCanvas, String description , float canvasHeight, int pageNum) { PdfDocument pdfDocument = document.GetPdfDocument(); document.Add(new Paragraph(description).SetBorder(new SolidBorder(ColorConstants.RED, 1))); PdfCanvas pdfCanvas = new PdfCanvas(pdfDocument.GetPage(pageNum)); Rectangle effectiveArea = document.GetPageEffectiveArea(pdfDocument.GetDefaultPageSize()); Rectangle rectangle = new Rectangle(36, 550, effectiveArea.GetWidth(), canvasHeight + LINES_SPACE_EPS); pdfCanvas.SaveState().SetFillColor(ColorConstants.MAGENTA).Rectangle(rectangle).Fill().RestoreState(); iText.Layout.Canvas canvas = new iText.Layout.Canvas(pdfCanvas, pdfDocument, rectangle); canvas.Add(paraOnCanvas); canvas.Close(); }
public virtual void OverflowHiddenOnCanvasTest01() { String outFileName = destinationFolder + "overflowHiddenOnCanvasTest01.pdf"; String cmpFileName = sourceFolder + "cmp_overflowHiddenOnCanvasTest01.pdf"; PdfDocument pdfDocument = new PdfDocument(new PdfWriter(outFileName)); PdfPage page = pdfDocument.AddNewPage(); iText.Layout.Canvas canvas = new Canvas(new PdfCanvas(page), page.GetPageSize().Clone().ApplyMargins(36, 36 , 36, 36, false)); AddParaWithImgSetOverflowX(canvas, OverflowPropertyValue.HIDDEN); canvas.Close(); pdfDocument.Close(); NUnit.Framework.Assert.IsNull(new CompareTool().CompareByContent(outFileName, cmpFileName, destinationFolder , "diff")); }
public virtual void HandleEvent(Event @event) { PdfDocumentEvent docEvent = (PdfDocumentEvent)@event; PdfDocument pdf = docEvent.GetDocument(); PdfPage page = docEvent.GetPage(); int pageNumber = pdf.GetPageNumber(page); Rectangle pageSize = page.GetPageSize(); PdfCanvas pdfCanvas = new PdfCanvas(page.GetLastContentStream(), page.GetResources(), pdf); iText.Layout.Canvas canvas = new iText.Layout.Canvas(pdfCanvas, pdf, pageSize); Paragraph p = new Paragraph().Add("Page ").Add(pageNumber.ToString()).Add(" of"); canvas.ShowTextAligned(p, this.x, this.y, TextAlignment.RIGHT); pdfCanvas.AddXObject(this.placeholder, this.x + this.space, this.y - this.descent); canvas.Close(); }