0

誰かがpdfのbegintextセクションの実際のピクセル座標を取得するのを手伝ってくれますか? pdfbox を使用して pdf ファイルからテキストを取得していますが、そのテキスト セクション/段落を囲んでいる四角形を取得する必要があります。

$contents = $page->getContents();
$contentsStream = $page->getContents()->getStream();
$resources=$page->getResources();
$fonts = $resources->getFonts();
$xobjects = $resources->getImages();
$tokens=$contentsStream->getStreamTokens();
  • [PDFOperator{q}、COSFloat{690.48}、COSInt{0}、COSInt{0}、COSFloat{633.6}、COSInt{0}、COSInt{0}、PDFOperator{cm}、COSName{im1}、PDFOperator{Do} 、PDFOperator{Q}、

  • PDFOperator{BT}、COSInt{1}、COSInt{0}、COSInt{0}、COSInt{1}、COSFloat{25.92}、COSFloat{588.48}、PDFOperator{Tm}、COSInt{99}、PDFOperator{Tz}、 COSName{F30}、COSInt{56}、PDFOperator{Tf}、COSInt{3}、PDFOperator{Tr}、COSFloat{0.334}、PDFOperator{Tc}、COSString{Pospremanj}、PDFOperator{Tj}、COSInt{0}、 PDFOperator{Tc}、COSString{e}、PDFOperator{Tj}、COSFloat{9.533}、PDFOperator{Tw}、COSString{i}、PDFOperator{Tj}、COSFloat{6.062}、PDFOperator{Tw}、COSFloat{0.95}、 PDFOperator{Tc}、COSString{ ciscenj}、PDFOperator{Tj}、COSInt{0}、PDFOperator{Tc}、COSString{e}、PDFOperator{Tj}、COSInt{1}、COSInt{0}、COSInt{0}、 COSInt{1}、COSFloat{55.68}、COSFloat{539.76}、PDFOperator{Tm}、COSInt{0}、PDFOperator{Tw}、COSFloat{0.262}、PDFOperator{Tc}、COSString{uoè}、PDFOperator{Tj}、 COSInt{0}、PDFOperator{Tc}、COSString{i}、PDFOperator{Tj}、COSFloat{5.443}、PDFOperator{Tw}、COSFloat{-2.145}、PDFOperator{Tc}、COSString{zimslco}、PDFOperator{Tj}、COSInt{0}、PDFOperator{Tc}、COSString{g}、PDFOperator{Tj}、COSFloat{7.202}、PDFOperator{Tw} 、COSFloat{-0.148}、PDFOperator{Tc}、COSString{ odmor}、PDFOperator{Tj}、COSInt{0}、PDFOperator{Tc}、COSString{a}、PDFOperator{Tj}、PDFOperator{ET}、

  • PDFOperator{BT}、COSInt{1}、COSInt{0}、COSInt{0}、COSInt{1}、COSFloat{6.72}、COSFloat{513.12}、PDFOperator{Tm}、COSInt{0}、PDFOperator{Tw}、 COSName{F30}、COSInt{14}、PDFOperator{Tf}、COSString{}、PDFOperator{Tj}、COSFloat{2.751}、PDFOperator{Tw}、...

すべての単語/文字に対して PrintTextLocations 関数が行うような出力を取得したいと思います。下と左の座標は取得できますが、幅と上の座標を取得するにはどうすればよいですか?

印刷テキストの場所:

  • String [25.92,45.119995 FS = 56.0 XSCALE = 55.440002高さ= 40.208004スペース= 15.412322幅= 36.978485] P String [63.22914,45.119995 FS = 56.0 XSCALE = 55.440002 Height = 40.20.20.20.20.20.2088004 = 56.0 XScale = 55.440002高さ= 40.208004スペース= 15.412322幅= 30.824646] S String [128.58894,45.119995 FS = 56.0 XSCALE = 55.4440002 height = 42.168 fige = 15.412322 width = 3.873445.45.45.45.45.45.45.45.45.45.45.45.45.45.45.45.45.45.45.45.45.45.45.45.45.45.45.45.4. =42.168 space=15.412322 width=21.566162]r string[184.69026,45.119995 fs=56.0 xscale=55.440002 height=42.168 space=15.412322 width=30.824646]e string[215.84557,45.119995 fs=56.0 xscale=55.440002 height=42.168 space=15.412322 width =49.286148]m ...
4

1 に答える 1

1

...BTセクションは左下の座標を提供するため、現在のBTブロックに含まれるすべての単語/文字を解析して、他のすべての座標を取得する必要があります。最初の単語の高さ + BT の下 = 上、最大 (左座標 + 幅) = 右、最後の単語の下 = 下の座標。

これが誰かに役立つことを願っています...

1 文字の文字列の例:

string[32.94,35.099976 fs=8.0 xscale=1.0 height=4.4240003 space=2.2240002 width=3.959999]p

抽出、解析、および準備された行:

32.94,35.099976 fs=8.0 xscale=1.0 height=4.4240003 space=2.2240002 width=3.959999

関数:

/**
 * Parse single word / letter element
 *
 * @param string $str_raw  Extracted word string line.
 * @param string $str_elem Element of interest, word, char.
 * @param int    $pdf_w    Pdf page width.
 * @param int    $pdf_h    Pdf page height.
 * @param int    $pdf_d    Pdf page dpi.
 * @param int    $pdf_r    Pdf page relative dpi.
 *
 * @return array
 */
function createRealCoordinates($str_raw, $str_elem, $pdf_w, $pdf_h, $pdf_d = 400, $pdf_r = 72)
{
    $stringstrip = array('fs=', 'xscale=', 'height=', 'space=', 'width=');
    $string_info = str_replace($stringstrip, '', $str_raw);

    $coord_info = explode(' ', $string_info);
    $coord_xy   = explode(',', $coord_info[0]);

    $coord = array(
        'pdfWidth'  => $pdf_w,
        'pdfHeight' => $pdf_h,
        'pdfDpi'    => $pdf_d,
        'pdfRel'    => $pdf_r,
        'word'      => $str_elem,

        'x1' => null,
        'y1' => null,
        'x2' => null,
        'y2' => null,

        'fontSize'     => null,
        'xScale'       => null,
        'HeightDir'    => null,
        'WidthDir'     => null,
        'WidthOfSpace' => null,
    );

    // Left, Bottom coordinate.
    $coord['x1'] = ($coord_xy[0] / $pdf_r) * $pdf_d;
    $coord['y2'] = ($coord_xy[1] / $pdf_r) * $pdf_d;

    $coord['fontSize']     = $coord_info[1]; // font size.
    $coord['xScale']       = $coord_info[2]; // x size scale.
    $coord['HeightDir']    = $coord_info[3]; // height.
    $coord['WidthDir']     = $coord_info[5]; // word width.
    $coord['WidthOfSpace'] = ($coord_info[4] / $pdf_r) * $pdf_d; // width of space.

    // Right, Top coordinate.
    $coord['x2'] = $coord['x1'] + (($coord['WidthDir'] / $pdf_r) * $pdf_d);
    $coord['y1'] = $coord['y2'] - (($coord['HeightDir'] / $pdf_r) * $pdf_d);

    return $coord;
}

-マティヤ・カンシジャン

于 2011-07-26T06:43:21.687 に答える