کار با بوک مارک ها
نشانه ها در یک سند Microsoft Word مکان ها یا قطعات را که نام می برید و برای مرجع آینده شناسایی می کنید، شناسایی می کنند. برای مثال، ممکن است از یک نشانه برای شناسایی متن استفاده کنید که می خواهید بعدا آن را بازبینی کنید. به جای پیمایش از طریق سند برای پیدا کردن متن، می توانید با استفاده از کادر محاوره ای Bookmark به آن بروید.
با Aspose.Words می توانید از نشانک ها در گزارش ها یا اسناد برای وارد کردن برخی از داده ها در نشانک استفاده کنید یا قالب بندی خاصی را برای محتوای آن اعمال کنید. همچنین می توانید از نشانه ها برای بازیابی متن از یک مکان خاص در سند خود استفاده کنید.
اعمالی که می توان با نشانک ها با استفاده از Aspose.Words انجام داد همان اعمالی است که می توانید با استفاده از Microsoft Word انجام دهید. شما می توانید یک نشانه جدید را وارد کنید، حذف کنید، به یک نشانه بروید، یک نام نشانه را دریافت یا تنظیم کنید، متن را در آن قرار دهید یا تنظیم کنید.
یک نشانک وارد کنید
از startBookmark و endBookmark برای ایجاد یک علامت گذاری با علامت گذاری شروع و پایان آن استفاده کنید. فراموش نکنید که همان نام نشانه را به هر دو روش منتقل کنید. نشانه های کتاب در یک سند می توانند همپوشانی داشته باشند و هر محدوده ای را پوشش دهند. نشانه ها یا نشانه های بد شکل با نام های تکراری هنگام ذخیره سند نادیده گرفته می شوند.
مثال کد زیر نشان می دهد که چگونه یک نشانه جدید ایجاد کنید:
// 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(CreateBookmark.class); | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
builder.startBookmark("MyBookmark"); | |
builder.writeln("Text inside a bookmark."); | |
builder.endBookmark("MyBookmark"); | |
builder.startBookmark("Nested Bookmark"); | |
builder.writeln("Text inside a NestedBookmark."); | |
builder.endBookmark("Nested Bookmark"); | |
builder.writeln("Text after Nested Bookmark."); | |
builder.endBookmark("My Bookmark"); | |
PdfSaveOptions options = new PdfSaveOptions(); | |
options.getOutlineOptions().setDefaultBookmarksOutlineLevel(1); | |
options.getOutlineOptions().setDefaultBookmarksOutlineLevel(2); | |
doc.save(dataDir + "output.pdf", options); | |
System.out.println("\nBookmark created successfully."); |
به دست آوردن نشانک
گاهی اوقات لازم است که مجموعه ای از نشانه ها را برای تکرار از طریق نشانه ها یا برای اهداف دیگر بدست آورید. از ویژگی Node.getRange که توسط هر گره سند که یک شی Range را نشان می دهد که بخشی از سند موجود در این گره را نشان می دهد، استفاده کنید. از این شی برای بازیابی BookmarkCollection استفاده کنید و سپس از شاخص کننده مجموعه برای دریافت یک نشانه خاص استفاده کنید.
مثال کد زیر نشان می دهد که چگونه از مجموعه نشانه ها نشانه ها را بدست آوریم:
// 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(AccessBookmarks.class); | |
Document doc = new Document(dataDir + "Bookmark.doc"); | |
Bookmark bookmark1 = doc.getRange().getBookmarks().get(0); | |
Bookmark bookmark = doc.getRange().getBookmarks().get("MyBookmark"); | |
doc.save(dataDir + "output.doc"); | |
System.out.println("\nTable bookmarked successfully.\nFile saved at " + dataDir); | |
مثال کد زیر نشان می دهد که چگونه یک نام و متن نشانه گذاری را بدست آورید یا تنظیم کنید:
// 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(BookmarkNameAndText.class); | |
Document doc = new Document(dataDir + "Bookmark.doc"); | |
// Use the indexer of the Bookmarks collection to obtain the desired bookmark. | |
Bookmark bookmark = doc.getRange().getBookmarks().get("MyBookmark"); | |
// Get the name and text of the bookmark. | |
String name = bookmark.getName(); | |
String text = bookmark.getText(); | |
// Set the name and text of the bookmark. | |
bookmark.setName("RenamedBookmark"); | |
bookmark.setText("This is a new bookmarked text."); | |
System.out.println("\nBookmark name and text set successfully."); | |
مثال کد زیر نشان می دهد که چگونه یک جدول را نشانه گذاری کنید:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
//Create empty document | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
// We call this method to start building the table. | |
builder.startTable(); | |
builder.insertCell(); | |
// Start bookmark here after calling InsertCell | |
builder.startBookmark("MyBookmark"); | |
builder.write("Row 1, Cell 1 Content."); | |
// Build the second cell | |
builder.insertCell(); | |
builder.write("Row 1, Cell 2 Content."); | |
// Call the following method to end the row and start a new row. | |
builder.endRow(); | |
// Build the first cell of the second row. | |
builder.insertCell(); | |
builder.write("Row 2, Cell 1 Content"); | |
// Build the second cell. | |
builder.insertCell(); | |
builder.write("Row 2, Cell 2 Content."); | |
builder.endRow(); | |
// Signal that we have finished building the table. | |
builder.endTable(); | |
//End of bookmark | |
builder.endBookmark("MyBookmark"); | |
doc.save(dataDir + "output.doc"); | |
System.out.println("\nTable bookmarked successfully.\nFile saved at " + dataDir); |
اگر نام یک نشانک را به نامی که قبلا در سند وجود دارد تغییر دهید، هیچ خطایی ایجاد نمی شود و تنها اولین نشانک هنگام ذخیره سند ذخیره می شود.
توجه داشته باشید که برخی از نشانه ها در سند به زمینه های فرم اختصاص داده شده است. حرکت به چنین نشانه گذاری و قرار دادن متن در آنجا متن را در کد فیلد فرم قرار می دهد. اگرچه این فیلد فرم را باطل نمی کند، متن وارد شده قابل مشاهده نخواهد بود زیرا بخشی از کد فیلد می شود.
مثال کد زیر نشان می دهد که چگونه به ستون های جدول علامت گذاری شده دسترسی پیدا کنید:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
// Create empty document | |
Document doc = new Document(dataDir + "Bookmark.Table_out.doc"); | |
for (Bookmark bookmark : doc.getRange().getBookmarks()) | |
{ | |
System.out.printf("Bookmark: {0}{1}", bookmark.getName(), bookmark.isColumn() ? " (Column)" : ""); | |
if (bookmark.isColumn()) | |
{ | |
Row row = (Row) bookmark.getBookmarkStart().getAncestor(NodeType.ROW); | |
if (row != null && bookmark.getFirstColumn() < row.getCells().getCount()) | |
System.out.print(row.getCells().get(bookmark.getFirstColumn()).getText()); | |
} | |
} |
حرکت به نشانه گذاری
اگر شما نیاز به وارد کردن محتوای غنی (نه فقط متن ساده) به یک نشانه دارید، باید از moveToBookmark برای حرکت دادن نشانگر به نشانه استفاده کنید و سپس از DocumentBuilder روش ها و خواص برای وارد کردن محتوا استفاده کنید.
نمایش مخفی کردن محتوای نشانک
کل نشانه (including the bookmarked content) را می توان در قسمت واقعی فیلد IF
با استفاده از Aspose.Words خلاصه کرد. این می تواند به گونه ای باشد که فیلد IF
شامل یک فیلد ادغام در عبارت (Left of Operator) باشد و بسته به ارزش فیلد ادغام، فیلد IF
محتوای نشانه گذاری را در سند ورد نشان می دهد یا پنهان می کند.
مثال کد زیر نشان می دهد که چگونه نشانه ها را نشان می دهد/ پنهان می کند.
// 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(ShowHideBookmarks.class); | |
Document doc = new Document(dataDir + "Bookmark.doc"); | |
showHideBookmarkedContent(doc,"MyBookmark",false); | |
doc.save(dataDir + "Updated_Document.docx"); | |
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
public static void showHideBookmarkedContent(Document doc, String bookmarkName, boolean showHide) throws Exception { | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
Bookmark bm = doc.getRange().getBookmarks().get(bookmarkName); | |
builder.moveToDocumentEnd(); | |
// {IF "{MERGEFIELD bookmark}" = "true" "" ""} | |
Field field = builder.insertField("IF \"", null); | |
builder.moveTo(field.getStart().getNextSibling().getNextSibling()); | |
builder.insertField("MERGEFIELD " + bookmarkName + "", null); | |
builder.write("\" = \"true\" "); | |
builder.write("\""); | |
builder.write("\""); | |
builder.write(" \"\""); | |
Node currentNode = field.getStart(); | |
boolean flag = true; | |
while (currentNode != null && flag) { | |
if (currentNode.getNodeType() == NodeType.RUN) | |
if (currentNode.toString(SaveFormat.TEXT).trim().equals("\"")) | |
flag = false; | |
Node nextNode = currentNode.getNextSibling(); | |
bm.getBookmarkStart().getParentNode().insertBefore(currentNode, bm.getBookmarkStart()); | |
currentNode = nextNode; | |
} | |
Node endNode = bm.getBookmarkEnd(); | |
flag = true; | |
while (currentNode != null && flag) { | |
if (currentNode.getNodeType() == NodeType.FIELD_END) | |
flag = false; | |
Node nextNode = currentNode.getNextSibling(); | |
bm.getBookmarkEnd().getParentNode().insertAfter(currentNode, endNode); | |
endNode = currentNode; | |
currentNode = nextNode; | |
} | |
doc.getMailMerge().execute(new String[]{bookmarkName}, new Object[]{showHide}); | |
//In case, you do not want to use MailMerge then you may use the following lines of code. | |
//builder.moveToMergeField(bookmarkName); | |
//builder.write(showHide ? "true" : "false"); | |
} |