質問編集履歴

2

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

2021/08/06 05:01

投稿

norita
norita

スコア2

test CHANGED
File without changes
test CHANGED
@@ -87,3 +87,65 @@
87
87
  今回の「タブ」のように、実際にフォントで表現できない文字が含まれているかどうか、正確にチェックしたいです。
88
88
 
89
89
  表現できる・できないを、実際に変換してからエラーとして処理するのではなく、事前にチェックをして、表現できないのであれば、変換処理を行わないような処理にしたいです。
90
+
91
+
92
+
93
+
94
+
95
+ ---
96
+
97
+
98
+
99
+ 再度追記致します。
100
+
101
+
102
+
103
+ 「フォントで表現できない」という部分ですが、最終的には、PDPageContentStreamを利用してPDF出力しようとしています。
104
+
105
+
106
+
107
+ ```java
108
+
109
+ PDFont font = PDType0Font.load(doc, new File("TTFファイルパス"));
110
+
111
+
112
+
113
+ PDPage page = new PDPage(rectangle);
114
+
115
+ PDDocument doc = new PDDocument();
116
+
117
+ doc.addPage(page);
118
+
119
+
120
+
121
+ PDPageContentStream contents = new PDPageContentStream(doc, page)
122
+
123
+ contents.beginText();
124
+
125
+ contents.setFont(font, 12);
126
+
127
+ contents.showText("文字列");
128
+
129
+ ```
130
+
131
+
132
+
133
+ この処理をした際、指定したフォントファイル(TTFファイル)で対応できないと、例外エラーが発生してしまうため、そのような文字列ではないことの確認を事前にやりたいという流れになります。
134
+
135
+
136
+
137
+ ```
138
+
139
+ java.lang.IllegalArgumentException: No glyph for U+0009 in font IPAPGothic
140
+
141
+ at org.apache.pdfbox.pdmodel.font.PDCIDFontType2.encode(PDCIDFontType2.java:363)
142
+
143
+ at org.apache.pdfbox.pdmodel.font.PDType0Font.encode(PDType0Font.java:398)
144
+
145
+ at org.apache.pdfbox.pdmodel.font.PDFont.encode(PDFont.java:324)
146
+
147
+ at org.apache.pdfbox.pdmodel.PDPageContentStream.showTextInternal(PDPageContentStream.java:509)
148
+
149
+ at org.apache.pdfbox.pdmodel.PDPageContentStream.showText(PDPageContentStream.java:471)
150
+
151
+ ```

1

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

2021/08/06 05:01

投稿

norita
norita

スコア2

test CHANGED
File without changes
test CHANGED
@@ -39,3 +39,51 @@
39
39
 
40
40
 
41
41
  宜しくお願いします。
42
+
43
+
44
+
45
+ ---
46
+
47
+
48
+
49
+ すみません。追記いたします。
50
+
51
+
52
+
53
+ > チェックはすり抜けてしまった
54
+
55
+
56
+
57
+ 該当関数の戻り値としては、
58
+
59
+ ```
60
+
61
+ 戻り値:
62
+
63
+ このFontが表示できないstr内の最初の文字を指すstrへのオフセット、またはこのFontがstr内のすべての文字を表示できる場合は-1。
64
+
65
+ ```
66
+
67
+ となっているため、期待値としては、問題の文字のオフセットが戻ることですが、タブの場合は、「-1」が戻ってきている状態となります。
68
+
69
+
70
+
71
+
72
+
73
+ > フォントとしては対応していないという事象
74
+
75
+
76
+
77
+ というのは、「不可」だったということになります。
78
+
79
+ 「不可」なので、当然、実際にフォントでの表現ができない状態となります。
80
+
81
+
82
+
83
+ ---
84
+
85
+
86
+
87
+ 今回の「タブ」のように、実際にフォントで表現できない文字が含まれているかどうか、正確にチェックしたいです。
88
+
89
+ 表現できる・できないを、実際に変換してからエラーとして処理するのではなく、事前にチェックをして、表現できないのであれば、変換処理を行わないような処理にしたいです。