ExtractText.vb
''
'' このコードは、DioDocs for PDF のサンプルの一部として提供されています。
'' © MESCIUS inc. All rights reserved.
''
Imports System.IO
Imports System.Drawing
Imports GrapeCity.Documents.Text
Imports GrapeCity.Documents.Pdf
Imports GCTEXT = GrapeCity.Documents.Text
Imports GCDRAW = GrapeCity.Documents.Drawing
'' このサンプルは、既存のPDFからテキストを抽出する方法を示しています。
'' 任意の PDF を一時的な GcPdfDocument に読み込み、Page.GetText() メソッドを
'' 使用してそのドキュメントの各ページからテキストを取得し、それらのテキストを
'' すべて TextLayout に追加して、現在のドキュメントにレンダリングします。
'' Page.GetText() の代わりに、ドキュメント全体からテキストを一度に取得する
'' GcPdfDocument.GetText() メソッドもあります。
Public Class ExtractText
Function CreatePDF(ByVal stream As Stream) As Integer
Dim doc = New GcPdfDocument()
Dim page = doc.NewPage()
Dim rc = Util.AddNote(
"これはPDF文書全体からテキストを一度に取得するサンプルです。" +
"任意の PDF を一時的な GcPdfDocument に読み込んでから、" +
"Page.GetText() メソッドを使用して読み込まれたドキュメントの各ページからテキストを取得します。" +
"読み込んだテキストをすべて TextLayout に追加して出力用のドキュメントに描画します。" +
"Page.GetText() の代わりに、GcPdfDocument.GetText() メソッドもあります。",
page)
'' キャプションのテキスト書式。
Dim tf = New TextFormat() With
{
.Font = Util.getFont(),
.FontBold = True,
.FontSize = 14,
.ForeColor = Color.Blue
}
'' テキストを描画するためのテキストレイアウト。
Dim tl = New TextLayout(72)
tl.DefaultFormat.Font = Util.getFont()
tl.DefaultFormat.FontSize = 12
tl.MaxWidth = doc.PageSize.Width
tl.MaxHeight = doc.PageSize.Height
tl.MarginAll = rc.Left
tl.MarginTop = rc.Bottom + 36
'' widow/orphan 制御のテキスト分割オプション。
Dim topt = New TextSplitOptions(tl) With
{
.MinLinesInFirstParagraph = 2,
.MinLinesInLastParagraph = 2,
.RestMarginTop = rc.Left
}
'' 任意の PDF を開き、それを一時ドキュメントに読み込んで、すべてのページテキストを取得します。
Using fs As New FileStream(Path.Combine("Resources", "PDFs", "diodocs_pricelist.pdf"), FileMode.Open, FileAccess.Read)
Dim doc1 = New GcPdfDocument()
doc1.Load(fs)
'' 読み込まれたドキュメントのページのテキストを取得します。
Dim texts = New List(Of String)()
doc1.Pages.ToList().ForEach(Sub(p_) texts.Add(p_.GetText()))
'' テキストレイアウトにテキストとキャプションを追加します。
For i = 0 To texts.Count - 1
tl.AppendLine(String.Format("読み込まれた PDF ファイルの {0} ページ目のテキスト:", i + 1), tf)
tl.AppendLine(texts(i))
Next
tl.PerformLayout(True)
While True
'' 'rest' は、収まりきらなかったテキストを受け入れます。
Dim rest As TextLayout = Nothing
Dim splitResult = tl.Split(topt, rest)
doc.Pages.Last.Graphics.DrawTextLayout(tl, PointF.Empty)
If splitResult <> SplitResult.Split Then
Exit While
End If
tl = rest
doc.NewPage()
End While
End Using
'' PDF ドキュメントを保存します。
doc.Save(stream)
Return doc.Pages.Count
End Function
End Class