Пример #1
0
        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);
            }


        }
Пример #2
0
        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();
            }
            //
            //
            //
        }