在 SAS 存储过程的 HTML 流中使用图像

2023-12-03

我正在使用 SAS STP 创建报告,我想在报告上显示图像(徽标)。好吧,这就是发生的事情:

data _null_;
    file _webout;
    put '<html>';
    put '</html>';
run;

我正在 PUTing HTML,因为我需要显示复杂的表格格式,但我没有使用%STPBEGIN & %STPEND因为这会打开一个 ODS 流,坦白说我不知道​​如何处理并且遇到了问题。不使用%STPBEGIN就是上面代码的意思。这对我来说是一个非常成功的机制。我可以用 CSS 和其他东西来展示漂亮的报告。唯一的问题是图像。一位客户最近要求在每份报告上贴上徽标。我以为这会很容易,但事实并非如此。好的,这是交易,我尝试使用<img src=" "/ >标签,我想我会使用一些相对路径,我的图像就会显示。这项技术成功了,也失败了。

  • 我使用 SAS Management Console 将图像添加到文件夹位置 并使用其相对路径“/Products/SAS Enterprise GRC/****”(不起作用)
  • 我将图像复制到 Web/Staging/*** 下的默认主题图像文件夹中,并尝试使用相对路径(不起作用)。所以我尝试使用默认主题中的其他图像。有效。

我被困住了,如何在这里使用自定义图像?


如果您的图像是静态的,您可以使用数据步骤将其嵌入到结果中,而无需将文件复制到服务器。

这样做的技巧是将图像编码为 Base64 编码,然后您可以将图像嵌入到<img src="" />使用这个神奇的符号来声明:

<img src="data:image/png;base64,...." />

您可以看到src=属性包含元数据,告诉浏览器该值包含图像数据,代表一个 png 文件(我在测试这篇文章时使用了 png 文件,您可能有 JPG/BMP 等...)并且该值是使用 base64 编码的。末尾的 4 个句点将替换为以 Base64 表示法表示的图像数据。这看起来像这样:

<img src="data:image/png;base64,iVBORw0KGgoAAAAN ... much much more base64 content here ... HSLyz+h9xy+7HbHRL83L1tv9h8+4d/+Ic/Gf8DiYav3mpqHAMAAAAASUVORK5CYII=" />

将图像转换为 Base64 很简单。您可以简单地谷歌搜索“在线base64图像转换器”,例如this one。拖放您的图像,它将为您生成 Base64 代码。

要将其纳入 sas 中的数据步骤,只需以下情况:

data _null_;
    file _webout;
    put '<html>';
    put '<img src="data:image/png;base64,iVBORw0KGgoAAAAN......etc..." />';
    put '</html>';
run;

如果您的图像特别大(比如大于~32k),您可能会在尝试从数据步骤输出它时遇到问题。我可能需要对此进行测试才能澄清。您可以通过从 SAS 中的文件读取 base64 图像并将其直接流式传输到_webout,使用类似于下面的代码:

data _null_;
  file _webout;
  infile '\path\to\base64\file.ext';
  input;
  put _infile_;
run;

如果您想变得非常棘手,您可以拍摄任何您喜欢的图像(例如 SAS 中生成的图表)并将其即时转换为 Base64,然后将其流式传输。以下是一些 SAS 代码,它将获取图像文件并将其转换为 Base64:

data _null_;
  length base64_format $20 base64_string $32767;

  infile "\your_sasdir\hi.png" recfm=n;
  file "\your_sasdir\hi.base64";
  input byte $16000. ;

  * FORMAT LENGTH NEEDS TO BE 4n/3 ROUNDED UP TO NEAREST MULTIPLE OF 4;
  format_length = 4*(lengthn(byte)/3);
  mod = mod(format_length,4);
  if mod ne 0 then do;
    format_length = format_length - mod + 4;
  end;
  base64_format = cats("$base64x",format_length,".");

  base64_string = putc(cats(byte), base64_format);
  put base64_string;
run;

这是我用来测试的图像:

enter image description here

转换后,Base64 表示形式应如下所示:

iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABaSURBVDhP5YxbCsAgDAS9/6XTvJTWNUSIX3ZAYXcdGxW4QW6Khw42Axne81LG0shlRvVVLyeTI2aZ2fcPyXwPdBI8B999NK/gKTaGyxaMX8gTJRkpyREFmegBTt8lFJjOey0AAAAASUVORK5CYII=

我将看看是否能找到一种方法来简化此操作,因为这是我们在工作中经常做的事情。


EDIT :有趣的是,SAS9.4似乎支持直接使用ODS HTML5连同inline选项。请参阅文档here.

也可以看看这个帖子Don Henderson 的文章提供了一种类似的方法来解决这个问题。感谢 Vasilij 提供的链接。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 SAS 存储过程的 HTML 流中使用图像 的相关文章

  • C# 计算图像差异

    我怎样才能生成一个System Drawing Image包含其他两个图像的像素之间的差异 类似的东西确实如此 但是用 C 编写 The 算法 https github com Phrogz context blender blob mas
  • 让 PHP 页面输出静态图像

    我希望 PHP 能够发送 3 张图像中的 1 张 具体取决于 GET 范围 我现在有三个独立的 PNG 图像 并且希望 PHP 脚本将这些图像嵌入其中 然后返回指定的图像 所以 我想要一个 PHP 脚本而不是 3 个图像 这可能吗 我不需要
  • Image.FromStream() 方法返回 Invalid Argument 异常

    我正在从智能相机成像器捕获图像 并通过套接字编程从相机接收字节数组 NET 应用程序是客户端 相机是服务器 问题是我在运行时收到 System InvalidArgument 异常 private Image byteArrayToImag
  • Go 中的 WebP 编码器/解码器

    是否有一个完整的 WebP 编码器和解码器与当前每周 或可分叉 兼容 它的速度与标准 png 相当吗 这个人在 GitHub 上有一个包 其中包含 WebP 的编码器和解码器 https github com chai2010 webp h
  • Google API 返回的 Google+ 个人资料图片网址是否会发生变化?

    因此 我使用 Google API 通过用户的 user id 来获取人们的个人资料图片 Google API 返回如下 JSON image url https lh5 googleusercontent com OGjgCn9fCPk
  • 使用 Angular JS ng-src 的后备(默认)图像

    我正在尝试使用从模式返回的数据设置图像源 这是在 ng repeat 循环内 div div span table tr td class imgContainer img td tr table span div div
  • 使应用程序背景适合不同设备的最佳方法

    因此 我希望通过一些漂亮的背景图像等来为我的应用程序增添一点趣味 但我很好奇的是如何确保不同的机器人正确渲染 我将在文本后面设置背景 并且我需要确保它们对于每个不同的屏幕尺寸和分辨率具有相同的尺寸和位置 有这方面好的教程吗 Thanks E
  • ABSMIDDLE 在 Firefox 和 Chrome 上的工作方式不同吗?

    我有一个图标图像和文本 如下所示 一切的代码来源是 img src align left My Title Here 问题在于 与 Firefox 相比 Chrome 中的图标没有与标题垂直对齐 我觉得absmiddle根本不起作用 有什么
  • 检测植物图片中的所有分支

    我想知道有什么可以检测下图中的所有绿色树枝 目前我开始应用 Frangi 过滤器 options struct FrangiScaleRange 5 5 FrangiScaleRatio 1 FrangiBetaOne 1 FrangiBe
  • 移动/调整窗口大小时闪烁

    我开发了一个显示 jpeg 图像的应用程序 它可以显示 4 个图像 屏幕的每个象限各一个 为此 它使用了 4 个窗口 窗口没有边框 框架 也没有标题栏 当加载新图像时 窗口大小会根据新图像进行调整 然后显示该图像 尤其是当窗户做得较大时 经
  • 找到图像特征宽度的正确方法和Python包

    输入是一个在黑色背景上带有彩色 抱歉 垂直线的光谱 给定该带的近似 x 坐标 用 X 标记 我想找到该带的宽度 我对图像处理不熟悉 请引导我前往正确的方法图像处理和Python图像处理package也能起到同样的作用 我认为 PIL Ope
  • 使用 openCV 对图像中的子图像进行通用检测

    免责声明 我是计算机视觉菜鸟 我看过很多关于如何在较大图像中查找特定子图像的堆栈溢出帖子 我的用例有点不同 因为我不希望它是具体的 而且我不确定如何做到这一点 如果可能的话 但我感觉应该如此 我有大量图像数据集 有时 其中一些图像是数据集的
  • 图像随机损坏(但刷新后加载)并显示“资源解释为图像但使用 MIME 类型 text/html 传输”

    我目前正在开发一个简单的 php 网站 问题是 我的整个网站中的图像 发生在所有 php 文件中 随机损坏并显示错误资源解释为图像 但以 MIME 类型 text html 传输但是 如果我尝试多次刷新页面 可以再次加载图像并且错误消失 我
  • 将 SVG 文件转换为多个不同大小的 PNG 文件

    我有一个 SVG 格式的徽标图像 我想知道是否有办法生成多个不同大小的 png 文件 例如 我设置了 20 个不同的宽度和高度 它会生成 20 个 PNG 文件 如果我必须一次处理 5 张图像也没关系 我已经安装了 illustrator
  • 如何在MATLAB中显示由三个矩阵表示的图像?

    我有 3 个相同大小的 2D 矩阵 假设 200 行和 300 列 每个矩阵代表三种 基本 颜色 红色 绿色和蓝色 之一的值 矩阵的值可以在 0 到 255 之间 现在我想组合这些矩阵以将它们显示为彩色图像 200 x 300 像素 我怎样
  • 使用pdfbox从pdf中提取图像

    我正在尝试使用 pdfbox 从 pdf 中提取图像 示例 pdfhere http www ignou ac in upload questionpaper CS 74 PDF 但我只得到空白图像 我正在尝试的代码 public stat
  • 响应式 CSS 图像锚点标签 - 图像地图样式

    我一直在开发一个响应式网站 并且在图像映射方面遇到了一些问题 图像映射似乎不适用于基于百分比的坐标 经过一番谷歌搜索后 我发现了一个 JS 解决方法 http mattstow com experiment responsive image
  • 将一幅图像合成到另一幅图像上时,RMagick 透明度不起作用

    在下面的代码中 我尝试在一些山脉的图像上覆盖一个透明的正方形 我认为它会起作用 但是通过设置background color none 它不会使图像透明 结果是左上角有一个黑色方块 所需的结果是黑色方块应该是透明的 require open
  • 帮助将图像从 Servlet 获取到 JSP 页面 [重复]

    这个问题在这里已经有答案了 我目前必须生成一个显示字符串文本的图像 我需要在 Servlet 上制作此图像 然后以某种方式将图像传递到 JSP 页面 以便它可以显示它 我试图避免保存图像 而是以某种方式将图像流式传输到 JSP 自从我开始寻
  • SwiftUI 全屏图像背景

    我想在背景中显示全屏图像 我已经实现了这个 struct LoginView View var body some View VStack Spacer Text Hallo Text Hallo2 Text Hallo2 Text Hal

随机推荐