c++ - IJawsRenderer() 抛出的异常

标签 c++ pdf xps mako-sdk

我正在使用 Mako SDK 和 IJawsRenderer::render() 来渲染所有带有 IDOMImageBrush 填充的 IDOMPathNode。当我这样做时,渲染器会为某些节点抛出错误 2000 异常,但不是全部。可能是什么原因?

IDOMBrushPtr pBrush;
pPath->getFill(pBrush);
if (pBrush)
{
    IDOMBrush::eBrushType fillStyle = pBrush->getBrushType();
    switch (fillStyle)
    {
    case IDOMBrush::eImage:
    {
        IJawsRendererPtr renderer = IJawsRenderer::create(jawsMako);
        IDOMImagePtr renderedImage;
        renderedImage = renderer->render(pNode, 800); // This is where the exception will eventually happen.
        break;
    }
    default:
        break;
    }
}

最佳答案

可能是因为传递给渲染器的路径太小而抛出异常。渲染器的下限为 1pt x 1pt(或 1.33 x 1.33 Mako 单位)。修改您的代码以检查节点的边界框是否足够大,例如:

const double minimumRenderSize = 96.0 / 72.0;
...
IDOMBrushPtr pBrush;
pPath->getFill(pBrush);
FRect box;
pPath->getBounds(box);
box.dX = box.dX < minimumRenderSize ? minimumRenderSize : box.dX;
box.dY = box.dY < minimumRenderSize ? minimumRenderSize : box.dY;
if (pBrush)
{
    IDOMBrush::eBrushType fillStyle = pBrush->getBrushType();
    switch (fillStyle)
    {
    case IDOMBrush::eImage:
    {
        IJawsRendererPtr renderer = IJawsRenderer::create(jawsMako);
        IDOMImagePtr renderedImage;
        renderedImage = renderer->render(pNode, 800, IDOMColorSpacesRGB::create(jawsMako), box);
        break;
    }
    default:
        break;
    }
}

关于c++ - IJawsRenderer() 抛出的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55593790/

相关文章:

windows - 如何打印 XPS 文件?

c++ - 有没有可以查看XPS文档的C++代码?

c# - 使用 C# 检测和操作 XPS 文档中使用的字体

c++ - 在构造函数中分配 std::string_view 类型是个好主意吗?

c++ - GDB Dis-Flavor 设置为 Intel,但显示 AT&T 风格

ios - PDFKit PDFThumbnailView 缩略图不居中

带有搜索、注释和书签的 IOS PDF 阅读器

c++ - Visual Studio 2008(或更高版本)使用哪种 C++?

C++ 伪随机数生成器线程安全吗?

image - 我可以在 R 中将图像绘制为 PDF 文件吗?