Introduceți Câmpuri
Există mai multe moduri diferite de a insera câmpuri într-un document:
- folosind DocumentBuilder
- folosind FieldBuilder
- utilizarea Aspose.Words Model Obiect Document (DOM)
În acest articol, vom analiza fiecare mod în detaliu și vom analiza cum să inserați anumite câmpuri folosind aceste opțiuni.
Inserarea câmpurilor într-un Document folosind DocumentBuilder
În Aspose.Words metoda InsertField este utilizată pentru a insera câmpuri noi într-un document. Primul parametru acceptă codul complet al câmpului care urmează să fie introdus. Al doilea parametru este opțional și permite setarea manuală a rezultatului câmpului. Dacă acest lucru nu este furnizat, atunci câmpul este actualizat automat. Puteți trece null sau empty la acest parametru pentru a insera un câmp cu o valoare de câmp gol. Dacă nu sunteți sigur de sintaxa codului de câmp, creați mai întâi câmpul în Microsoft Word și comutați pentru a vedea codul câmpului său.
Următorul exemplu de cod arată cum să inserați un câmp de îmbinare într-un document folosind 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"); |
Aceeași tehnică este utilizată pentru a insera câmpuri imbricate în alte câmpuri.
Următorul exemplu de cod demonstrează cum să inserați câmpuri imbricate într-un alt câmp folosind 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"); |
Specificați Locale la nivel de câmp
Un identificator de limbă este o abreviere numerică internațională standard pentru limba dintr-o țară sau regiune geografică. Cu Aspose.Words, Puteți specifica Locale-ul la nivel de câmp folosind proprietatea LocaleId, care primește sau setează locale-ul câmpului ID.
Următorul exemplu de cod arată cum să utilizați această opțiune:
// 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"); |
Introduceți Câmpul Netipat/Gol
Dacă doriți să inserați câmpuri netipate/goale ({}) la fel cum permite Microsoft Word, puteți utiliza metoda InsertField cu parametrul FieldType.FieldNone. Pentru a insera un câmp într-un document Word, puteți apăsa combinația de taste “Ctrl + F9”.
Următorul exemplu de cod arată cum să inserați un câmp gol în document:
// 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"); |
Introduceți COMPARE
Câmp
Câmpul COMPARE
compară două valori și returnează valoarea numerică 1 dacă comparația este adevărată sau 0 dacă comparația este falsă.
Următorul exemplu de cod arată cum să adăugați COMPARE
câmpuri folosind 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); | |
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"); |
Introduceți IF
Câmp
Câmpul IF
poate fi folosit pentru a evalua argumentele condiționat.
Următorul exemplu de cod arată cum să adăugați IF
câmpuri folosind 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); | |
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"); |
Inserarea câmpurilor într-un Document folosind FieldBuilder
Modul alternativ de a insera câmpuri în Aspose.Words este clasa FieldBuilder. Oferă o interfață fluentă pentru a specifica comutatoarele de câmp și valorile argumentelor ca text, noduri sau chiar câmpuri imbricate.
Următorul exemplu de cod arată cum să inserați un câmp într-un document folosind 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"); |
Introducerea câmpurilor folosind DOM
De asemenea, puteți insera diferite tipuri de câmpuri folosind Aspose.Words Model Obiect Document (DOM). În această secțiune, vom analiza câteva exemple.
Inserarea câmpului de îmbinare într-un Document folosind DOM
MERGEFIELD
field in Word document can be represented by the FieldMergeField class. You can use FieldMergeField class to perform the following operations:
- specificați numele câmpului de îmbinare
- specificați formatarea câmpului de îmbinare
- specificați textul care se află între separatorul de câmp și sfârșitul câmpului câmpului de îmbinare
- specificați textul care trebuie inserat după câmpul de îmbinare dacă câmpul nu este gol
- specificați textul care trebuie inserat înainte de câmpul îmbinare dacă câmpul nu este gol
Următorul exemplu de cod arată cum să adăugați câmpul MERGE
folosind DOM la un paragraf dintr-un document:
// 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"); |
Inserarea câmpului Mail Merge ADDRESSBLOCK
într-un Document folosind DOM
Câmpul ADDRESSBLOCK
este folosit pentru a insera un bloc de adrese Mail Merge într-un document Word. ADDRESSBLOCK
câmpul din documentul Word poate fi reprezentat de clasa FieldAddressBlock. Puteți utiliza clasa FieldAddressBlock pentru a efectua următoarele operații:
- specificați dacă să includeți numele țării/regiunii în câmp
- specificați dacă să formatați adresa în funcție de țara / regiunea destinatarului, astfel cum este definită de POST * CODE (Uniunea Poștală Universală 2006)
- specificați numele țării/regiunii excluse
- specificați formatul numelui și adresei
- specificați limba ID utilizată pentru formatarea adresei
Următorul exemplu de cod arată cum să adăugați câmpul Mail Merge ADDRESSBLOCK
folosind DOM la un paragraf dintr-un document:
// 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"); |
Inserarea câmpului ADVANCE
într-un Document fără a utiliza DocumentBuilder
Câmpul ADVANCE
este folosit pentru a compensa textul ulterior într-o linie la stânga, la dreapta, în sus sau în jos. ADVANCE
câmpul din documentul Word poate fi reprezentat de clasa FieldAdvance. Puteți utiliza clasa FieldAdvance pentru a efectua următoarele operații:
- specificați numărul de puncte prin care textul care urmează câmpului trebuie mutat vertical de la marginea superioară a paginii
- specificați numărul de puncte prin care textul care urmează câmpului trebuie mutat orizontal de la marginea stângă a coloanei, cadrului sau casetei de text
- specificați numărul de puncte prin care textul care urmează câmpului trebuie mutat la stânga, la dreapta, în sus sau în jos
Următorul exemplu de cod arată cum să adăugați câmpul ADVANCE
folosind DOM la un paragraf dintr-un document:
// 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"); |
Inserarea câmpului ASK
într-un Document fără a utiliza DocumentBuilder
Câmpul ASK
este folosit pentru a solicita utilizatorului ca textul să fie atribuit unui marcaj în documentul Word. ASK
câmpul din documentul Word poate fi reprezentat de clasa FieldAsk. Puteți utiliza clasa FieldAsk pentru a efectua următoarele operații:
- specificați numele marcajului
- specificați răspunsul implicit al utilizatorului (valoarea inițială conținută în fereastra prompt)
- specificați dacă răspunsul utilizatorului trebuie primit o dată pentru o operație mail merge
- specificați textul prompt (titlul ferestrei prompt)
Următorul exemplu de cod arată cum să adăugați câmpul ASK
folosind DOM la un paragraf dintr-un document:
// 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"); |
Inserarea câmpului AUTHOR
într-un Document fără a utiliza DocumentBuilder
Câmpul AUTHOR
este folosit pentru a specifica numele autorului documentului din proprietățile Document
. AUTHOR
câmpul din documentul Word poate fi reprezentat de clasa FieldAuthor. Puteți utiliza clasa FieldAuthor pentru a efectua următoarele operații:
- specificați numele autorului documentului
Următorul exemplu de cod arată cum să adăugați câmpul AUTHOR
folosind DOM la un paragraf dintr-un document:
Inserarea câmpului INCLUDETEXT
într-un Document fără a utiliza DocumentBuilder
Câmpul INCLUDETEXT
introduce textul și grafica conținute în documentul numit în codul câmpului. Puteți insera întregul document sau o porțiune a documentului la care se face referire printr-un marcaj. Acest câmp din documentul Word este reprezentat de INCLUDETEXT. Puteți utiliza clasa FieldIncludeText pentru a efectua următoarele operații:
- specificați numele marcajului documentului inclus
- specificați locația documentului
Următorul exemplu de cod arată cum să adăugați câmpul INCLUDETEXT
folosind DOM la un paragraf dintr-un document:
// 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"); |
Inserarea câmpului TOA
într-un Document fără a utiliza DocumentBuilder
Câmpul TOA
(Table of Authorities) construiește și introduce un tabel de autorități. Câmpul TOA
colectează intrările marcate cu câmpurile TA
(Table of Authorities Entry). Microsoft Office Word introduce câmpul TOA
Când faceți clic pe Insert Table of Authorities în grupul Table of Authorities din fila References. Când vizualizați câmpul TOA
din document, sintaxa arată astfel:
{ TOA
[Switches ] }
Următorul exemplu de cod arată cum să adăugați câmpul TOA
folosind DOM la un paragraf dintr-un document.
// 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"); |