C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

iText7で文字列の抽出時に文字化けする /のぶくん (17/09/12(Tue) 17:29) #85138
Re[1]: iText7で文字列の抽出時に文字化けする /のぶくん (17/09/12(Tue) 18:06) #85139
  └ Re[2]: iText7で文字列の抽出時に文字化けする /もりお (17/09/13(Wed) 23:37) #85152
    └ Re[3]: iText7で文字列の抽出時に文字化けする /もりお (17/09/14(Thu) 06:18) #85153
      └ Re[4]: iText7で文字列の抽出時に文字化けする /のぶくん (17/09/25(Mon) 10:42) #85239 解決済み


親記事 / ▼[ 85139 ]
■85138 / 親階層)  iText7で文字列の抽出時に文字化けする
□投稿者/ のぶくん (1回)-(2017/09/12(Tue) 17:29:18)

分類:[C#] 

役所から発行されたPDFから範囲指定した上で文字列を抽出するプログラムを作成したいと思っています。
その際、範囲指定した文字列は抽出されていそうなのですが、文字列が化けているようです。

文字化けをなんとかしたいのですが、お知恵を貸していただけませんでしょうか?

開発環境:VS2015、C#、iText7(7.0.4 Nugetから)、iText7.font-asian(7.0.4 Nugetから)
==== 試したソース ====
  iText.IO.Util.ResourceUtil.AddToResourceSearch("itext.font_asian.dll"); // iText5は[iTextasian.dll]を参照の他、AddTo...しないといけなかったので真似た
  using (PdfReader reader = new PdfReader(pdfPath))
  using (var doc = new PdfDocument(reader))
  {
    var rect = new Rectangle(100, 100, 800, 780); // 数値は適当。広く文字列を抽出する用。

    var filter = new TextRegionEventFilter(rect);

    var pageCount = doc.GetNumberOfPages();

    for (int i = 1; i <= pageCount; i++)
    {
      ITextExtractionStrategy strategy = new FilteredTextEventListener(new LocationTextExtractionStrategy(), filter);
      var page = doc.GetPage(i);
      var str1 = PdfTextExtractor.GetTextFromPage(page, strategy);
    }
  }
==== ソースここまで ====

=== 抽出された文字列 ===

 
 
  部 副 

  
    
 	

 
()*+,
     -.
6!
  期 ! !
"#!
%&!
"%'!
    
"%!
替/所
    
" # $ %   /0的$%
て!"#$%&'型の*用,原則と。
	


日、時、工数、空m、掛m、日回、日回、:用日、;<の=>?@見B@
め!"#$を&'もは*+,-./'がって内4作6789
,C束EのF!あ@HせJ。たLM、MたNO,除QH。



=== 文字列ここまで ====

抽出された文字列のうち、
「日、時、工数、空m、掛m、日回、日回、:用日、;<の=>?@見B@」
に関しては"おおよそ"取得されています。
なので、単純な文字化けともちょっと違っていそうな感じはあります。

なにかご存じの方いらっしゃいましたらお知恵を貸してください。

[ □ Tree ] 返信 編集キー/

▲[ 85138 ] / ▼[ 85152 ]
■85139 / 1階層)  Re[1]: iText7で文字列の抽出時に文字化けする
□投稿者/ のぶくん (2回)-(2017/09/12(Tue) 18:06:08)
No85138 (のぶくん さん) に返信
プロパティを見ていたら「TT6A0Do00」というフォントが埋め込みサブセットで存在していました。
これは関係あるのでしょうか?

詳細:
TT6A0Do00
種類-Type1
エンコーディング-カスタム
[ 親 85138 / □ Tree ] 返信 編集キー/

▲[ 85139 ] / ▼[ 85153 ]
■85152 / 2階層)  Re[2]: iText7で文字列の抽出時に文字化けする
□投稿者/ もりお (52回)-(2017/09/13(Wed) 23:37:44)
No85139 (のぶくん さん) に返信

Type1は欧文用のフォント形式なので
日本語のフォントは埋め込まれていないのじゃないかと思います。

文字化けはコードポイントを読み間違ってるんでしょうけれどもなにが原因なんでしょうね。

iTextAsian.dllを読み込んだら日本語読めたよって情報があったので試してみてはいかがでしょうか。

iTextSharpメモ2
http://ukezara.net/hueho2013/?cat=6
[ 親 85138 / □ Tree ] 返信 編集キー/

▲[ 85152 ] / ▼[ 85239 ]
■85153 / 3階層)  Re[3]: iText7で文字列の抽出時に文字化けする
□投稿者/ もりお (53回)-(2017/09/14(Thu) 06:18:48)
iTextAsian.dllはすでに読み込んでましたね、失礼しました。

[ 親 85138 / □ Tree ] 返信 編集キー/

▲[ 85153 ] / 返信無し
■85239 / 4階層)  Re[4]: iText7で文字列の抽出時に文字化けする
□投稿者/ のぶくん (3回)-(2017/09/25(Mon) 10:42:02)
Stackoverflowで聞いた所、CIDフォントの取扱いに問題あったようで、7.0.5-SNAPSHOTで修正が入りました。
7.0.5-SNAPSHOTでは正常に読み込みできました。

https://stackoverflow.com/questions/46187868/text-garbled-when-itext-7-extracts-a-character-string/
解決済み
[ 親 85138 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -