필드 삽입

문서에 필드를 삽입하는 방법은 여러 가지가 있습니다:

이 기사에서는 각 방법을 더 자세히 살펴보고 이러한 옵션을 사용하여 특정 필드를 삽입하는 방법을 분석합니다.

DocumentBuilder을 사용하여 문서에 필드 삽입

Aspose.Words에서InsertField메서드는 문서에 새 필드를 삽입하는 데 사용됩니다. 첫 번째 매개 변수는 삽입할 필드의 전체 필드 코드를 허용합니다. 두 번째 매개 변수는 선택 사항이며 필드의 필드 결과를 수동으로 설정할 수 있습니다. 이 항목이 제공되지 않으면 필드가 자동으로 업데이트됩니다. 이 매개 변수에 널 또는 빈 필드를 전달하여 빈 필드 값이 있는 필드를 삽입할 수 있습니다. 특정 필드 코드 구문에 대해 잘 모르는 경우 먼저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을 사용하면LocaleId속성을 사용하여 필드 수준에서 로캘을 지정할 수 있습니다.이 속성은 필드의 로캘ID를 가져오거나 설정합니다.

다음 코드 예제에서는 이 옵션을 사용하는 방법을 보여 줍니다:

// 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가 허용하는 것처럼 형식화되지 않은/빈 필드({})를 삽입하려는 경우FieldType.FieldNone매개 변수와 함께InsertField메서드를 사용할 수 있습니다. 단어 문서에 필드를 삽입하려면"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필드는 두 값을 비교하고 비교가 참이면 숫자 값 1 을 반환하거나 비교가 거짓이면 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");

Mail MergeADDRESSBLOCK필드를DOM를 사용하여 문서에 삽입

ADDRESSBLOCK필드는 단어 문서에Mail Merge주소 블록을 삽입하는 데 사용됩니다. 단어 문서의ADDRESSBLOCK필드는FieldAddressBlock클래스로 나타낼 수 있습니다. FieldAddressBlock클래스를 사용하여 다음 작업을 수행할 수 있습니다:

  • 필드에 국가/지역 이름을 포함할지 여부를 지정합니다
  • POST*CODE에 정의된 수신자의 국가/지역에 따라 주소 서식을 지정할지 여부를 지정합니다(유니버설 우체 연합 2006)
  • 제외된 국가/지역 이름 지정
  • 이름 및 주소 형식 지정
  • 주소 서식을 지정하는 데 사용되는 언어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필드는 왼쪽,오른쪽,위 또는 아래로 줄 내의 후속 텍스트를 오프셋하는 데 사용됩니다. 단어 문서의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필드는 워드 문서의 책갈피에 할당할 텍스트를 사용자에게 묻는 데 사용됩니다. 단어 문서의ASK필드는FieldAsk클래스로 나타낼 수 있습니다. FieldAsk클래스를 사용하여 다음 작업을 수행할 수 있습니다:

  • 책갈피 이름 지정
  • 기본 사용자 응답 지정(프롬프트 창에 포함된 초기 값)
  • Mail Merge작업당 사용자 응답을 한 번 수신할지 여부를 지정합니다
  • 프롬프트 텍스트(프롬프트 창의 제목)지정

다음 코드 예제에서는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속성에서 문서 작성자 이름을 지정하는 데 사용됩니다. 단어 문서의AUTHOR필드는FieldAuthor클래스로 나타낼 수 있습니다. FieldAuthor클래스를 사용하여 다음 작업을 수행할 수 있습니다:

  • 문서 작성자 이름 지정

다음 코드 예제에서는DOM을 사용하여AUTHOR필드를 문서의 단락에 추가하는 방법을 보여 줍니다:

// 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 AUTHOR field like this:
// { AUTHOR Test1 }
FieldAuthor field = (FieldAuthor) para.appendField(FieldType.FIELD_AUTHOR, false);
field.setAuthorName("Test1"); // { AUTHOR Test1 }
field.update();
doc.save(getArtifactsDir() + "WorkingWithFields.InsertAuthorField.docx");

DocumentBuilder을 사용하지 않고 문서에INCLUDETEXT필드 삽입

INCLUDETEXT필드는 필드 코드에 이름이 지정된 문서에 포함된 텍스트와 그래픽을 삽입합니다. 전체 문서 또는 책갈피에서 참조하는 문서의 일부를 삽입할 수 있습니다. 워드 문서의 이 필드는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) 필드로 표시된 항목을 수집합니다. Microsoft Office 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");