Как я могу разместить изображение в определенной области страницы в моем документе, используя Mako SDK? - PullRequest
0 голосов
/ 26 февраля 2019

Я хочу использовать изображение для вспашки, заполнения и области моей страницы в моем документе.

Я видел, что есть IDOMImage и IDOMImageBrush, но я не уверен, как использовать их для масштабирования и разбиения моего исходного изображения.

Как можноЯ делаю это с Mako SDK?

1 Ответ

0 голосов
/ 26 февраля 2019

Мако может размещать изображение в определенной области, а также переворачивать альтернативные плитки, чтобы создать рисунок.Используйте масштабное преобразование, чтобы контролировать его размер.Этот код показывает вам, как.

// Declare an output pointer
IOutputPtr output;

// Create new assembly, document and page
IDocumentAssemblyPtr assembly = IDocumentAssembly::create(jawsMako);
IDocumentPtr document = IDocument::create(jawsMako);
IPagePtr page = IPage::create(jawsMako);

// Add the page to the document, and the document to the assembly
document->appendPage(page);
assembly->appendDocument(document);

// Create a fixed page to work with
double pageWidth = 10 * 96.0;
double pageHeight = 20 * 96.0;
IDOMFixedPagePtr fixedPage = IDOMFixedPage::create(jawsMako, pageWidth, pageHeight);

// Load the image file into an image
IDOMImagePtr image = IDOMJPEGImage::create(jawsMako, IInputStream::createFromFile(jawsMako, imageFilePath));

// Find its dimensions
IImageFramePtr frame;
image->getFirstImageFrame(jawsMako, frame);
double imageWidth = frame->getWidth();
double imageHeight = frame->getHeight();

// Create a rect to hold the image
FRect printBounds(0.0, 0.0, pageWidth, pageHeight);

// Create a transformation matrix to scale the image, taking into account the page proportions
// Scaling factor is a float ranging from 0.0 to 1.0
double pageWidthHeightRatio = pageWidth / pageHeight;
FMatrix transform;
transform.scale(scalingFactor, scalingFactor * pageWidthHeightRatio);

// Stick the image in a brush
IDOMBrushPtr imageBrush = IDOMImageBrush::create(jawsMako, image, FRect(), printBounds, transform, 1.0, eFlipXY);

// And now create a path using the image brush
IDOMPathNodePtr path = IDOMPathNode::createFilled(jawsMako, IDOMPathGeometry::create(jawsMako, printBounds), imageBrush);

// Add the path to the fixed page
fixedPage->appendChild(path);

// This becomes the page contents
page->setContent(fixedPage);

// Write to the output
output = IPDFOutput::create(jawsMako);
output->writeAssembly(assembly, outputFilePath);

Используя этот код с этим изображением:

Original Image

Произведено это обработанное изображение:

Tiled Image

Код использует перечисление eTileXY.Доступны следующие варианты листов:

eTilingMode Перечисление типа режима листов.

eNoTile
Нет листов.Если область для рисования больше, чем изображение, просто нарисуйте изображение один раз (в месте, указанном в области просмотра кисти) и оставьте оставшуюся область прозрачной.

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

eFlipX
Изображение мозаики, так что чередующиеся столбцы плиток переворачиваются горизонтально.Квадратное изображение, состоящее из одной диагональной линии между противоположными углами, будет создавать шевроны, проходящие горизонтально по всей площади, когда выложены плиткой в ​​этом режиме.

eFlipY
Изображение мозаики, которое чередует ряды плитокперевернуты вертикально.Квадратное изображение, состоящее из одной диагональной линии между противоположными углами, будет создавать шевроны, проходящие вертикально по всей площади, когда выложены плиткой в ​​этом режиме.переворачивается горизонтально И чередующиеся ряды плиток переворачиваются вертикально.В этом режиме квадратное изображение, состоящее из одной диагональной линии между противоположными углами, будет создавать сетку из квадратов, сбалансированных по их точкам.

...