Използвайте DocumentBuilder, за да вмъкнете елементи на документа
DocumentBuilder
се използва за промяна на документи. Тази статия обяснява и описва как да изпълнявате редица задачи:
Вмъкване на низ от текст
Просто подайте текста, който трябва да вмъкнете в документа, към метода DocumentBuilder.Write
. Форматирането на текста се определя от свойството Font
. Този обект съдържа различни атрибути на шрифта (име на шрифта, размер на шрифта, цвят и т.н.). Някои важни атрибути на шрифта също са представени от DocumentBuilder свойства, за да ви позволят директен достъп до тях. Това са булеви свойства Font.Bold
, Font.Italic
и Font.Underline
.
Обърнете внимание, че форматирането на знаците, което сте задали, ще се прилага за целия текст, вмъкнат от текущата позиция в документа нататък.
По-долу примерни Вмъквания форматиран текст с DocumentBuilder.
// The path to the documents directory. | |
System::String outputDataDir = GetOutputDataDir_WorkingWithDocument(); | |
// Initialize document. | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(); | |
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc); | |
// Specify font formatting before adding text. | |
System::SharedPtr<Font> font = builder->get_Font(); | |
font->set_Size(16); | |
font->set_Bold(true); | |
font->set_Color(System::Drawing::Color::get_Blue()); | |
font->set_Name(u"Arial"); | |
font->set_Underline(Underline::Dash); | |
builder->Write(u"Sample text."); | |
System::String outputPath = outputDataDir + u"WriteAndFont.doc"; | |
doc->Save(outputPath); |
Вмъкване на параграф
DocumentBuilder.Writeln
вмъква и низ от текст в документа, но освен това добавя нов абзац. Текущото форматиране на шрифта също се определя от свойството DocumentBuilder.Font
, а текущото форматиране на абзаца се определя от свойството DocumentBuilder.ParagraphFormat
. По-долу пример показва как да вмъкнете абзац в документа.
// The path to the documents directory. | |
System::String outputDataDir = GetOutputDataDir_WorkingWithDocument(); | |
// Initialize document. | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(); | |
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc); | |
// Specify font formatting | |
System::SharedPtr<Font> font = builder->get_Font(); | |
font->set_Size(16); | |
font->set_Bold(true); | |
font->set_Color(System::Drawing::Color::get_Blue()); | |
font->set_Name(u"Arial"); | |
font->set_Underline(Underline::Dash); | |
// Specify paragraph formatting | |
System::SharedPtr<ParagraphFormat> paragraphFormat = builder->get_ParagraphFormat(); | |
paragraphFormat->set_FirstLineIndent(8); | |
paragraphFormat->set_Alignment(ParagraphAlignment::Justify); | |
paragraphFormat->set_KeepTogether(true); | |
builder->Writeln(u"A whole paragraph."); | |
System::String outputPath = outputDataDir + u"DocumentBuilderInsertParagraph.doc"; | |
doc->Save(outputPath); |
Вмъкване на таблица
Основният алгоритъм за създаване на таблица с DocumentBuilder е прост:
- Стартирайте таблицата с
DocumentBuilder.StartTable
. - Вмъкнете клетка, като използвате
DocumentBuilder.InsertCell
. Това автоматично стартира нов ред. Ако е необходимо, използвайте свойствотоDocumentBuilder.CellFormat
, за да зададете форматиране на клетки. - Въведете съдържанието на клетката, като използвате методите
DocumentBuilder
. - Повторете стъпки 2 и 3, докато редът е завършен.
- Извикайте
DocumentBuilder.EndRow
, За да завършите текущия ред. Ако е необходимо, използвайте свойствоDocumentBuilder.RowFormat
, за да зададете форматиране на редове. - Повторете стъпки 2-5, докато таблицата е пълна.
- Обадете се
DocumentBuilder.EndTable
, за да завършите сградата на масата. Подходящите методи за създаване на таблица DocumentBuilder са описани по-долу.
Стартиране на маса
Извикването DocumentBuilder.StartTable
е първата стъпка в изграждането на таблица. Тя може да бъде извикана и вътре в клетка, в който случай започва вложена таблица. Следващият метод за извикване е DocumentBuilder.InsertCell
.
Вмъкване на клетка
След като извикате DocumentBuilder->InsertCell
, се създава нова клетка и всяко съдържание, което добавите с помощта на други методи от класа DocumentBuilder
, ще бъде добавено към текущата клетка. За да стартирате нова клетка в същия ред, обадете се отново DocumentBuilder->InsertCell
. Използвайте свойството DocumentBuilder.CellFormat
, за да зададете форматиране на клетки. Връща CellFormat
обект, който представлява цялото форматиране за клетка от таблица.
Край на ред
Извикайте DocumentBuilder.EndRow
, За да завършите текущия ред. Ако извикате DocumentBuilder->InsertCell
веднага след това, таблицата продължава на нов ред.
Използвайте свойството DocumentBuilder.RowFormat
, за да зададете форматиране на редове. Връща RowFormat
обект, който представлява цялото форматиране за ред от таблица.
Завършване на маса
Обадете се DocumentBuilder.EndTable
, за да завършите текущата таблица. Този метод трябва да бъде извикан само веднъж, след като DocumentBuilder->EndRow
е бил извикан. При извикване DocumentBuilder.EndTable
премества курсора от текущата клетка в позиция непосредствено след таблицата. Следващият пример показва как да създадете форматирана таблица, която съдържа 2 реда и 2 колони.
// The path to the documents directory. | |
System::String outputDataDir = GetOutputDataDir_WorkingWithDocument(); | |
// Initialize document. | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(); | |
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc); | |
System::SharedPtr<Table> table = builder->StartTable(); | |
// Insert a cell | |
builder->InsertCell(); | |
// Use fixed column widths. | |
table->AutoFit(AutoFitBehavior::FixedColumnWidths); | |
builder->get_CellFormat()->set_VerticalAlignment(CellVerticalAlignment::Center); | |
builder->Write(u"This is row 1 cell 1"); | |
// Insert a cell | |
builder->InsertCell(); | |
builder->Write(u"This is row 1 cell 2"); | |
builder->EndRow(); | |
// Insert a cell | |
builder->InsertCell(); | |
// Apply new row formatting | |
builder->get_RowFormat()->set_Height(100); | |
builder->get_RowFormat()->set_HeightRule(HeightRule::Exactly); | |
builder->get_CellFormat()->set_Orientation(TextOrientation::Upward); | |
builder->Writeln(u"This is row 2 cell 1"); | |
// Insert a cell | |
builder->InsertCell(); | |
builder->get_CellFormat()->set_Orientation(TextOrientation::Downward); | |
builder->Writeln(u"This is row 2 cell 2"); | |
builder->EndRow(); | |
builder->EndTable(); | |
System::String outputPath = outputDataDir + u"DocumentBuilderBuildTable.doc"; | |
doc->Save(outputPath); |
Вмъкване на пауза
Ако искате изрично да стартирате нов ред, абзац, колона, секция или страница, обадете се DocumentBuilder.InsertBreak
. Преминете към този метод вида на почивката, която трябва да вмъкнете, която е представена от BreakType
изброяване. По-долу пример показва как да вмъкнете нови страници в документ.
// The path to the documents directory. | |
System::String outputDataDir = GetOutputDataDir_WorkingWithDocument(); | |
// Initialize document. | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(); | |
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc); | |
builder->Writeln(u"This is page 1."); | |
builder->InsertBreak(BreakType::PageBreak); | |
builder->Writeln(u"This is page 2."); | |
builder->InsertBreak(BreakType::PageBreak); | |
builder->Writeln(u"This is page 3."); | |
System::String outputPath = outputDataDir + u"DocumentBuilderInsertBreak.doc"; | |
doc->Save(outputPath); |
Вмъкване на изображение
DocumentBuilder осигурява няколко претоварвания на метода DocumentBuilder->InsertImage
, който ви позволява да вмъкнете вградено или плаващо изображение. Ако изображението е EMF или WMF метафайл, то ще бъде вмъкнато в документа в метафилен формат. Всички останали изображения ще се съхраняват във формат PNG. DocumentBuilder->InsertImage
методът може да използва изображения от различни източници:
- От файл или
URL
чрез подаване на низ параметърDocumentBuilder->InsertImage
. - От поток чрез преминаване на
Stream
параметърDocumentBuilder->InsertImage
. - От обект на изображение чрез подаване на параметър на изображението
DocumentBuilder->InsertImage
. - От масив от байтове чрез преминаване на параметър на масив от байтове
DocumentBuilder.InsertImage
.За всеки от методитеDocumentBuilder->InsertImage
има допълнителни претоварвания, които ви позволяват да вмъкнете изображение със следните опции: - Вграден или плаващ в определена позиция, например
DocumentBuilder->InsertImage
. - Процентна скала или потребителски размер, например
DocumentBuilder.InsertImage
. Освен това методътDocumentBuilder->InsertImage
връщаShape
обект, който току-що е създаден и вмъкнат, за да можете допълнително да променяте свойствата на фигурата.
Вмъкване на вградено изображение
Подайте единичен низ, представляващ файл, който съдържа изображението до DocumentBuilder->InsertImage
, за да вмъкнете изображението в документа като вградена графика. По-долу пример показва как да вмъкнете вградено изображение в позицията на курсора в документ.
System::SharedPtr<Document> doc = System::MakeObject<Document>(); | |
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc); | |
builder->InsertImage(inputDataDir + u"Watermark.png"); | |
System::String outputPath = outputDataDir + u"DocumentBuilderInsertImage.InsertInlineImage.doc"; | |
doc->Save(outputPath); |
Вмъкване на плаващо (абсолютно позиционирано) изображение
Този пример вмъква плаващо изображение от файл или URL
в определена позиция и размер.
System::SharedPtr<Document> doc = System::MakeObject<Document>(); | |
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc); | |
builder->InsertImage(inputDataDir + u"Watermark.png", RelativeHorizontalPosition::Margin, 100, RelativeVerticalPosition::Margin, 100, 200, 100, WrapType::Square); | |
System::String outputPath = outputDataDir + u"DocumentBuilderInsertImage.InsertFloatingImage.doc"; | |
doc->Save(outputPath); |
Вмъкване на отметка
За да вмъкнете отметка в документа, трябва да направите следното::
- Извикайте
DocumentBuilder->StartBookmark
подавайки желаното име на отметката. - Въведете текста на отметката, като използвате DocumentBuilder методи.
- Извикайте
DocumentBuilder.EndBookmark
, като му дадете същото име, което сте използвали с DocumentBuilder->StartBookmark. - Отметките могат да се припокриват и обхващат всеки диапазон. За да създадете валиден маркер, трябва да извикате
DocumentBuilder->StartBookmark
иDocumentBuilder->EndBookmark
с едно и също име на отметка.
По-долу пример показва как да вмъкнете отметка в документ с помощта на конструктор на документи.
// The path to the documents directory. | |
System::String outputDataDir = GetOutputDataDir_WorkingWithDocument(); | |
// Initialize document. | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(); | |
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc); | |
builder->StartBookmark(u"FineBookmark"); | |
builder->Writeln(u"This is just a fine bookmark."); | |
builder->EndBookmark(u"FineBookmark"); | |
System::String outputPath = outputDataDir + u"DocumentBuilderInsertBookmark.doc"; | |
doc->Save(outputPath); |
Вмъкване на поле Form
Полетата на формуляр са специален случай на Word полета, които позволяват “взаимодействие” с потребителя. Полетата на формуляра в Microsoft Word включват текстово поле, разгъващ се списък и checkbox.DocumentBuilder осигурява специални методи за вмъкване на всеки тип поле на формуляр в документа: DocumentBuilder.InsertTextInput
, DocumentBuilder->InsertCheckBox
и DocumentBuilder.InsertComboBox
. Обърнете внимание, че ако зададете име за полето на формуляра, автоматично се създава отметка със същото име.
Вмъкване на текстов вход
DocumentBuilder.InsertTextInput
за да вмъкнете текстово поле в документа. По-долу пример показва как да вмъкнете поле на формуляр за въвеждане на текст в документ.
System::SharedPtr<Document> doc = System::MakeObject<Document>(); | |
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc); | |
builder->InsertTextInput(u"TextInput", TextFormFieldType::Regular, u"", u"Hello", 0); | |
System::String outputPath = outputDataDir + u"DocumentBuilderInsertElements.InsertTextInputFormField.doc"; | |
doc->Save(outputPath); |
Вмъкване на квадратче за отметка
Извикайте DocumentBuilder.InsertCheckBox
, за да вмъкнете checkbox в документа. По-долу пример показва как да вмъкнете поле на формуляр checkbox в документ.
System::SharedPtr<Document> doc = System::MakeObject<Document>(); | |
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc); | |
builder->InsertCheckBox(u"CheckBox", true, true, 0); | |
System::String outputPath = outputDataDir + u"DocumentBuilderInsertElements.InsertCheckBoxFormField.doc"; | |
doc->Save(outputPath); |
Вмъкване на разгъващ се Списък
Извикайте DocumentBuilder.InsertComboBox
, за да вмъкнете разгъващ се списък в документа. По-долу пример показва как да вмъкнете разгъващ се поле на формуляр в документ.
System::SharedPtr<Document> doc = System::MakeObject<Document>(); | |
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc); | |
System::ArrayPtr<System::String> items = System::MakeArray<System::String>({u"One", u"Two", u"Three"}); | |
builder->InsertComboBox(u"DropDown", items, 0); | |
System::String outputPath = outputDataDir + u"DocumentBuilderInsertElements.InsertComboBoxFormField.doc"; | |
doc->Save(outputPath); |
Вмъкване на локала на ниво поле
Клиентите могат да определят локала на ниво поле сега и могат да постигнат по-добър контрол. Локалните идентификатори могат да бъдат свързани с всяко поле в DocumentBuilder. Примерите по-долу илюстрират как да се възползвате от тази опция.
System::String outputDataDir = GetOutputDataDir_WorkingWithFields(); | |
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(); | |
System::SharedPtr<Field> field = builder->InsertField(FieldType::FieldDate, true); | |
field->set_LocaleId(1049); | |
builder->get_Document()->Save(outputDataDir + u"SpecifylocaleAtFieldlevel.docx"); |
Вмъкване на хипервръзка
Използвайте DocumentBuilder.InsertHyperlink
, за да вмъкнете хипервръзка в документа. Този метод приема три параметъра: текст на връзката, която ще се показва в документа, местоназначение на връзката (URL или име на отметка в документа) и булев параметър, който трябва да е верен, ако URL
е име на отметка в документа.DocumentBuilder.InsertHyperlink вътрешни повиквания DocumentBuilder.InsertField
.Методът винаги добавя апострофи в началото и края на URL. Обърнете внимание, че трябва да зададете форматиране на шрифта за текста на хипервръзката, като изрично използвате свойството Font
. По-долу пример вмъква хипервръзка в документ с DocumentBuilder.
System::SharedPtr<Document> doc = System::MakeObject<Document>(); | |
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc); | |
builder->Write(u"Please make sure to visit "); | |
// Specify font formatting for the hyperlink. | |
builder->get_Font()->set_Color(System::Drawing::Color::get_Blue()); | |
builder->get_Font()->set_Underline(Underline::Single); | |
// Insert the link. | |
builder->InsertHyperlink(u"Aspose Website", u"http://www.aspose.com", false); | |
// Revert to default formatting. | |
builder->get_Font()->ClearFormatting(); | |
builder->Write(u" for more information."); | |
System::String outputPath = outputDataDir + u"DocumentBuilderInsertElements.InsertHyperlink.doc"; | |
doc->Save(outputPath); |
Вмъкване На Ole Обект
Ако искате Ole обект повикване DocumentBuilder.InsertOleObject
. Към този метод се подава ProgId
изрично с други параметри. По-долу пример показва как да вмъкнете Ole обект в документ.
System::SharedPtr<Document> doc = System::MakeObject<Document>(); | |
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc); | |
builder->InsertOleObject(u"http://www.aspose.com", u"htmlfile", true, true, nullptr); | |
System::String outputPath = outputDataDir + u"DocumentBuilderInsertElements.InsertOleObject.doc"; | |
doc->Save(outputPath); |
Задаване на име на файл и разширение при вмъкване на обект Ole
OLE пакетът е наследен и" недокументиран " начин за съхраняване на вграден обект, ако OLE манипулаторът е неизвестен. Ранните Windows версии като Windows 3.1, 95 и 98 имаха Packager.exe приложение, което можеше да се използва за вграждане на всякакъв вид данни в документа. Сега това приложение е изключено от Windows, но MS Word и други приложения все още го използват за вграждане на данни, ако OLE манипулаторът липсва или е неизвестен. OlePackage класът позволява достъп до OLE Package свойства. По-долу пример показва как да зададете име на файл, разширение и показвано име за OLE Package.
System::SharedPtr<Document> doc = System::MakeObject<Document>(); | |
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc); | |
System::ArrayPtr<uint8_t> bs = System::IO::File::ReadAllBytes(inputDataDir + u"input.zip"); | |
System::SharedPtr<System::IO::Stream> stream = System::MakeObject<System::IO::MemoryStream>(bs); | |
System::SharedPtr<Shape> shape = builder->InsertOleObject(stream, u"Package", true, nullptr); | |
System::SharedPtr<OlePackage> olePackage = shape->get_OleFormat()->get_OlePackage(); | |
olePackage->set_FileName(u"filename.zip"); | |
olePackage->set_DisplayName(u"displayname.zip"); | |
System::String outputPath = outputDataDir + u"DocumentBuilderInsertElements.InsertOleObjectwithOlePackage.doc"; | |
doc->Save(outputPath); |
Вмъкване HTML
Можете лесно да вмъкнете HTML низ, който съдържа HTML фрагмент или цял HTML документ в Word документ. Просто подайте този низ към метода DocumentBuilder->InsertHtml
. Една от полезните реализации на метода е съхраняването на низ HTML в база данни и вмъкването му в документа по време на Mail Merge, за да се добави форматираното съдържание, вместо да се изгражда с помощта на различни методи на конструктора на документи. По-долу пример показва Вмъквания HTML в документ с DocumentBuilder.
System::SharedPtr<Document> doc = System::MakeObject<Document>(); | |
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc); | |
builder->InsertHtml(u"<P align='right'>Paragraph right</P><b>Implicit paragraph left</b><div align='center'>Div center</div><h1 align='left'>Heading 1 left.</h1>"); | |
System::String outputPath = outputDataDir + u"DocumentBuilderInsertElements.InsertHtml.doc"; | |
doc->Save(outputPath); |
Вмъкване на хоризонтално правило в документ
Бъдиlow code пример показва как да вмъкнете хоризонтална фигура на правило в документ, като използвате метод DocumentBuilder->InsertHorizontalRule
.
// Initialize document. | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(); | |
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc); | |
builder->Writeln(u"Insert a horizontal rule shape into the document."); | |
builder->InsertHorizontalRule(); | |
System::String outputPath = outputDataDir + u"DocumentBuilderInsertHorizontalRule.doc"; | |
doc->Save(outputPath); |