OEM販売のご相談
ご相談ください!

PDF Tool APIサンプルコード:矩形ごとの抽出

機能イメージ

複数の指定矩形からテキストを抽出します。

概要

サンプルコードの概要

複数の矩形のテキストを抽出します。

  • PtlParamExtractText: ページコンテントからのテキスト抽出処理のパラメータを表現したクラス
  • PtlParamExtractText.appendRect(PtlRect rectMM): テキスト抽出する矩形を追加
  • PtlContent: ページに描画される内容(コンテント)を表現するクラス
  • PtlContent.extractTexts(PtlParamExtractText): コンテントからテキストを指定された矩形ごとに抽出
  • PtlExtractTextResults: PtlContentのextractTexts関数で取得されるテキストのコンテナを表現するクラス
  • PtlExtractTextResults.get(int i): 指定した番号のテキスト抽出結果の詳細を取得
  • PtlExtractTextResult: PtlContentのextractTexts関数で取得されるテキストを表現するクラス
  • PtlExtractTextResult.getText(): テキスト抽出で指定した矩形内にあった文字を取得

サンプルコード

/*
	Antenna House PDF Tool API V8.0
	C++ Interface sample program

	概要:複数矩形テキスト抽出

	Copyright 2025 Antenna House, Inc.
*/

#include < PdfTk.h >
#include < stdio.h >
#include < fstream >
#include < string.h >
#if defined(_WIN64) || defined(_WIN32)
#include < atlstr.h >
#endif


using namespace PdfTk;
using namespace std;

int main(int argc, char* argv[])
{
	try {
		if (argc < 2) {
			printf("usage: MultiRectExtractText.exe in-pdf-file\n");
			return 1;
		}
		PtlParamInput input(argv[1]);
		PtlPDFDocument doc;

		// PDFファイルをロードします。
		doc.load(input);

		PtlParamExtractText paramExtractText;

		PtlPages& pages = doc.getPages();
		int pageCount = doc.getPageCount();

		PtlPage page = pages.get(0);

		// ページサイズ
		PtlSize pageSize = page.getSize();
		// テキスト抽出する範囲
		PtlRect rect(0.0f, 0.0f, pageSize.getWidth() / 2, pageSize.getHeight() / 2);
		PtlRect rect2(0.0f, pageSize.getHeight() / 2, pageSize.getWidth() / 2, pageSize.getHeight());

		paramExtractText.appendRect(rect);
		paramExtractText.appendRect(rect2);
		PtlContent& content = page.getContent();

		PtlExtractTextResults textList = content.extractTexts(paramExtractText);
		for (int i = 0; i < textList.getCount(); i++) {
			PtlExtractTextResult& result = textList.get(i);
			PtlParamString text = result.getText();
			printf(text.c_str());
		}
		printf("完了!\n");
		return 0;
	}
	catch (const PtlException &e)
	{
		fprintf(stderr, "Error code : %d\n %s\n", e.getErrorCode(), e.getErrorMessage().c_str());
		return 1;
	}
}
            
/*
    Antenna House PDF Tool API V8.0
    Java Interface sample program

    概要:複数短形テキスト抽出

    Copyright 2025 Antenna House, Inc.
*/

package Sample;

import jp.co.antenna.ptl.*;

public class MultiRectExtractText {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        if (args.length < 1)
        {
            System.out.println("usage: java MultiRectExtractText in-pdf-file");
            return;
        }

        try (PtlParamInput inputFile = new PtlParamInput(args[0]);
             PtlPDFDocument doc = new PtlPDFDocument())
        {
            // PDFファイルをロードします。
            doc.load(inputFile);

            try (PtlPages pages = doc.getPages()) // ページコンテナの取得
            {
                // ページコンテナが空かどうか
                if (pages.isEmpty())
                {
                    System.out.println("ページコンテナが空");
                    return;
                }

                // 1ページ目の取得
                try (PtlPage page = pages.get(0))
                {
                    // テキスト抽出
                    extractText(page);
                }
            }
        }
        catch (PtlException pex) {
             System.out.println("PtlException : ErrorCode = " + pex.getErrorCode() + "\n  " + pex.getErrorMessage());
        }
        catch (Exception ex) {
            System.out.println(ex.getMessage());
            ex.printStackTrace();
        }
        catch (Error ex) {
            System.out.println(ex.getMessage());
            ex.printStackTrace();
        }
        finally {
            System.out.println("-- 完了 --");
        }
    }

    public static void extractText(PtlPage page) throws PtlException, Exception, Error
    {
        try (PtlSize pageSize = page.getSize(); // ページサイズの取得
            PtlContent content = page.getContent(); // ページコンテントの取得
            PtlParamExtractText paramExtractText = new PtlParamExtractText(); // テキスト抽出パラメータ
            PtlRect rect = new PtlRect(0.0f, 0.0f, pageSize.getWidth() / 2, pageSize.getHeight() / 2); // テキスト抽出範囲矩形
            PtlRect rect2 = new PtlRect(0.0f, pageSize.getHeight() / 2, pageSize.getWidth() / 2, pageSize.getHeight()))  // テキスト抽出範囲矩形
        {
            paramExtractText.appendRect(rect);
            paramExtractText.appendRect(rect2);

             // テキスト抽出
             String text = content.extractText(paramExtractText);
             System.out.println(text);
        }
    }
}

            
/*
	Antenna House PDF Tool API V8.0
	.Net Interface sample program

	概要:複数矩形テキスト抽出

	Copyright 2025 Antenna House, Inc.
*/

using System;
using PdfTkNet;
using static System.Net.Mime.MediaTypeNames;

namespace MultiRectExtractText
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length < 1)
            {
                Console.WriteLine("usage: MultiRectExtractText.exe in-pdf-file");
                return;
            }

            try
            {
                using (PtlParamInput input = new PtlParamInput(args[0]))
                using (PtlPDFDocument doc = new PtlPDFDocument())
                {
                    // PDFファイルをロードします。
                    doc.load(input);

                    // ページコンテナの取得
                    using (PtlPages pages = doc.getPages())
                    using (PtlPage page = pages.get(0))
                    using (PtlParamExtractText paramExtractText = new PtlParamExtractText())
                    using (PtlSize pageSize = page.getSize())  // ページサイズ
                    using (PtlRect rect = new PtlRect(0.0f, 0.0f, pageSize.getWidth() / 2, pageSize.getHeight() / 2))  // テキスト抽出する範囲
                    using (PtlRect rect2 = new PtlRect(0.0f, pageSize.getHeight() / 2, pageSize.getWidth() / 2, pageSize.getHeight()))
                    {
                        paramExtractText.appendRect(rect);
                        paramExtractText.appendRect(rect2);

                        using (PtlContent content = page.getContent())
                        using (PtlExtractTextResults textList = content.extractTexts(paramExtractText))
                        {
                            for (int i = 0; i < textList.getCount(); i++)
                            {
                                using (PtlExtractTextResult result = textList.get(i))
                                {
                                    string text = result.getText();
                                    Console.WriteLine(text);
                                }
                            }
                        }
                    }
                }
            }
            catch (PtlException pex)
            {
                Console.WriteLine(pex.getErrorCode() + " : " + pex.getErrorMessageJP());
                pex.Dispose();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                Console.WriteLine("-- 完了 --");
            }
        }
    }
}

            
AHPDFToolCmd80.exe -extractText C:\sav\outMultiRectExtractText.txt -pageNo 0 -rect 0.0 0.0 105.007835 148.50533 -d C:\in\wag.pdf

            

サンプルコードのダウンロードはこちら

実行例

コマンドラインでの実行例

MultiRectExtractText.exe C:\in\wag.pdf
しいとも思わなかった。ただ彼の掌(てのひらせられてスーと持ち上げられた時何だかフワた感じがあったばかりである。掌の上で少し落て書生の顔を見たのがいわゆる人間というも始(みはじめ)であろう。この時妙なものだと感じが今でも残っている。第一毛をもって装飾きはずの顔がつるつるしてまるで薬缶(やかその後(ご)猫にもだいぶ逢(あ)ったがこん(かたわ)には一度も出会(でく)わした事のみならず顔の真中があまりに突起しているてその穴の中から時々ぷうぷうと煙(けむり)どうも咽(む)せぽくて実に弱った。これが人む煙草(たばこ)というものである事はようや頃知った。  この書生の掌の裏(うち)でしばらくはよい坐っておったが、しばらくすると非常な速力で始めた。書生が動くのか自分だけが動くのか分が無暗(むやみ)に眼が廻る。胸が悪くなる。 吾輩 (わがはい)は猫である。名前はまだ無 どこで生れたかとんと見当(けんとう)が何でも薄暗いじめじめした所でニャーニャーいた 事だけは記憶している。吾輩はここで始めて人間というものを見た。しかもあとで聞くとそれは書生という人間中で一番獰悪(どうあく)な種族であったそうだ。この書生というのは時々我々を捕(つかま)えて煮(に)て食うという話しかしその当時は何という考もなかったからおうっても食えやしないから・まあトチメンボーくらいなところで負けとく事にしようじゃないか君と御相談なさるものですから・私はつい何の気なしに・それがいいでしょう・といってしまったので・・へー・とちめんぼうは妙ですな・ 完了!
java -jar MultiRectExtractText.jar C:\in\wag.pdf
しいとも思わなかった。ただ彼の掌(てのひらせられてスーと持ち上げられた時何だかフワた感じがあったばかりである。掌の上で少し落て書生の顔を見たのがいわゆる人間というも始(みはじめ)であろう。この時妙なものだと感じが今でも残っている。第一毛をもって装飾きはずの顔がつるつるしてまるで薬缶(やかその後(ご)猫にもだいぶ逢(あ)ったがこん(かたわ)には一度も出会(でく)わした事のみならず顔の真中があまりに突起しているてその穴の中から時々ぷうぷうと煙(けむり)どうも咽(む)せぽくて実に弱った。これが人む煙草(たばこ)というものである事はようや頃知った。  この書生の掌の裏(うち)でしばらくはよい坐っておったが、しばらくすると非常な速力で始めた。書生が動くのか自分だけが動くのか分が無暗(むやみ)に眼が廻る。胸が悪くなる。 吾輩 (わがはい)は猫である。名前はまだ無 どこで生れたかとんと見当(けんとう)が何でも薄暗いじめじめした所でニャーニャーいた 事だけは記憶している。吾輩はここで始めて人間というものを見た。しかもあとで聞くとそれは書生という人間中で一番獰悪(どうあく)な種族であったそうだ。この書生というのは時々我々を捕(つかま)えて煮(に)て食うという話しかしその当時は何という考もなかったからおうっても食えやしないから?まあトチメンボーくらいなところで負けとく事にしようじゃないか君と御相談なさるもの ですから?私はつい何の気なしに?それがいいでしょう?といってしまったので??へー?とちめんぼうは妙ですな?
-- 完了 --
MultiRectExtractText.exe C:\in\wag.pdf
しいとも思わなかった。ただ彼の掌(てのひらせられてスーと持ち上げられた時何だかフワた感じがあったばかりである。掌の上で少し落て書生の顔を見たのがいわゆる人間というも始(みはじめ)であろう。この時妙なものだと感じが今でも残っている。第一毛をもって装飾きはずの顔がつるつるしてまるで薬缶(やかその後(ご)猫にもだいぶ逢(あ)ったがこん(かたわ)には一度も出会(でく)わした事のみならず顔の真中があまりに突起しているてその穴の中から時々ぷうぷうと煙(けむり)どうも咽(む)せぽくて実に弱った。これが人む煙草(たばこ)というものである事はようや頃知った。  この書生の掌の裏(うち)でしばらくはよい坐っておったが、しばらくすると非常な速力で始めた。書生が動くのか自分だけが動くのか分が無暗(むやみ)に眼が廻る。胸が悪くなる。
 吾輩(わがはい)は猫である。名前はまだ無 どこで生れたかとんと見当(けんとう)が何でも薄暗いじめじめした所でニャーニャーいた事だけは記憶している。吾輩はここで始めて人間というものを見た。しかもあとで聞くとそれは書生という人間中で一番獰悪(どうあく)な種族であったそうだ。この書生というのは時々我々を捕(つかま)えて煮(に)て食うという話しかしその当時は何という考もなかったからおうっても食えやしないから?まあトチメンボーくらいなところで負けとく事にしようじゃないか君と御相談なさる ものですから?私はつい何の気なしに?それがいいでしょう?といってしまったので??へー?とちめんぼうは妙ですな?
-- 完了 --
AHPDFToolCmd80.exe -extractText C:\sav\outMultiRectExtractText.txt -pageNo 0 -rect 0.0 0.0 105.007835 148.50533 -d C:\in\wag.pdf
 use time 0.053000s

出力結果イメージ

このサンプルプログラムではテキスト抽出する範囲rectとrect2を指定しています。
rectはページを四等分した左下
rect2はページを四等分した左上
出力結果としてコマンドライン上にrectとrect2の範囲のテキストが書き出されます。

出力イメージ
出力イメージ 出力イメージ 出力イメージ

コマンドの実行では出力テキストファイル名を指定するのが必要です。
抽出された文字列は指定された出力テキストに記述されます

サンプルコードのダウンロード

サンプルコード

サンプルで使用した入出力PDF