Преобразуване във формат с фиксирана страница

Aspose.Words изпълнява собствен макет на страница двигател. Преди да се вгледаме в неговите спецификации, си заслужава първо да обсъдим документа на високо ниво. Когато мислят за документ, потребителите обикновено си представят редица хартиени листове, съдържащи думи, изображения, таблици и графики. Документите могат да бъдат от различни видове, като текст, електронни таблици, слайдове, CAD чертежи, flowcharts, и следователно могат да имат по същество различни подредби. Повечето приложения позволяват изпращане на документи до принтер; това е, когато потребителят може действително да видите документа.

Показване на документ в различни приложения

Различни документи за разглеждане или публикуване на приложения позволяват на потребителите да отварят (Adobe Acrobat, XPS Viewer) и понякога редактиране (Adobe InDesign) документи на специфични формати. Тези приложения обикновено произвеждат така наречените “фиксирани страници” формат документи. Такъв формат на документа описва точно къде съдържанието на документ се поставя на всяка страница. Вътрешен PDF или XPS формат съдържа описание на всяка страница, както и инструкции за рисуване, като се посочва оформлението на съдържанието на страницата. Това е подобно на образни формати, описващи къде съдържанието е показано в растер или векторна форма.

За разлика от това някои приложения за редактиране на текст не подкрепят гледането на страници с документи. Например, Microsoft Notepad поддържа много малко функции, различни от просто показване, редактиране и печат на текст. Важното наблюдение тук е, че такива приложения не могат нито да показват страниците на документа, нито да кажат на потребителя колко от тях ще бъдат отпечатани, само позволявайки да се види съдържанието на документа. Документът може да бъде записан в обикновен текстов формат и може да бъде отворен от много други приложения. С помощта на приложение, което позволява гледане на двоично съдържание на произволен файл, човек може да види какво се съхранява в документния файл.

Малко по-сложни приложения за редактиране на текст, като Microsoft WordPad, запишете документа в Rich Text Format (RTF), който поддържа повече форматиращи функции, като вмъкване на изображения, форматиране на символи, параграф маржове и разстояние. Въпреки това форматът RTF съдържа само съдържанието на документ, който няма информация за страниците.

Microsoft Word е най-напредналото приложение за редактиране на текст в Windows Днес. Той форматира файлове във формат DOCX, който описва съдържанието на документа гъвкаво и обширно, позволявайки на потребителите да определят размера на страниците, ориентацията за раздел документ, и като WYSIWYG приложение дори показва страници на документи на екрана. Въпреки това все още няма информация за начина, по който съдържанието на документа се показва на страниците, налични в документа. Документният файл описва само самото съдържание и връзката на документ обекти един с друг, заедно с някои геометрични ограничения. В резултат на това, преди да покаже документ, Microsoft Word изчислява, че самата информация. Това е мястото, където страница оформление влиза в игра.

Какво представлява подредбата на страниците

Оформление на страница с документи е структура от данни, описваща къде даден обект се намира на страници за всички обекти с документи. Освен това, тъй като обектите имат свойства, които влияят на външния им вид, като например размер на шрифта, сенки или ефекти на рисуване, трябва не само да знаете къде е обектът, но също така и каква площ(s) на страницата, която заема, и дали ще се прилага за множество страници, така че други обекти да не се припокриват със същата област(s).

Aspose.Words изпълнява функционалността на оформлението на страниците, която му позволява да произвежда всички фиксирани формати на страниците, като например PDF, XPS, и различни формати на изображения. Без оформлението на страницата информацията, съхранена във файла с фиксирана страница, нямаше да бъде налична и всички тези формати нямаше да бъдат поддържани.

Връзката между документ и оформление на страница е доста проста. Докато документ описва съдържанието, съответната страница описва геометрията на това съдържание. Забележка, че оформлението на страница не може да съществува без документ, тъй като няма да има съдържание за изчисляване на геометрията, но документ може да съществува без оформление на страница. Например, когато документ DOCX се преобразува в RTF документ, обикновено не е необходимо да се знае геометрията, тъй като нито един формат не го съхранява.

Създаване на подредба на страници

Създаване на страница оформление може да бъде скъпа процедура, както по отношение на скоростта и паметта. Това се дължи на няколко причини:

  • Документът може да съдържа голямо количество съдържание, което може да се наложи да бъде показано на хиляди страници. Геометрията на всеки обект на всяка страница трябва да бъде описана, като се използват ресурсите на паметта.
  • Документът може да има много правила, поставяйки ограничения върху геометрията. Значително време за изчисление може да бъде прекарано, като се гарантира, че всяко ограничение е изпълнено
  • Някои документи, например, NUMPAGES поле, създайте рекурсивни зависимости за бъдещи стойности на имотите, които не са на разположение по време на изчисляване. Това води до повтарящи се изчисления и се добавя в изчислителното време.

Поради горепосочените причини, Aspose.Words ще създаде оформление на страница само когато е необходимо. Типична причина за това би била искане за предоставяне на страници с документи или за получаване на стойност на полето, която зависи от информацията, налична в оформлението на страниците. По-малко очевидна причина може да е експортирането на документ в HTML. Въпреки че HTML не е формат с фиксирана страница и не описва геометрията на обектите на съдържанието, той все още поддържа изображения. Такива изображения могат да бъдат под формата на форми, създадени в Microsoft Word с текст в тях. Например, диаграма с axis етикети могат да бъдат изнесени в HTML като изображение, но преди това може да се направи Aspose.Words трябва да се направи това изображение и следователно трябва да се знае къде да се покаже етикета. Вижте примера на диаграмата по-долу:

converting-to-fixed-page-format_1

Негеометрични Настройки

В допълнение към обработката на геометрична информация, оформлението на страница също е отговорно за изчисляване на цветове и гранични стилове. В Microsoft Word, цвят на текста може да се определи като автоматичен, което означава, че изборът на цвят трябва да се основава на сянка цвят на клетката или параграф, или въз основа на цвета на страницата, където се появява текстът.

Оформлението на страницата изчислява къде ще се появи текстът и какво съдържание ще бъде предадено зад него, което позволява изчисляване на цветовете. Има и други специфични изчисления, направени от оформлението на страницата. Например хоризонталната граница в таблица зависи от това дали даден ред на таблицата е последен в колона от текст и дали е счупен през колони. Ако един ред се предава последен в колона, долната граница се използва вместо хоризонтална.

converting-to-fixed-page-format_2

В Aspose.Words Потребителят може да поиска да създаде нов макет на страницата или да актуализира съществуващ. И двете могат да бъдат извършени от update_page_layout метод, предоставен от Document Клас. Ако не съществува оформление на страница, но има нужда от нея (например, когато документът се изнася във формат с фиксирана страница), Aspose.Words автоматично ще наречем този метод. Ако обаче вече съществува оформление на страница, Aspose.Words ще използва съществуващата, за да избегне използването на ресурсите, необходими за нейното актуализиране. В този случай потребителят трябва да се обади на update_page_layout метод, за да се гарантира, че оформлението на страницата е актуализирано с модела на документа.

Динамична структура

Процесът на създаване на оформлението на страниците се състои от следните стъпки:

  • Conversion Изброяване на съдържанието на модела на документа и подготовка на съответните обекти за макет.
  • Build гонене на обекти за макет за представяне на съдържанието на документа на страници.
  • Reflow готварски обекти подреждане да отговарят на геометрията неофициално.
  • Професионално оформление обекти в фиксирана презентация страница и финализиране на цветова информация.
  • Building and reflowing of form content год. стъпка, необходима, ако документът съдържа форми с гнездено текстово съдържание.

Имайте предвид, че оформлението на страницата е динамична структура, която може да бъде частично възстановена. Това е особено необходимо, когато е невъзможно да се изчислят стойностите на полето без възстановяване на структурата на оформлението на документа. Полето може да се отнася за местоположението на обект на страница, а в същото време самата стойност на полето също е представена на страницата, засягаща местоположението на съответния обект. Макет на страница не може да бъде изграден наведнъж, тъй като стойностите на полето все още може да не са налични по време на позициониране на страница.

Помислете за типичния сценарий, когато NUMPAGES полето се появява в подножието на първата страница в документа. Стойността на това поле е общият брой страници. За да се постави полето на страница, трябва да се знае стойността му. Ако в момента се изгражда само първата страница, то общият брой страници все още не е известен. В този случай оформлението на страницата трябва да използва стойността по подразбиране и по-късно да се върне в полето и да промени стойността си според действителните изчисления. Промяната на стойността на полето обаче може да засегне съдържанието на друг документ на страница и в крайна сметка да доведе до приложението на нова страница или да премахне съществуваща страница, като по този начин се направи остаряла изчислителната стойност. Този въпрос може да бъде решен, като се даде възможност за актуализиране на съществуващото оформление на страницата.

При създаване на оформление е възможно също така да се създаде LayoutOptions свойства, които влияят върху представянето на документа на страници.

Запис във формат с фиксирана страница

След изграждането на оформлението на страницата и геометрията на обектите и позицията им на страницата се изчисляват, документът може да бъде записан във формат с фиксирана страница, поддържан от Aspose.Words. При запазване на документи във формат с фиксирана страница могат да се използват опциите за предаване, общи за всички тези формати. Те позволяват да се контролира:

  • Брой и обхват на страниците, съдържащи се в изходния документ (page_set).
  • Набор от символи, които се използват за номериране (numeral_format).
  • Метафилър (metafile_rendering_options). За повече подробности вижте Работа Windows Метафили статия.
  • Ниво на качество за рекомпресиране JPEG изображения, чиято стойност може да се различава леко, в зависимост от избрания формат за запис (jpeg_quality).
  • Оптимизация на векторната графика в Aspose.Words изход (optimize_output).
  • Графични опции при спестяване на Tiff, Png, Bmp, Jpeg, Emf формати (use_anti_aliasing, use_high_quality_rendering).
  • Запис на документа в сив мащаб (color_mode).
  • Превключване между предаване на DrawML форми и резервни форми (dml_rendering_mode).
  • Превключване между режимите на предаване на ефекти на DML (dml_effects_rendering_mode).

Примерът по-долу показва как да запишете документ във формат JPEG с помощта на save опции за метод и превод:

# Open the document
doc = aw.Document(docs_base.my_dir + "Rendering.docx")
# Save as a JPEG image file with default options
doc.save(docs_base.artifacts_dir + "Rendering.JpegDefaultOptions.jpg")

# Save document to stream as a JPEG with default options
docStream = io.BytesIO()
doc.save(docStream, aw.SaveFormat.JPEG)
# Rewind the stream position back to the beginning, ready for use
docStream.seek(0)

# Save document to a JPEG image with specified options.
# Render the third page only and set the JPEG quality to 80%
# In this case we need to pass the desired SaveFormat to the ImageSaveOptions constructor 
# to signal what type of image to save as.
imageOptions = aw.saving.ImageSaveOptions(aw.SaveFormat.JPEG)
imageOptions.page_index = 2
imageOptions.page_count = 1
imageOptions.jpeg_quality = 80
doc.save(docs_base.artifacts_dir + "Rendering.JpegCustomOptions.jpg", imageOptions)