改善する→「JavaからProcess起動で Python 実行して PDF を作らせる。」

環境依存になってしまうコーディングはやはり良くないということで、
oboe2uran.hatenablog.com

これをもう少し修正して、Eclipse環境の起動でも問題が起きないようにする。
Process起動で 渡すデータを、ユニコード文字列で渡して Python側でデコードして使えば良いのである。

Java 側、以下を使わせてもらいます。
JavaのUnicode文字列の変換用メソッド("あ" <-> "\u3042") - Qiita
このメソッドで充分です。

public static String convertToUnicode(String string){
   if (string==null || string.isEmpty()) return "";
   StringBuilder sb = new StringBuilder();
   for(int i = 0; i < string.length(); i++){
      sb.append(String.format("\\u%04X", Character.codePointAt(string, i)));
   }
   String unicode = sb.toString();
   return unicode;
}

前の、
JavaからProcess起動で Python 実行して PDF を作らせる。 - Oboe吹きプログラマの黙示録
のコードを以下のように修正します。(省略してます)

JavaPython 呼出し、、convertToUnicode メソッドを使います。

int sts = ScriptExecutor.run(()->"python  /var/make_pdf.py  /var/template.pdf  /var/out.pdf"
, ()->Arrays.asList( UnicodeTool.convertToUnicode("あ")
      , "\n", "ABC", "\n\n")
, e->{
   logger.debug("### stdout ###\n" + e);
},(e, x)->{
   logger.debug("### stderr ###\n" + e);
   logger.warn(x.getMessage(), x);
});

make_pdf.py の変更、
 inp = input('') の結果を取得して、
前のコードは、、

   cc.drawString(100, y_pos, e)

でしたが、一度エンコードしてから、unicode-escape でデコードするようにすれば良い。

   cc.drawString(0, y_pos, e.encode().decode('unicode-escape'))

これで、Eclipse でのコーディング作業中でも動作確認もやりやすくなります。
余計な変換処理をするわけですが、Java から、Python を動かして仕事をさせる処理は、
元々、遅くて構わない、覚悟の上の処理をさせる設計なわけで
そんなに気にすることないかもしれません。意外と高速でした。