質問するログイン新規登録

質問編集履歴

2

具体的な記述を追記しました。

2021/08/06 05:01

投稿

norita
norita

スコア2

title CHANGED
File without changes
body CHANGED
@@ -42,4 +42,35 @@
42
42
  ---
43
43
 
44
44
  今回の「タブ」のように、実際にフォントで表現できない文字が含まれているかどうか、正確にチェックしたいです。
45
- 表現できる・できないを、実際に変換してからエラーとして処理するのではなく、事前にチェックをして、表現できないのであれば、変換処理を行わないような処理にしたいです。
45
+ 表現できる・できないを、実際に変換してからエラーとして処理するのではなく、事前にチェックをして、表現できないのであれば、変換処理を行わないような処理にしたいです。
46
+
47
+
48
+ ---
49
+
50
+ 再度追記致します。
51
+
52
+ 「フォントで表現できない」という部分ですが、最終的には、PDPageContentStreamを利用してPDF出力しようとしています。
53
+
54
+ ```java
55
+ PDFont font = PDType0Font.load(doc, new File("TTFファイルパス"));
56
+
57
+ PDPage page = new PDPage(rectangle);
58
+ PDDocument doc = new PDDocument();
59
+ doc.addPage(page);
60
+
61
+ PDPageContentStream contents = new PDPageContentStream(doc, page)
62
+ contents.beginText();
63
+ contents.setFont(font, 12);
64
+ contents.showText("文字列");
65
+ ```
66
+
67
+ この処理をした際、指定したフォントファイル(TTFファイル)で対応できないと、例外エラーが発生してしまうため、そのような文字列ではないことの確認を事前にやりたいという流れになります。
68
+
69
+ ```
70
+ java.lang.IllegalArgumentException: No glyph for U+0009 in font IPAPGothic
71
+ at org.apache.pdfbox.pdmodel.font.PDCIDFontType2.encode(PDCIDFontType2.java:363)
72
+ at org.apache.pdfbox.pdmodel.font.PDType0Font.encode(PDType0Font.java:398)
73
+ at org.apache.pdfbox.pdmodel.font.PDFont.encode(PDFont.java:324)
74
+ at org.apache.pdfbox.pdmodel.PDPageContentStream.showTextInternal(PDPageContentStream.java:509)
75
+ at org.apache.pdfbox.pdmodel.PDPageContentStream.showText(PDPageContentStream.java:471)
76
+ ```

1

ご指摘の点、追記いたしました。

2021/08/06 05:01

投稿

norita
norita

スコア2

title CHANGED
File without changes
body CHANGED
@@ -18,4 +18,28 @@
18
18
  代替の手順としては、何かしらの画像に実際に出力して、出力できる・できないを確認する方法も考えていますが、
19
19
  チェック処理が増えると、画像変換が無駄処理に思えてきて、ほかのいい方法を探しています。
20
20
 
21
- 宜しくお願いします。
21
+ 宜しくお願いします。
22
+
23
+ ---
24
+
25
+ すみません。追記いたします。
26
+
27
+ > チェックはすり抜けてしまった
28
+
29
+ 該当関数の戻り値としては、
30
+ ```
31
+ 戻り値:
32
+ このFontが表示できないstr内の最初の文字を指すstrへのオフセット、またはこのFontがstr内のすべての文字を表示できる場合は-1。
33
+ ```
34
+ となっているため、期待値としては、問題の文字のオフセットが戻ることですが、タブの場合は、「-1」が戻ってきている状態となります。
35
+
36
+
37
+ > フォントとしては対応していないという事象
38
+
39
+ というのは、「不可」だったということになります。
40
+ 「不可」なので、当然、実際にフォントでの表現ができない状態となります。
41
+
42
+ ---
43
+
44
+ 今回の「タブ」のように、実際にフォントで表現できない文字が含まれているかどうか、正確にチェックしたいです。
45
+ 表現できる・できないを、実際に変換してからエラーとして処理するのではなく、事前にチェックをして、表現できないのであれば、変換処理を行わないような処理にしたいです。