フィールドの挿入
文書にフィールドを挿入するには、いくつかの方法があります:
- DocumentBuilderを使用する
- FieldBuilderを使用する
- を使用して Aspose.Wordsドキュメントオブジェクトモデル(DOM)
この記事では、それぞれの方法をより詳細に見て、これらのオプションを使用して特定のフィールドを挿入する方法を分析します。
DocumentBuilderを使用した文書へのフィールドの挿入
Aspose.Wordsでは、InsertFieldメソッドは文書に新しいフィールドを挿入するために使用されます。 最初のパラメータは、挿入するフィールドの完全なフィールドコードを受け入れます。 2番目のパラメータはオプションで、フィールドのフィールド結果を手動で設定できます。 これが指定されていない場合、フィールドは自動的に更新されます。 空のフィールド値を持つフィールドを挿入するには、このパラメータにnullまたはemptyを渡すことができます。 特定のフィールドコードの構文がわからない場合は、まずMicrosoft Wordにフィールドを作成し、そのフィールドコードを表示するように切り替えます。
次のコード例は、DocumentBuilderを使用して差し込み項目を文書に挿入する方法を示しています:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
// The path to the documents directory. | |
String dataDir = Utils.getDataDir(InsertField.class); | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
builder.insertField("MERGEFIELD MyFieldName \\* MERGEFORMAT"); | |
doc.save(dataDir + "output.docx"); |
同じ手法を使用して、他のフィールド内にネストされたフィールドを挿入します。
次のコード例は、DocumentBuilderを使用して別のフィールド内にネストされたフィールドを挿入する方法を示しています:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
for (int i = 0; i < 5; i++) | |
builder.insertBreak(BreakType.PAGE_BREAK); | |
builder.moveToHeaderFooter(HeaderFooterType.FOOTER_PRIMARY); | |
// We want to insert a field like this: | |
// { IF {PAGE} <> {NUMPAGES} "See Next Page" "Last Page" } | |
Field field = builder.insertField("IF "); | |
builder.moveTo(field.getSeparator()); | |
builder.insertField("PAGE"); | |
builder.write(" <> "); | |
builder.insertField("NUMPAGES"); | |
builder.write(" \"See Next Page\" \"Last Page\" "); | |
field.update(); | |
doc.save(getArtifactsDir() + "WorkingWithFields.InsertNestedFields.docx"); |
フィールドレベルでのロケールの指定
言語識別子は、国または地理的地域の言語の標準的な国際的な数値省略形です。 Aspose.Wordsを使用すると、フィールドのロケールIDを取得または設定するLocaleIdプロパティを使用して、フィールドレベルでロケールを指定できます。
次のコード例は、このオプションを使用する方法を示しています:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
DocumentBuilder builder = new DocumentBuilder(); | |
Field field = builder.insertField(FieldType.FIELD_DATE, true); | |
field.setLocaleId(1049); | |
builder.getDocument().save(getArtifactsDir() + "WorkingWithFields.SpecifylocaleAtFieldlevel.docx"); |
型指定されていない/空のフィールドを挿入する
Microsoft Wordが許可するように型なし/空のフィールド({})を挿入する場合は、InsertFieldメソッドをFieldType.FieldNoneパラメータで使用できます。 Word文書にフィールドを挿入するには、“Ctrl+F9"キーの組み合わせを押すことができます。
次のコード例は、空のフィールドをドキュメントに挿入する方法を示しています:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
FieldUnknown field = (FieldUnknown) builder.insertField(FieldType.FIELD_NONE, false); | |
doc.save(getArtifactsDir() + "WorkingWithFields.InsertFieldNone.docx"); |
COMPARE
フィールドを挿入
COMPARE
フィールドは2つの値を比較し、比較がtrueの場合は数値1を返し、比較がfalseの場合は0を返します。
次のコード例は、DocumentBuilderを使用してCOMPARE
フィールドを追加する方法を示しています:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
FieldCompare field = (FieldCompare) builder.insertField(FieldType.FIELD_COMPARE, true); | |
field.setLeftExpression("3"); | |
field.setComparisonOperator("<"); | |
field.setRightExpression("2"); | |
field.update(); | |
builder.writeln(); | |
field = (FieldCompare) builder.insertField(FieldType.FIELD_COMPARE, true); | |
field.setLeftExpression("5"); | |
field.setComparisonOperator("="); | |
field.setRightExpression("2 + 3"); | |
field.update(); | |
doc.updateFields(); | |
doc.save(getArtifactsDir() + "Field.COMPARE.docx"); |
IF
フィールドを挿入
IF
フィールドは、引数を条件付きで評価するために使用できます。
次のコード例は、DocumentBuilderを使用してIF
フィールドを追加する方法を示しています:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
builder.write("Statement 1: "); | |
FieldIf field = (FieldIf) builder.insertField(FieldType.FIELD_IF, true); | |
field.setLeftExpression("0"); | |
field.setComparisonOperator("="); | |
field.setRightExpression("1"); | |
// The IF field will display a string from either its "TrueText" property, | |
// or its "FalseText" property, depending on the truth of the statement that we have constructed. | |
field.setTrueText("True"); | |
field.setFalseText("False"); | |
field.update(); | |
builder.write("\nStatement 2: "); | |
field = (FieldIf) builder.insertField(FieldType.FIELD_IF, true); | |
field.setLeftExpression("5"); | |
field.setComparisonOperator("="); | |
field.setRightExpression("2 + 3"); | |
field.setTrueText("True"); | |
field.setFalseText("False"); | |
field.update(); | |
doc.updateFields(); | |
doc.save(getArtifactsDir() + "Field.IF.docx"); |
FieldBuilderを使用した文書へのフィールドの挿入
Aspose.Wordsにフィールドを挿入する別の方法はFieldBuilderクラスです。 フィールドスイッチと引数値をテキスト、ノード、またはネストされたフィールドとして指定するための流暢なインターフェイスを提供します。
次のコード例は、FieldBuilderを使用してドキュメントにフィールドを挿入する方法を示しています:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(); | |
FieldBuilder firstName = new FieldBuilder(FieldType.FIELD_MERGE_FIELD); | |
firstName.addArgument("firstname"); | |
FieldBuilder lastName = new FieldBuilder(FieldType.FIELD_MERGE_FIELD); | |
lastName.addArgument("lastname"); | |
FieldArgumentBuilder firstnameArgumentBuilder = new FieldArgumentBuilder(); | |
firstnameArgumentBuilder.addText("Firstname: "); | |
firstnameArgumentBuilder.addField(firstName); | |
FieldArgumentBuilder lastnameArgumentBuilder = new FieldArgumentBuilder(); | |
lastnameArgumentBuilder.addText("Lastname: "); | |
lastnameArgumentBuilder.addField(lastName); | |
// Prepare IF field with two nested MERGEFIELD fields: { IF "left expression" = "right expression" "Firstname: { MERGEFIELD firstname }" "Lastname: { MERGEFIELD lastname }"} | |
FieldBuilder fieldBuilder = new FieldBuilder(FieldType.FIELD_IF); | |
fieldBuilder.addArgument("left expression"); | |
fieldBuilder.addArgument("="); | |
fieldBuilder.addArgument("right expression"); | |
fieldBuilder.addArgument(firstnameArgumentBuilder); | |
fieldBuilder.addArgument(lastnameArgumentBuilder); | |
// Insert IF field in exact location | |
Field field = fieldBuilder.buildAndInsert(doc.getFirstSection().getBody().getFirstParagraph()); | |
field.update(); | |
doc.save(getArtifactsDir() + "Field.InsertFieldUsingFieldBuilder.docx"); |
DOMを使用したフィールドの挿入
次を使用して、さまざまなタイプのフィールドを挿入することもできます Aspose.Wordsドキュメントオブジェクトモデル(DOM). このセクションでは、いくつかの例を見ていきます。
DOMを使用した文書への差し込み項目の挿入
MERGEFIELD
field in Word document can be represented by the FieldMergeField class. You can use FieldMergeField class to perform the following operations:
- 差し込み項目の名前を指定します
- 差し込み項目の書式設定を指定します
- 差し込み項目のフィールド区切り文字とフィールドの末尾の間にあるテキストを指定します
- フィールドが空白でない場合は、差し込み項目の後に挿入するテキストを指定します
- フィールドが空白でない場合は、差し込み項目の前に挿入するテキストを指定します
次のコード例は、文書内の段落にDOMを使用してMERGE
フィールドを追加する方法を示しています:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
Paragraph para = (Paragraph) doc.getChildNodes(NodeType.PARAGRAPH, true).get(0); | |
builder.moveTo(para); | |
// We want to insert a merge field like this: | |
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 \\m \\v" } | |
FieldMergeField field = (FieldMergeField) builder.insertField(FieldType.FIELD_MERGE_FIELD, false); | |
// { " MERGEFIELD Test1" } | |
field.setFieldName("Test1"); | |
// { " MERGEFIELD Test1 \\b Test2" } | |
field.setTextBefore("Test2"); | |
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 } | |
field.setTextAfter("Test3"); | |
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 \\m" } | |
field.isMapped(true); | |
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 \\m \\v" } | |
field.isVerticalFormatting(true); | |
field.update(); | |
doc.save(getArtifactsDir() + "WorkingWithFields.InsertMergeFieldUsingDOM.docx"); |
DOMを使用して文書にMail MergeADDRESSBLOCK
フィールドを挿入する
ADDRESSBLOCK
フィールドは、Word文書にMail Mergeアドレスブロックを挿入するために使用されます。 Word文書のADDRESSBLOCK
フィールドは、FieldAddressBlockクラスで表すことができます。 FieldAddressBlockクラスを使用して、次の操作を実行できます:
- フィールドに国/地域の名前を含めるかどうかを指定します
- POST*CODE(Universal Postal Union2006)で定義されているように、受取人の国/地域に応じて住所を書式設定するかどうかを指定します
- 除外された国/地域名を指定します
- 名前とアドレスの形式を指定します
- アドレスの書式設定に使用する言語IDを指定します
次のコード例は、文書内の段落にDOMを使用してMail MergeADDRESSBLOCK
フィールドを追加する方法を示しています:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
Paragraph para = (Paragraph) doc.getChildNodes(NodeType.PARAGRAPH, true).get(0); | |
builder.moveTo(para); | |
// We want to insert a mail merge address block like this: | |
// { ADDRESSBLOCK \\c 1 \\d \\e Test2 \\f Test3 \\l \"Test 4\" } | |
FieldAddressBlock field = (FieldAddressBlock) builder.insertField(FieldType.FIELD_ADDRESS_BLOCK, false); | |
// { ADDRESSBLOCK \\c 1" } | |
field.setIncludeCountryOrRegionName("1"); | |
// { ADDRESSBLOCK \\c 1 \\d" } | |
field.setFormatAddressOnCountryOrRegion(true); | |
// { ADDRESSBLOCK \\c 1 \\d \\e Test2 } | |
field.setExcludedCountryOrRegionName("Test2"); | |
// { ADDRESSBLOCK \\c 1 \\d \\e Test2 \\f Test3 } | |
field.setNameAndAddressFormat("Test3"); | |
// { ADDRESSBLOCK \\c 1 \\d \\e Test2 \\f Test3 \\l \"Test 4\" } | |
field.setLanguageId("Test 4"); | |
field.update(); | |
doc.save(getArtifactsDir() + "WorkingWithFields.InsertMailMergeAddressBlockFieldUsingDOM.docx"); |
DocumentBuilderを使用せずに文書にADVANCE
フィールドを挿入する
ADVANCE
フィールドは、行内の後続のテキストを左、右、上、または下にオフセットするために使用されます。 Word文書のADVANCE
フィールドは、FieldAdvanceクラスで表すことができます。 FieldAdvanceクラスを使用して、次の操作を実行できます:
- フィールドの後に続くテキストをページの上端から垂直方向に移動するポイントの数を指定します
- フィールドに続くテキストを、列、フレーム、またはテキストボックスの左端から水平方向に移動するポイントの数を指定します
- フィールドの後に続くテキストを左、右、上、または下に移動するポイントの数を指定します
次のコード例は、文書内の段落にDOMを使用してADVANCE
フィールドを追加する方法を示しています:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(); | |
Paragraph para = (Paragraph) doc.getChildNodes(NodeType.PARAGRAPH, true).get(0); | |
// We want to insert an Advance field like this: | |
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 \\x 100 \\y 100 } | |
FieldAdvance field = (FieldAdvance) para.appendField(FieldType.FIELD_ADVANCE, false); | |
// { ADVANCE \\d 10 " } | |
field.setDownOffset("10"); | |
// { ADVANCE \\d 10 \\l 10 } | |
field.setLeftOffset("10"); | |
// { ADVANCE \\d 10 \\l 10 \\r -3.3 } | |
field.setRightOffset("-3.3"); | |
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 } | |
field.setUpOffset("0"); | |
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 \\x 100 } | |
field.setHorizontalPosition("100"); | |
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 \\x 100 \\y 100 } | |
field.setVerticalPosition("100"); | |
field.update(); | |
doc.save(getArtifactsDir() + "WorkingWithFields.InsertAdvanceFieldWithOutDocumentBuilder.docx"); |
DocumentBuilderを使用せずに文書にASK
フィールドを挿入する
ASK
フィールドは、Word文書のブックマークに割り当てるテキストの入力をユーザーに求めるために使用されます。 Word文書のASK
フィールドは、FieldAskクラスで表すことができます。 FieldAskクラスを使用して、次の操作を実行できます:
- ブックマークの名前を指定します
- デフォルトのユーザー応答(プロンプトウィンドウに含まれる初期値)を指定します。
- Mail Merge操作ごとにユーザー応答を1回受信するかどうかを指定します
- プロンプトテキスト(プロンプトウィンドウのタイトル)を指定します。
次のコード例は、文書内の段落にDOMを使用してASK
フィールドを追加する方法を示しています:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(); | |
Paragraph para = (Paragraph) doc.getChildNodes(NodeType.PARAGRAPH, true).get(0); | |
// We want to insert an Ask field like this: | |
// { ASK \"Test 1\" Test2 \\d Test3 \\o } | |
FieldAsk field = (FieldAsk) para.appendField(FieldType.FIELD_ASK, false); | |
// { ASK \"Test 1\" " } | |
field.setBookmarkName("Test 1"); | |
// { ASK \"Test 1\" Test2 } | |
field.setPromptText("Test2"); | |
// { ASK \"Test 1\" Test2 \\d Test3 } | |
field.setDefaultResponse("Test3"); | |
// { ASK \"Test 1\" Test2 \\d Test3 \\o } | |
field.setPromptOnceOnMailMerge(true); | |
field.update(); | |
doc.save(getArtifactsDir() + "WorkingWithFields.InsertASKFieldWithOutDocumentBuilder.docx"); |
DocumentBuilderを使用せずに文書にAUTHOR
フィールドを挿入する
AUTHOR
フィールドは、Document
プロパティからドキュメントの作成者の名前を指定するために使用されます。 Word文書のAUTHOR
フィールドは、FieldAuthorクラスで表すことができます。 FieldAuthorクラスを使用して、次の操作を実行できます:
- 文書作成者の名前を指定します
次のコード例は、文書内の段落にDOMを使用してAUTHOR
フィールドを追加する方法を示しています:
DocumentBuilderを使用せずに文書にINCLUDETEXT
フィールドを挿入する
INCLUDETEXT
フィールドは、フィールドコードで指定された文書に含まれるテキストとグラフィックスを挿入します。 ドキュメント全体またはブックマークで参照されるドキュメントの一部を挿入できます。 Word文書のこのフィールドはINCLUDETEXTで表されます。 FieldIncludeTextクラスを使用して、次の操作を実行できます:
- 含まれる文書のブックマーク名を指定します
- 文書の場所を指定します
次のコード例は、文書内の段落にDOMを使用してINCLUDETEXT
フィールドを追加する方法を示しています:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(); | |
Paragraph para = new Paragraph(doc); | |
// We want to insert an INCLUDETEXT field like this: | |
// { INCLUDETEXT "file path" } | |
FieldIncludeText fieldIncludeText = (FieldIncludeText) para.appendField(FieldType.FIELD_INCLUDE_TEXT, false); | |
fieldIncludeText.setBookmarkName("bookmark"); | |
fieldIncludeText.setSourceFullName(getMyDir() + "IncludeText.docx"); | |
doc.getFirstSection().getBody().appendChild(para); | |
fieldIncludeText.update(); | |
doc.save(getArtifactsDir() + "WorkingWithFields.InsertIncludeFieldWithoutDocumentBuilder.docx"); |
DocumentBuilderを使用せずに文書にTOA
フィールドを挿入する
TOA
(Table of Authorities)フィールドは、権限のテーブルを構築して挿入します。 TOA
フィールドは、TA
(Table of Authorities Entry)フィールドでマークされたエントリを収集します。 MicrosoftOffice Wordでは、ReferencesタブのTable of AuthoritiesグループでInsert Table of AuthoritiesをクリックするとTOA
フィールドが挿入されます。 ドキュメントのTOA
フィールドを表示すると、構文は次のようになります:
{ TOA
[Switches ] }
次のコード例は、文書内の段落にDOMを使用してTOA
フィールドを追加する方法を示しています。
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(); | |
Paragraph para = new Paragraph(doc); | |
// We want to insert TA and TOA fields like this: | |
// { TA \c 1 \l "Value 0" } | |
// { TOA \c 1 } | |
FieldTA fieldTA = (FieldTA) para.appendField(FieldType.FIELD_TOA_ENTRY, false); | |
fieldTA.setEntryCategory("1"); | |
fieldTA.setLongCitation("Value 0"); | |
doc.getFirstSection().getBody().appendChild(para); | |
para = new Paragraph(doc); | |
FieldToa fieldToa = (FieldToa) para.appendField(FieldType.FIELD_TOA, false); | |
fieldToa.setEntryCategory("1"); | |
doc.getFirstSection().getBody().appendChild(para); | |
fieldToa.update(); | |
doc.save(getArtifactsDir() + "WorkingWithFields.InsertTOAFieldWithoutDocumentBuilder.docx"); |