PSファイル内のテキスト操作 | Java
PSドキュメントにテキストを追加する
この記事では、PSドキュメントにテキストを追加する方法について説明します。
当然のことながら、テキストは何らかのフォントを使用してドキュメントに記述する必要があります。フォントはシステムフォルダーに保存することができ、この場合はシステムフォントと呼びます。また、カスタムフォルダーに保存することもできます。カスタムフォルダーとは、特定の用途のためにフォントを配置するフォルダーです。通常、これらのフォントはシステムフォルダーには存在しません。このようなフォントをカスタムフォントと呼びます。
Aspose.Page for Javaライブラリは、システムフォントとカスタムフォントの両方を使用するためのメソッドを提供しています。
システムフォントを使用する場合は、ネイティブJavaのjava.awt.Fontを使用してテキストを塗りつぶしたりアウトライン化したりします。メソッド呼び出し内の数値は、テキストの左上隅のx座標とy座標です。
1document.fillText(str, new java.awt.Font("Times New Roman", java.awt.Font.BOLD, fontSize), 50, 100);
カスタムフォントを使用するには、まずPsSaveOptionsにカスタムフォントフォルダを追加し、 com.aspose.page.font.DrFontを取得します。最後に、このDrFontオブジェクトを使用してテキストを塗りつぶしたり、アウトライン化したりします。
1options.setAdditionalFontsFolders(new String[] { FONTS_FOLDER });
2com.aspose.page.font.DrFont drFont = ExternalFontCache.fetchDrFont("Palatino Linotype", fontSize, Font.PLAIN);
3document.fillText(str, drFont, 50, 100);
もう1つの選択肢は、フォントにも属するテキストを扱うことです。PostScriptドキュメントでテキストを印刷するために使用されるフォントは、このファイルに埋め込むことも、埋め込まないこともできます。
前者の場合、テキストは常にテキストと共に存在するため、どのPostScriptビューアやエディターでも常にレンダリングされます。後者の場合、使用されているフォントがターゲットホストのシステムフォルダーに存在することを想定する必要があります。使用されているフォントが存在しない場合、PostScriptインタープリターはエラーをスローする可能性があります。
3つ目の選択肢もフォントに関するもので、テキストを追加する上でフォントが中心となるためです。テキストの塗りつぶしや描画(またはクリッピング)に使用されるフォントは、さまざまな形式でPSファイルに埋め込むことができます。現在、埋め込みではTrueTypeとType3フォントがサポートされています。
4つ目の選択肢は、指定されたアドバンス(幅)でテキストのグリフを書き込む機能です。これにより、テキストに芸術的な要素を加えることができます。
以下の例では、Aspose.Page for Javaライブラリを使用してPSドキュメントにテキストを追加するさまざまな方法を示しています。
新しいPSドキュメントにテキストを追加するアルゴリズムは、以下の手順で構成されます。
- 生成されるPSファイル用の出力ストリームを作成します。
- PsSaveOptions を作成します。カスタムフォントを使用する場合は、保存オプションにカスタムフォントフォルダーを追加します。
- 既に作成済みの出力ストリームと保存オプションを使用して、 PsDocument を作成します。
- 必要なフォント(system または custom)を作成します。
- 作成したフォントでテキストを塗りつぶすかアウトライン化します。ここでは、テキストを塗りつぶすか描画するかに応じて、java.awt.Paint または java.awt.Stroke を割り当てることができます。または、1つのメソッドでテキストの塗りつぶしとアウトライン化を行うこともできます。 java.awt.Paint または java.awt.Stroke を使用せずにメソッドを使用すると、テキストは現在のグラフィック状態における現在のペイント/ストロークで塗りつぶされるか、アウトライン化されます。
- ページを閉じます。
- ドキュメントを保存します。
サンプルコードを小さなコードスニペットに分割し、PSドキュメントの初期準備、テキスト追加のための各メソッドの使用、そしてドキュメントの完成を分離しました。
このコードでは、出力ストリームとPsSaveOptionsを作成し、コード内でカスタムフォントを使用するためのカスタムフォントフォルダを追加し、PsDocumentオブジェクトを作成し、すべてのメソッドに共通するテキストを文字列変数として設定し、使用されるすべてのメソッドで使用されるfontSize変数を作成します。
1//Create output stream for PostScript document
2FileOutputStream outPsStream = new FileOutputStream(dataDir + "AddText_outPS.ps");
3//Create save options with A4 size
4PsSaveOptions options = new PsSaveOptions();
5// Set custom fonts folder. It will be added to system fonts folders for finding needed fonts.
6options.setAdditionalFontsFolders(new String[] { FONTS_FOLDER });
7//A text to write to the PS file
8String str = "ABCDEFGHIJKLMNO";
9int fontSize = 48;
10
11// Create a new 1-paged PS Document
12PsDocument document = new PsDocument(outPsStream, options, false);
ここでは、グラフィックス状態の現在の色 (黒) と新しい SolidBrush を使用してテキストを塗りつぶすための システム フォント の使用方法を示します。
1//////////////////////////////////////Using system font (located in system fonts folders) for filling text //////////////////
2Font font = new Font("Times New Roman", Font.BOLD, fontSize);
3//Fill text with default or already defined color. In the given case it is black.
4document.fillText(str, font, 50, 100);
5//Fill text with Blue color.
6document.fillText(str, font, 50, 150, Color.BLUE);
7/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
結果
ここで、カスタム フォント を使用してテキストを入力します。
1//////////////////////////////////////Using custom font (located in custom fonts folders) for filling text /////////////////
2DrFont drFont = ExternalFontCache.fetchDrFont("Palatino Linotype", fontSize, Font.PLAIN);
3//Fill text with default or already defined color. In the given case it is black.
4document.fillText(str, drFont, 50, 200);
5//Fill text with Blue color.
6document.fillText(str, drFont, 50, 250, Color.BLUE);
7/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
結果
ここでは、グラフィックス状態の現在のストローク (黒) と新しい Stroke を使用してテキストのアウトラインを作成するための システム フォント の使用方法を示します。
1//Create a stroke with a width of 2 points.
2Stroke stroke = new BasicStroke(2);
3//Create stroke's blue-violet color
4Color strokeColor = new Color(138, 43, 226);
5
6//////////////////////////////////////Using system font (located in system fonts folders) for outlining text ////////////////
7//Outline text with default or already defined pen. In the given case it is a black colored 1-point width pen.
8document.outlineText(str, font, 50, 300);
9
10//Outline text with blue-violet colored 2-point width pen.
11document.outlineText(str, font, 50, 350, strokeColor, stroke);
12/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
結果
ここで、カスタム フォント を使用してテキストのアウトラインを作成します。
1//////////////////////////////////////Using custom font (located in custom fonts folders) for outlining text /////////////////
2//Outline text with default or already defined pen. In the given case it is a black colored 1-point width pen.
3document.outlineText(str, drFont, 50, 450);
4//Outline text with blue-violet colored 2-point width pen.
5document.outlineText(str, drFont, 50, 500, strokeColor, stroke);
6///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
結果
ここでは、新しい SolidBrush と Pen を使用してテキストを塗りつぶしたりアウトラインしたりするために システム フォント を使用する方法を示します。
1//Fill text with orange color and stroke with blue-violet 2-point width pen.
2document.fillAndStrokeText(str, font, 50, 400, Color.YELLOW, strokeColor, stroke);
結果
ここで、カスタム フォント を使用してテキストを塗りつぶし、アウトラインを作成します。
1//Fill the text with orange color and stroke with blue 2-point width pen.
2document.fillAndStrokeText(str, drFont, 50, 550, Color.ORANGE, Color.BLUE, stroke);
結果
最後に、グリフの幅を指定してテキストを埋めます。幅の数はグリフの数と同じでなければなりません。
1 //Glyphs widths
2 float[] widths = new float[] { 87, 87, 87, 87, 34, 87, 87 };
3 //Fill ASCII text using assigning glyphs widths.
4 document.fillText("BAMBOOK", widths, drFont, 50, 600, Color.BLUE);
5
6 //Glyphs widths
7 widths = new float[] { 87, 34, 87, 87, 87, 87, 87 };
8 //Fill Unicode text using assigning glyphs widths.
9 document.fillText("ЗООПАРК", widths, drFont, 50, 650, Color.ORANGE);
結果
現在のページを閉じて、ドキュメントを保存します
1//Close the current page
2document.closePage();
3
4//Save the document
5document.save();
.NET の PS ドキュメント内のテキストの操作を参照してください。
上記の例では、PostScriptファイルに埋め込まれたフォントがTrueTypeフォントとして使用されています。これは、PsDocumentクラスでフォントを保存する際のデフォルトの動作です。この動作を変更する必要がある場合は、 PsSaveOptionsを以下のように使用してください。
1//Do not embed used fonts.
2options.setEmbedFonts(false);
1//Embed used fonts as Type3 fonts.
2options.setEmbedFontsAs(FontConstants.EMBED_FONTS_TYPE3);
サンプルとデータファイルは以下からダウンロードできます。 GitHub.