//// This code is part of Document Solutions for PDF .NET demos.// Copyright (c) MESCIUS inc. All rights reserved.//usingSystem.IO;usingSystem.Drawing;usingSystem.Collections.Generic;usingSystem.Linq;usingGrapeCity.Documents.Text;usingGrapeCity.Documents.Pdf;usingGCTEXT = GrapeCity.Documents.Text;usingGCDRAW = GrapeCity.Documents.Drawing; namespaceDsPdfWeb.Demos{// This sample demonstrates how to extract text from an existing PDF.// It loads an arbitrary PDF into a temporary GcPdfDocument, then// retrieves text from each page of that document using the Page.GetText() method,// adds all those texts to a TextLayout and renders it into the current document.// An alternative to Page.GetText() is the method GcPdfDocument.GetText()// which retrieves the text from the whole document at once.publicclassExtractText {publicintCreatePDF(Stream stream) {var doc = newGcPdfDocument();var page = doc.NewPage(); var rc = Common.Util.AddNote("This sample loads an arbitrary PDF into a temporary GcPdfDocument, " +"then retrieves text from each page of the loaded document using the Page.GetText() method, " +"adds all those texts to a TextLayout and renders it into the current document. " +"An alternative to Page.GetText() is the method GcPdfDocument.GetText() " +"which retrieves the text from the whole document at once.", page); // Text format for captions:var tf = newTextFormat() {Font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "NotoSerif-Regular.ttf")),FontSize = 14,ForeColor = Color.Blue };// Text layout to render the text:var tl = page.Graphics.CreateTextLayout(); tl.DefaultFormat.Font = StandardFonts.Times; tl.DefaultFormat.FontSize = 12; tl.MaxWidth = doc.PageSize.Width; tl.MaxHeight = doc.PageSize.Height; tl.MarginAll = rc.Left; tl.MarginTop = rc.Bottom + 36; // Text split options for widow/orphan control:var to = newTextSplitOptions(tl) {MinLinesInFirstParagraph = 2,MinLinesInLastParagraph = 2,RestMarginTop = rc.Left, }; // Open an arbitrary PDF, load it into a temp document and get all page texts:usingvar fs = File.OpenRead(Path.Combine("Resources", "PDFs", "Wetlands.pdf")); var doc1 = newGcPdfDocument(); doc1.Load(fs); // Get the texts of the loaded document's pages:var texts = newList<string>(); doc1.Pages.ToList().ForEach(p_ => texts.Add(p_.GetText())); // Add texts and captions to the text layout:for (int i = 0; i < texts.Count; ++i) { tl.AppendLine(string.Format("Text from page {0} of the loaded document:", i + 1), tf); tl.AppendLine(texts[i]); } tl.PerformLayout(true);while (true) {// 'rest' will accept the text that did not fit:var splitResult = tl.Split(to, outTextLayout rest); doc.Pages.Last.Graphics.DrawTextLayout(tl, PointF.Empty);if (splitResult != SplitResult.Split)break; tl = rest; doc.NewPage(); } // Done: doc.Save(stream);return doc.Pages.Count; } }}