Rust lopdf③

e-tipsmemo.hatenablog.com
文字列を抽出するのは最後

let mut textline : Vec<Object>= vec![];

for l in tmp.split('\n') {
	match op(CompleteStr(l)) {
		Ok((_, operate)) => {
			let operator = operate.operator;
			match operator.as_str() {
				"TJ" => {
					textline.extend(operate.operands);
				}
				"ET" => {
					println!("{:?}", textline);
					textline = vec![];
				}
				_ => (),
			}
		}
		Err(_) => (),
	}
}

ストリームは命令の列なのでそれを一行ずつ分解していって、lopdfのOperation構造体に入れ、
それがうまくパースできてTJなら一行の要素としてextendしていって、ET(End Text)が来たらテキストとして書き出す(つもり)。

行儀のいいPDFならPDFとして見たときに、文脈として関係ないテキストは別々のBT~ETの中に入っているだろうと期待していた、
f:id:katakanan:20181202005941p:plain
例えば上の"PB14"と"PA0-WKUP"


そんなこともなかった

BT
4.5002 0 0 4.5024 401.7752 354.5591 Tm
.0001 Tc
(PB14)Tj
-56.6623 9.25 TD
0 Tc
(PA0-WKUP)Tj
75.7583 64.4482 TD
.0001 Tc
(10)Tj
-8.934 0 TD
0 Tc
(9)Tj
-82.2613 -92.2518 TD
(K)Tj
.0835 9.212 TD
(J)Tj
ET

PDF Referenceによると
http://archimedespalimpsest.net/Documents/External/pdf_reference_1-7.pdf
TDが行を変えている命令だから、これがあれば文字列を分解することにしようかと思ったが、
実際はわかれているべきものなのかどうかがわからない

BT
4.5002 0 0 4.5024 315.6859 478.9902 Tm
0 Tc
(V)Tj
1.417 -.5 TD
.0001 Tc
(SS_2)Tj
ET

VSS_2も行の位置を変える命令を用いられている
f:id:katakanan:20181202013552p:plain

これがひとまとまりである単語であるかわかれているべき単語なのかを
判定するのは骨だとおもわれるのでテキストから抽出する作戦はひとまず終了

次はTableから抽出してみようと思う。

PDF構造解説

PDF構造解説

Adobe Acrobat DC ? PDF Readerそのほか

Adobe Acrobat DC ? PDF Readerそのほか