在打印介质中加载外部图像

谢尔盖·卢金(Sergey Lukin)

标题仅在打印页面时才在其右侧具有图像。我声明了以下样式表:

@media print {
  h1::after {
    content: url( IMAGE_URL_HERE );
    position: absolute;
    top: 0;
    right: 0;
  }
}

问题在于,图像不会出现在任何浏览器的打印预览中。但是,如果我关闭并重新打开了打印预览对话框,则图像将看起来很好。

您可以尝试自己复制它:http : //jsbin.com/gevefivi

我做错了什么吗?还是预期的行为?

更新:我认为这与引擎的打印布局渲染中的竞争状况有关,因为当我引用本地图像时,它始终显示在“打印预览”中并且可以很好地打印。

更新:看起来打印引擎确实不会等待content: url()加载外部资源,而是会生成PDF文件进行预览,这就是如果图像获取需要一些时间才能完成的原因,因此那里没有图像。但是它确实发送HTTP请求,并在下次将其保存在本地。这样可以解释为什么第二次打开“打印预览”时它通常可以正常工作的原因。

我使用以下PHP文件作为外部资源对其进行了测试:

<?php

sleep(5);

// Create a blank image and add some text
$im = imagecreatetruecolor(120, 20);
$text_color = imagecolorallocate($im, 233, 14, 91);
imagestring($im, 1, 5, 5,  'A Simple Text String', $text_color);

// Set the content type header - in this case image/jpeg
header('Content-Type: image/jpeg');
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

// Output the image
imagejpeg($im);

// Free up memory
imagedestroy($im);

它仅在5秒钟内返回图像。要重现此问题,请确保上面的PHP文件位于本地服务器上,或者最糟糕的是位于本地网络中。引用它,content: url()然后打开“打印预览”对话框。您将看不到图像。关闭对话框。打开对话框,您仍然看不到图像。等待2-3秒。打开它,您将看到提取和缓存的图像。如果删除该sleep(5);行,则应该在第一次打开“打印预览”对话框时看到该图像。

仍然渴望知道这是一个错误还是这是预期的行为,以及目前是否有可行的解决方案。

谢尔盖·卢金(Sergey Lukin)

经过数小时的试验,我得出的结论是,截至今天,Web浏览器只是在呈现可打印文档之前,不等待特定于打印的样式表中指定的任何外部资源被完全下载。

因此,似乎在页面的打印版本中显示外部资源的唯一方法是至少在用户决定打印该页面之前至少下载它们(通过html标签,屏幕样式表或javascript,实际上并不重要)。

而且,似乎这不是错误,而是当前主要供应商接受的标准。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章