在 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 流中使用图像 的相关文章

  • WPF 中图像的淡入淡出

    当我更改幻灯片放映等图像源时 如何实现淡入和淡出图像 我的图像从本地和网络加载 并且其数量是可变的 谢谢 您可以编写一个扩展方法 通过动画显示图像来淡出图像Opacity属性设置为 0 然后设置Source属性并最终将不透明度动画回到 1
  • 如何通过 md5 比较图像?

    该方法是否比较图像的像素值 我猜它不会起作用 因为它们的尺寸彼此不同 但如果它们相同但格式不同怎么办 例如 我截图并保存为 jpg另一个并保存为 gif MD5哈希是实际的二进制数据 因此不同的格式将具有完全不同的二进制数据 因此 要使 M
  • Office 2010 中的 SAS DDE 问题

    当我运行 Office 2007 时 我的 SAS DDE 脚本可以很好地填充 保存并关闭 Excel 文件 我最近更新到 Office 2010 总体工作正常 但 Excel 在保存对话框中停止 我必须手动单击 保存 而以前我不需要这样做
  • 不加载隐藏图像

    我的网站上有一堆隐藏图像 它们的容器 DIV 具有 style display none 根据用户的操作 某些图像可能会通过 JavaScript 显示 问题是我的所有图像都是在打开页面时加载的 我想通过仅加载最终可见的图像来减轻服务器的压
  • Python绕相机轴旋转图像

    假设我有一个图像 是在对某些原始图像应用单应性变换 H 后获得的 未显示原始图像 将单应性 H 应用于原始图像的结果是该图像 我想围绕合适的轴 可能是相机所在的位置 如果有的话 将此图像旋转 30 度以获得此图像 如果我不知道相机参数 如何
  • Django:ImageField 需要文件路径还是实际的图像对象?

    Running Windows 7 Python 3 3 Django 1 6 我对如何将图像存储为 Django 数据库中表的一部分感到困惑 有一个领域叫做ImageField 这是Docs https docs djangoprojec
  • 加载远程图像

    在 Android 中 最简单的方法是什么 从远程服务器加载图像 将其显示在 ImageView 中 这是我在应用程序中实际使用的方法 我知道它有效 try URL thumb u new URL http www example com
  • Image.Save 异常“GDI+ 中发生一般错误。”保存到 MemoryStream 时

    我有一个服务器客户端应用程序 我想从服务器获取屏幕截图 但在线bitmap Save ms System Drawing Imaging ImageFormat Png 我得到这个例外 A generic error occurred in
  • Python Flask 不更新图像[重复]

    这个问题在这里已经有答案了 这里有一些关于图像的 Flask 问题 但没有一个能解决我的问题 我有一个应用程序可以创建图像 保存它 然后显示它 一次 它应该多次执行此操作 每次更改图像时 它应该加载新图像 它不是 它只显示与其显示的文件名关
  • 如何选择图像插值方法? (Emgu/OpenCV)

    Emgu OpenCV的 net包装器 提供的图像调整大小功能可以使用四种插值方法中的任意一种 http www emgu com wiki files 1 4 0 0 html 596dd03d 301e d3c6 4c53 c42855
  • C# 中直接从 URL 获取图像尺寸

    我正在尝试使用以下代码直接从网络上获取图片的尺寸 string image http www hephaestusproject com csharp3 png byte imageData new WebClient DownloadDa
  • 将 SAS 中的三次样条有效地拟合到特定的对象网格

    我有一个数据集mydat具有以下变量 MNES IV 0 84 0 40 0 89 0 34 0 91 0 31 0 93 0 29 0 95 0 26 0 98 0 23 0 99 0 22 1 00 0 22 1 02 0 20 1 0
  • 在电子邮件中嵌入背景图像

    我正在尝试使用电子邮件中的嵌入图像作为背景图像 我有以下代码来嵌入它 LinkedResource backgroundLink new LinkedResource background gif backgroundLink Conten
  • 从 URL 任何文件类型创建图像

    我知道imagecreatefromgif https www php net manual en function imagecreatefromgif php imagecreatefromjpeg https www php net
  • 如何将 SD 卡图像添加到 coverflow?

    Here is my coverflow with drawables This is my Image Adapter Code The Constant IMAGE RESOURCE IDS private static final L
  • 去除图像背景并提取图像中的对象

    I know that there are many threads here about this issue but I m not able to solve my problem with those answers I tried
  • 如何使用 WebAPI 处理图像

    问题 将图像发布 获取到我的服务有哪些不同的方法 我想我可以在 JSON 中使用 Base 64 文本 也可以保持原生二进制形式 我的理解是 通过将图像转换为文本 包大小会显着增加 如果我发送图像 从 Web 表单 从本机客户端 从另一个服
  • 从twitter api实体参数php获取图像url

    我正在尝试通过实体参数使用 php 获取并显示在推文中发布的图像 我的 url 中有 include entities 可以看到返回的 json 中的实体 在我的 foreach 循环中 我正在执行以下操作 foreach results
  • iOS:从非图像数据生成图像(Godus,如风景)

    所以看到图像后Godus http www kickstarter com projects 22cans project godus我想知道如何生成简单的 非交互式的 2D 图像 with 不同高度或层数的颜色不同就像下面的图片一样 我只
  • 调整离子卡中的图像大小

    我想显示一组图像 并在下面说明 我选择使用 Ionic 卡 我得到这个结果 第一张图片 虽然我想保留现在的相同布局 并添加描述 这是我的代码

随机推荐