告别媒体查询:打印完全样式的HTML内容

告别媒体查询,轻松打印完整样式的html内容!打印html时保持样式一致一直是个难题,媒体查询常常让问题复杂化。本文介绍一种无需媒体查询的简便方法。

告别媒体查询:打印完全样式的HTML内容

解决方案:使用jspdf将HTML转换为图像

我们将利用JavaScript库jspdf,将HTML内容转换为图像,再将该图像嵌入到一个打印时才显示的隐藏元素中。

HTML结构

立即学习“前端免费学习笔记(深入)”;

HTML主体包含两个主要元素:

一个包含主内容的div,id为root-container。一个隐藏的img元素,id为printed-image,位于root-container外部,用于存放jspdf生成的图像。

@@##@@

登录后复制

JavaScript代码

以下代码会在页面加载时生成图像,并提供一个打印图像的函数:

// 页面加载时生成图像$(document).ready(function() {    generateImage();});// 打印图像函数 (绑定到打印按钮)function printImage() {    window.print();}// 将内容转换为图像的函数function generateImage() {    const style = document.createElement('style');    document.head.appendChild(style);    style.sheet?.insertRule('body > div:last-child img { display: inline-block; }');    html2canvas(document.getElementById('content-to-print'), {        useCors: true,        scale: 3,        backgroundColor: '#fff',        scrollX: 0,        scrollY: 0,        windowWidth: document.documentElement.scrollWidth,        windowHeight: document.documentElement.scrollHeight    }).then(function(canvas) {        const { jspdf } = window.jspdf;        const imgData = canvas.toDataURL('image/png');        const pdf = new jspdf('p', 'mm', 'a4');        const imgWidth = 210;        const pageHeight = 285;        const imgHeight = canvas.height * imgWidth / canvas.width;        const heightLeft = imgHeight;        let position = -7;        pdf.setFillColor(255, 255, 255);        pdf.rect(0, 0, imgWidth, pageHeight, 'f');        pdf.addImage(imgData, 'png', 0, position, imgWidth, imgHeight);        $('#printed-image').prop('src', imgData);    });}

登录后复制

CSS代码

添加打印样式,隐藏主内容,打印时显示生成的图像:

/* 默认样式 */#printed-image {    display: none;}/* 打印样式 */@media print {    #root-container {        display: none !important;    }    #printed-image {        display: block !important;        margin: auto;        max-width: 100%;    }}

登录后复制

工作流程

页面加载时,HTML内容转换为图像,并存储在隐藏的img元素中。打印时,主内容隐藏,图像显示。

优势

避免了媒体查询的复杂性。样式直接嵌入图像,确保打印输出与屏幕显示一致。

通过这种方法,您可以轻松获得样式完整、一致的打印输出,无需再为媒体查询而烦恼。

告别媒体查询:打印完全样式的HTML内容

以上就是告别媒体查询:打印完全样式的HTML内容的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2640381.html

(0)
上一篇 2025年3月7日 06:17:08
下一篇 2025年3月7日 06:17:18

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 打字稿实用程序类型每个React开发人员都应该知道

    作为React开发者,我们都经历过管理props、状态或任何动态数据结构变得混乱的时刻。这时,TypeScript实用程序类型就闪亮登场了——它们是提升生产力的无名英雄!这些TypeScript的瑞士军刀通过对现有类型进行强大的转换,让我们…

    2025年3月7日
    200
  • 网络监控市场有望在2亿美元达到2美元

    市场研究公司Credulous Research®发布的最新报告《网络监控市场——全球机遇分析与行业预测(2025-2032)》显示,全球网络监控市场预计将在2032年达到39亿美元,2025年至2032年的复合年增长率为7.3%。 报告指…

    2025年3月7日
    200
  • 边缘零信任(第3部分)

    利用JSON Web密钥集扩展JWT验证 上一篇文章中,我们学习了JSON Web令牌(JWT)的概念、创建方法和验证方式。第二部分则演示了如何在简单的Express服务器中使用JWT验证中间件。本篇将深入探讨非对称加密算法,特别是RS25…

    2025年3月7日
    200
  • 使用Seerbit接受多种货币:开发人员指南

    在全球化市场中,支持多种货币对企业吸引多元化客户至关重要。允许客户使用其偏好货币支付,不仅提升用户体验,还能显著提高交易转化率。 领先的支付网关 Seerbit Seerbit 提供强大的多货币功能,使企业能够流畅地处理来自全球各地的支付。…

    2025年3月7日
    200
  • 与初学者了解JavaScript

    javascript:网络编程语言入门指南 JavaScript,通常缩写为JS,是当今最流行的编程语言之一,也是网络开发的核心技术,与HTML和CSS并驾齐驱。它最初是客户端语言,但如今已发展成为可在服务器端运行的强大工具。本文将带您了解…

    2025年3月7日
    200
  • 探索chatgpt开发的挑战和局限性

    ChatGPT:机遇与挑战并存 OpenAI研发的ChatGPT彻底改变了人机交互方式,其应用范围涵盖客户支持、内容创作等诸多领域。然而,ChatGPT的发展并非一帆风顺,仍面临诸多挑战与局限。本文将深入探讨这些问题,并提出相应的应对策略。…

    2025年3月7日
    200
  • 付款集成:使用OAuth进行安全令牌的身份验证

    Razorpay 付款集成:基于 OAuth 的安全访问 概述 本文介绍如何将 Razorpay 安全地集成到您的应用中,实现无缝的支付处理。Razorpay 支持基于 OAuth 的身份验证,允许应用安全地访问资源,无需泄露敏感凭据。我们…

    2025年3月7日
    200
  • 优化AI工作负载:性能和可伸缩性策略

    在当今的数字化浪潮中,基于云托管服务的AI工作负载已成为各行业创新的基石,从预测性分析到自然语言处理,无处不在。然而,随着企业对AI解决方案的采用日益广泛,优化性能和可扩展性变得至关重要。低效的AI工作负载可能导致成本飙升、洞察延迟以及部署…

    2025年3月7日
    200
  • 使用NextJS尾风CSS和Framer Motion建立现代投资组合

    大家好!我最近用现代Web技术构建了一个投资组合网站(4sish.vercel.app),并乐于分享我的开发经验。 技术栈: Next.js 13 App Router (类型安全TypeScript)Tailwind CSS (样式)Fr…

    2025年3月7日
    200
  • 单元测试生成器:自动化效率的软件测试

    手动编写单元测试既费时费力又容易出错。开发人员常常难以在快速迭代的开发周期中保持高测试覆盖率。单元测试生成器应运而生,它能自动化单元测试的创建过程,从而以最小的精力确保全面的代码验证。本文将探讨单元测试生成器的运作方式及其在现代软件开发中的…

    2025年3月7日
    200

发表回复

登录后才能评论