public static void Text3(Document pdfDocument) { Page pdfPage = pdfDocument.Pages.Add(); TextState defaultTextState = new TextState(); defaultTextState.ForegroundColor = Aspose.Pdf.Color.Brown; defaultTextState.Font = FontRepository.FindFont("Times"); defaultTextState.FontStyle = FontStyles.Regular; defaultTextState.FontSize = 13; defaultTextState.StrikeOut = false; defaultTextState.Underline = true; pdfPage.PageInfo.Margin = new MarginInfo(0, 0, 0, 12); pdfPage.PageInfo.DefaultTextState = defaultTextState; pdfPage.Background = Aspose.Pdf.Color.FromRgb(0.9, 0.9, 0.9); int pageCount = 1; for (int i = 1; i <= 100; i++) { TextFragment textFragment = new TextFragment("Text Fragment " + i + "."); //textFragment.IsFirstParagraphInColumn = true; // one item per page //textFragment.IsInLineParagraph = true; //textFragment.IsInNewPage = true; //textFragment.TextState.ForegroundColor = pdfDocument.PageInfo.DefaultTextState.ForegroundColor; //textFragment.Margin = new MarginInfo(12, 0, 6, 12); textFragment.Margin = new MarginInfo(12, 0, 6, 12); /* TextFragment textFragment2 = new TextFragment(" Text Fragment (2) " + i + "."); TextState textState = new TextState(); textState.ApplyChangesFrom(defaultTextState); textState.ForegroundColor = Aspose.Pdf.Color.Gray; textState.FontStyle = FontStyles.Bold; textState.Underline = false; textState.FontSize = 7; textFragment2.TextState.ApplyChangesFrom(textState); textFragment2.Margin = new MarginInfo(0, 0, 0, 0); //Console.WriteLine(textFragment2.BaselinePosition); //Console.WriteLine(textFragment.BaselinePosition); //Console.WriteLine(textFragment2.Rectangle); //Console.WriteLine(textFragment.Rectangle); textFragment2.IsInLineParagraph = true; //textFragment2.BaselinePosition = new Position(100, 300); //textFragment2.Position = new Position(100, 200); */ TextSegment textSegment = new TextSegment("Text Segment. "); TextState textState = new TextState(); textState.ApplyChangesFrom(defaultTextState); textState.ForegroundColor = Aspose.Pdf.Color.Gray; textState.FontStyle = FontStyles.Bold; textState.Underline = false; textState.FontSize = 7; textSegment.TextState.ApplyChangesFrom(textState); textFragment.Segments.Add(textSegment); TextSegment textSegment2 = new TextSegment("Text Segment 2"); TextState textState2 = new TextState(); textState2.ApplyChangesFrom(defaultTextState); textState2.ForegroundColor = Aspose.Pdf.Color.Green; textState2.FontStyle = FontStyles.Regular; textState2.Underline = false; textState2.FontSize = 18; textSegment2.TextState.ApplyChangesFrom(textState2); textFragment.Segments.Add(textSegment2); pdfPage.Paragraphs.Add(textFragment); //pdfPage.Paragraphs.Add(textFragment2); pdfDocument.ProcessParagraphs(); if (pdfDocument.Pages.Count > pageCount) { pageCount = pdfDocument.Pages.Count; pdfPage = pdfDocument.Pages[pageCount]; pdfPage.PageInfo.Margin = new MarginInfo(0, 0, 0, 12); pdfPage.PageInfo.DefaultTextState = defaultTextState; pdfPage.Background = Aspose.Pdf.Color.FromRgb(0.90, 1.00, 0.90); } //Console.WriteLine("page num: " + pdfPage.Number); //Console.WriteLine("page count: " + pdfDocument.Pages.Count); } }
private void createNode(HNode node, TextState parentTextState) { TextState nodeTextState = new TextState(); nodeTextState.ApplyChangesFrom(parentTextState); if (node is HNodeTag) { PUtil.TextStateUtil.TextState_ModifyFromHStyles((node as HNodeTag).Styles, nodeTextState); } // Block element if ((node is HNodeTag) && HUtil.TagUtil.IsBlockTag((node as HNodeTag).TagType)) { addTextFragmentOnPage(); createTextFragmentByTagType((node as HNodeTag).TagType); } // Inline element or Text element else if ( (node is HNodeTag) && HUtil.TagUtil.IsInlineTag((node as HNodeTag).TagType) || (node is HNodeText) ) { if ((node is HNodeText) && (node as HNodeText).ParentNode != null && ((node as HNodeText).ParentNode is HNodeTag) && (((node as HNodeText).ParentNode as HNodeTag)).TagType == HTagType.button) { // } else { // Create TextSegment for element TextSegment textSegment = getTextSegment(node, nodeTextState); // New Line, <BR /> if (pdfNewLine != null) { double marginTop = 0; double marginBottom = 0; if (pdfTextFragment != null) { marginBottom = pdfTextFragment.Margin.Bottom; pdfTextFragment.Margin.Bottom = 0; } addTextFragmentOnPage(); createTextFragmentByTagType(HTagType.div); if (pdfTextFragment != null) { pdfTextFragment.Margin.Top = marginTop; pdfTextFragment.Margin.Bottom = marginBottom; } pdfNewLine = null; } // Image else if (pdfImage != null) { double imageHeight = pdfImage.FixHeight; MarginInfo margin = new MarginInfo(0, 12, 0, 12); if (pdfTextFragment == null || pdfTextFragment.Segments.Count == 0 || (pdfTextFragment.Segments.Count == 1 && pdfTextFragment.Segments[1].Text == String.Empty)) { } else { pdfTextFragment.Margin.Top += imageHeight; margin = new MarginInfo(0, pdfTextFragment.Margin.Bottom, 0, -1 * imageHeight); } addTextFragmentOnPage(false); pdfImage.IsInLineParagraph = true; pdfImage.Margin = margin; inlineParagraphMargin = margin; if (hyperlinkNode != null) { Aspose.Pdf.WebHyperlink pdfHyperlink = new WebHyperlink(hyperlinkNode.GetAttribute("href", "#")); pdfImage.Hyperlink = pdfHyperlink; } pdfPage.Paragraphs.Add(pdfImage); if (node.NextNode == null) { updateCurrentPage(); } pdfImage = null; } // Form Field Element else if (pdfFormField != null) { // // // double inputHeight = pdfFormField.Height; MarginInfo margin = new MarginInfo(0, 12, 0, 12); if (pdfTextFragment == null || pdfTextFragment.Segments.Count == 0 || (pdfTextFragment.Segments.Count == 1 && pdfTextFragment.Segments[1].Text == String.Empty)) { } else { double textFragmentHeight = pdfTextFragment.Rectangle.Height; margin = pdfTextFragment.Margin; pdfTextFragment.Margin.Bottom = textFragmentHeight - inputHeight; pdfTextFragment.Margin.Top += Math.Max(0, (inputHeight - textFragmentHeight)); pdfTextFragment.Margin.Top += inputHeight; } addTextFragmentOnPage(false); pdfFormField.IsInLineParagraph = true; pdfFormField.Margin = margin; inlineParagraphMargin = new MarginInfo(pdfFormField.Width, margin.Bottom, margin.Right, margin.Top); pdfPage.Paragraphs.Add(pdfFormField); if (node.NextNode == null) { updateCurrentPage(); } pdfFormField = null; } // TextFragment for InLineParagraph mode else if (pdfTextFragment == null) { HTagType tagTypeForTextFragment = HTagType.div; bool isInLineParagraphForTextFragment = false; bool flagPreviousImage = false; bool flagPreviousInput = false; if (node.PrevNode != null && (node.PrevNode is HNodeTag) && (node.PrevNode as HNodeTag).TagType == HTagType.img) { // prev image element if (node.ParentNode != null && (node.ParentNode is HNodeTag) && HUtil.TagUtil.IsBlockTag((node.ParentNode as HNodeTag).TagType)) { tagTypeForTextFragment = (node.ParentNode as HNodeTag).TagType; } isInLineParagraphForTextFragment = true; flagPreviousImage = true; } else if (node.PrevNode != null && (node.PrevNode is HNodeTag) && (node.PrevNode as HNodeTag).TagType == HTagType.input) { // prev input element if (node.ParentNode != null && (node.ParentNode is HNodeTag) && HUtil.TagUtil.IsBlockTag((node.ParentNode as HNodeTag).TagType)) { tagTypeForTextFragment = (node.ParentNode as HNodeTag).TagType; } isInLineParagraphForTextFragment = true; flagPreviousInput = true; } else { } createTextFragmentByTagType(tagTypeForTextFragment); pdfTextFragment.IsInLineParagraph = isInLineParagraphForTextFragment; if ((flagPreviousImage || flagPreviousInput) && inlineParagraphMargin != null) { pdfTextFragment.Margin.Top = -1 * pdfTextFragment.Rectangle.Height - inlineParagraphMargin.Bottom; pdfTextFragment.Margin.Bottom = inlineParagraphMargin.Bottom; pdfTextFragment.Margin.Left = inlineParagraphMargin.Left; inlineParagraphMargin = null; } } if (textSegment != null && pdfTextFragment != null) //if (textSegment != null) { pdfTextFragment.Segments.Add(textSegment); } } } // // Create Nodes recursively with consider the hyperlink // if ((node is HNodeTag) && (node as HNodeTag).TagType == HTagType.a) { hyperlinkNode = (node as HNodeTag); } if (node is HNodeContainer) { foreach (HNode childNode in (node as HNodeContainer).ChildNodes) { createNode(childNode, nodeTextState); } } if ((node is HNodeTag) && (node as HNodeTag).TagType == HTagType.a) { hyperlinkNode = null; } // // // // // Add Text Fragment on Page (if need) // if ((node is HNodeTag) && HUtil.TagUtil.IsBlockTag((node as HNodeTag).TagType)) { addTextFragmentOnPage(); } // // // }