Оформление форм Отдельно от документа

При обработке документов общей задачей является извлечение всех изображений, найденных в документе, и экспорт их во внешнее место. Эта задача становится простой с Aspose.Words API, который уже обеспечивает функциональность для извлечения и сохранения данных изображения. Тем не менее, иногда вы можете аналогично извлечь другие типы графического контента, которые представлены другим типом объекта рисования, например, текстовый ящик, содержащий абзацы, формы стрелок и небольшое изображение. Не существует простого способа отображения этого объекта, поскольку он представляет собой комбинацию отдельных элементов контента. Вы также можете столкнуться с случаем, когда содержимое было сгруппировано в объект, который выглядит как одно изображение.

Aspose.Words Предоставляет функциональность для извлечения этого типа контента таким же образом, как вы можете извлечь простое изображение из формы. В этой статье описывается, как использовать эту функциональность для отображения форм независимо от документа.

Типы форм в Aspose.Words

Все содержимое в слое чертежа документа представлено Shape или GroupShape Узел в узле Aspose.Words Модуль объекта документаDOM). Таким контентом могут быть текстовые поля, изображения, автоформы, объекты OLE и т.д. Некоторые поля также импортируются в качестве форм, например INCLUDEPICTURE поле.

Простое изображение представлено a Shape узел ShapeType.IMAGE. Этот узел формы не имеет дочерних узлов, но данные изображения, содержащиеся в этом узле формы, могут быть доступны через Shape.image_data собственность. С другой стороны, форма также может состоять из многих детских узлов. Например, форма текстового ящика, которая представлена ShapeType.TEXT_BOX свойство, может состоять из множества узлов, таких как Paragraph и Table. Большинство форм могут включать Paragraph и Table Узлы блочного уровня. Это те же узлы, что и в основном теле. Формы всегда являются частями какого-либо абзаца, либо включены непосредственно в строку, либо прикреплены к Paragraph, но “плавающий” в любом месте страницы документа.

rendering-shapes-separately-from-a-document_1

Документ также может содержать формы, которые сгруппированы вместе. Groupможно включить в Microsoft Word путем выбора нескольких объектов и щелчка “Group” в меню правого клика.

rendering-shapes-separately-from-a-document_2

В Aspose.Words, Эти группы форм представлены GroupShape Узел. Они также могут быть использованы таким же образом, чтобы визуализировать всю группу.

rendering-shapes-separately-from-a-document_3

Формат DOCX может содержать специальные типы изображений, такие как диаграммы или диаграммы. Эти формы также представлены через Shape узел Aspose.Words, Это также обеспечивает аналогичный метод для визуализации их в виде изображений. По замыслу, форма не может содержать другую форму в детстве, если только эта форма не является изображением.ShapeType.IMAGE). Например, Microsoft Word Не позволяет вставить текстовый ящик в другой текстовый ящик.

Типы формы, описанные выше, обеспечивают специальный метод для рендеринга форм через ShapeRenderer класс. Примером этого является ShapeRenderer Класс извлекается для Shape или GroupShape через get_shape_renderer методом или путем прохождения Shape Для строителя этого ShapeRenderer класс. Этот класс обеспечивает доступ к членам, что позволяет придать форму следующим элементам:

  • Файл на диске
  • Поток

Отображение в File или Stream

The save Способ обеспечивает перегрузки, которые отображают форму непосредственно в файл или поток. Обе перегрузки принимают пример ImageSaveOptions класс, что позволяет определить варианты рендеринга формы. Это работает так же, как и Document.save метод. Несмотря на то, что этот параметр необходим, вы можете передать нулевое значение, указав, что нет пользовательских опций.

Форма может быть экспортирована в любом формате изображения, указанном в SaveFormat перечисление. Например, изображение может быть визуализировано как растровое изображение, такое как JPEG, путем указания SaveFormat.JPEG перечисление, или как векторное изображение, такое как ЭМП, путем указания SaveFormat.EMF.

Приведенный ниже пример кода иллюстрирует отображение формы изображения ЭМП отдельно от документа и сохранение на диск:

r = shape.get_shape_renderer()

# Define custom options which control how the image is rendered. Render the shape to the JPEG raster format.
imageOptions = aw.saving.ImageSaveOptions(aw.SaveFormat.EMF)
imageOptions.scale = 1.5
        
# Save the rendered image to disk.
r.save(docs_base.artifacts_dir + "TestFile.RenderToDisk_out.emf", imageOptions)

Приведенный ниже пример кода иллюстрирует преобразование формы в изображение JPEG отдельно от документа и сохранение в потоке:

r = shape.get_shape_renderer()

# Define custom options which control how the image is rendered. Render the shape to the vector format EMF.
imageOptions = aw.saving.ImageSaveOptions(aw.SaveFormat.JPEG)
        
# Output the image in gray scale
imageOptions.image_color_mode = aw.saving.ImageColorMode.GRAYSCALE

# Reduce the brightness a bit (default is 0.5f).
imageOptions.image_brightness = 0.45
        
stream =  io.FileIO(docs_base.artifacts_dir + "TestFile.RenderToStream_out.jpg", "w+b")

# Save the rendered image to the stream using different options.
r.save(stream, imageOptions)

# Close the stream
stream.close()

The ImageSaveOptions Класс позволяет указать множество опций, которые контролируют, как визуализируется изображение. Описанная выше функциональность может быть применена таким же образом к GroupShape и Shape Узлы.

Изображение в форме

The Shape Класс представляет объекты в слое рисунка, такие как AutoShape, текстовое поле, свободная форма, объект OLE, управление ActiveX или изображение. Используя Shape Вы можете создавать или изменять формы в Microsoft Word Документ. Важным свойством формы является ее shape_type. Формы разных типов могут иметь разные возможности в документе Word. Например, только изображения и формы OLE могут иметь изображения внутри них, в то время как большинство форм могут иметь только текст.

В следующем примере показано, как визуализировать изображение формы на изображение JPEG отдельно от документа и сохранить его на диске:

# Save the rendered image to disk.
shape.get_shape_renderer().save(docs_base.artifacts_dir + "TestFile.RenderShapeImage.jpeg", None)

Восстановление размера формы

The ShapeRenderer Класс также предоставляет функциональность для извлечения размера формы в пикселях через get_size_in_pixels метод. Этот метод принимает два поплавковых (единых) параметра – масштаб и DPI, которые используются при расчете размера формы при рендеринге формы. Метод возвращает Size объект, который содержит ширину и высоту расчетного размера. Это полезно, когда необходимо заранее знать размер отрисованной формы. The size_in_points свойство возвращает размер формы, измеренный в точках. Результатом является SizeF Объект, содержащий ширину и высоту. Также вы можете использовать bounds_in_points свойство получать реальные границы формы.