私はiTextで作成したpdfを解析しようとしています。ヘルベチカ、サイズ:20 iText7でpdfを解析すると、一定の間隔(フリーセットフォント)で移動します
- "Имя":文書で私は2つの段落を持っていますFreeset(私はhereそれをダウンロードした)、サイズ:10
私は私が代わりに「Фамилия」の「Имя」適切にエンコードし、「Ôàìèëèÿ」を取得し解析する終えます。 「Фамилия」のUnicode文字ですが、848文字(10ベース)が残されました。 (例えば、UTF-8の0x0424の代わりに "Ф"(0x0424)の代わりに "Ô"(0x00d4)が得られ、その差は848(または16進数で350)です)
私はthisの例を使用します( "Имя"、 "Фамилия")
私はとして英語以外の文字を格納することがわかっています。私は手で入力データからpdfを作成していますので、手動で別のUnicode記号として再入力することはできません(その場で行う方法を知っている場合は、あなたのアプローチを提供してください)。
なぜこのチャーの動きアクターが起こり、それを避ける方法は歓迎されます。前もって感謝します。
Hereは私が扱ったファイルです。
編集
私はプロAcrobatで開いたファイルを試してみましたが、すべてがそこに罰金です。 Acrobatはまた、私がpdfに書いた3つのフォントがすべて文書に残っていることを示しています。ここで
は私が処理していますPDFファイルを作成するために使用するコードです:
private static void create() throws IOException {
PdfDocument pdf = new PdfDocument(new PdfReader(srcPdf), new PdfWriter(targetPdf));
PdfCanvas pdfCanvas = new PdfCanvas(pdf.getFirstPage());
PdfFont freeset = getPdfFont(freesetPath);
PdfFont helvetica = getPdfFont(helveticaPath);
PdfFont circe = getPdfFont(circePath);
pdfCanvas.beginText()
.setFontAndSize(helvetica, 15)
.setColor(Color.RED, true)
.moveText(50, 300)
.showText("Имя")
.setFontAndSize(freeset, 10)
.setColor(Color.GREEN, true)
.moveText(0, -30)
.showText("Фамилия")
.setFontAndSize(circe, 20)
.setColor(Color.BLUE, true)
.moveText(0, -30)
.showText("Должность")
.endText();
pdf.close();
}
private static PdfFont getPdfFont(String path) throws IOException {
InputStream fontInputStream = new FileInputStream(path);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[2048];
int a;
while((a = fontInputStream.read(buffer, 0, buffer.length)) != -1) {
baos.write(buffer, 0, a);
}
baos.flush();
return PdfFontFactory.createFont(baos.toByteArray(),
PdfEncodings.IDENTITY_H, true);
}
問題のPDFを共有してください。 – mkl
これらの文字列を読むときは 'UTF-8'を使用していますか? – Eugene
@mklが質問へのリンクを追加しました。他のテキストもありますが、問題は薄い緑色のテキスト "Фамилия"です。 –