print-js打印时的样式设置问题?

我用的print-js设置样式不起作用,有懂的没?
我就是想打印的时候class为printObj的宽度为700px,下面的不起作用,应该怎么写?

const style = `@page {margin:20mm 10mm} @media print{ .printObj {    width: 700px;  }}`//打印时去掉眉页眉尾
  setTimeout(()=>{
    printJS({
      printable: 'printObj',// 标签元素id
      type: 'html',
      header: '', // 标题,可自行添加
      targetStyles: ['*'],
      style
    });
  },500)
阅读 847
avatarAI BotBETA
你的代码中已经包含了基本的样式设置,但可能存在一些问题导致样式没有正确应用。以下是一些可能的解决方案和修改建议:

1. **确保选择器正确**:
   确保 `.printObj` 是你想要打印的元素的正确类名,并且该元素在 DOM 中存在。

2. **CSS 样式优先级**:
   有时打印样式可能会被其他样式覆盖。尝试使用 `!important` 来提高样式优先级:

const style = @page {margin:20mm 10mm} @media print{ .printObj { width: 700px !important; }};


3. **检查其他 CSS 规则**:
检查是否有其他 CSS 规则(可能在其他样式表中)在打印时覆盖了 `.printObj` 的宽度设置。

4. **确保 `targetStyles` 包含所有需要的样式**:
你已经通过 `targetStyles: ['*']` 指定了包含所有样式,这通常应该足够。但如果存在特定作用域的问题,可能需要更精确地指定样式表或类。

5. **浏览器兼容性**:
不同的浏览器对打印样式的支持可能有所不同。确保在多个浏览器中测试你的打印功能。

6. **调试打印样式**:
使用浏览器的开发者工具(通常可以通过按 F12 打开),在打印预览模式下检查 `.printObj` 元素的计算样式,看看宽度是否被正确应用。

如果以上方法仍然无法解决问题,可能需要更详细地检查你的 HTML 和 CSS 代码,或者考虑是否有其他 JavaScript 代码干扰了打印样式的应用。
1 个回答

vue-print-js 默认会扫描当前 HTML 结构所用的样式表,这可能会导致一些样式丢失。你可以通过设置 scanStyles: false 来禁用样式扫描,并使用自定义的样式字符串。

方法一:保留 targetStyles:

如果你希望保留页面上的所有样式,可以尝试保留 targetStyles: ['*'],但确保你的自定义样式在所有其他样式之后应用。

const style = `@page { margin: 20mm 10mm; } @media print { .printObj { width: 700px; } }`;

setTimeout(() => {
  printJS({
    printable: 'printObj', // 标签元素id
    type: 'html',
    header: '', // 标题,可自行添加
    targetStyles: ['*'],
    style: style,
    scanStyles: false // 禁用样式扫描
  });
}, 500);

方法二:去掉 targetStyles:

如果你只想应用自定义样式,可以去掉 targetStyles,这样只会应用你在 style 中定义的样式。

const style = `@page { margin: 20mm 10mm; } @media print { .printObj { width: 700px; } }`;

setTimeout(() => {
  printJS({
    printable: 'printObj', // 标签元素id
    type: 'html',
    header: '', // 标题,可自行添加
    style: style,
    scanStyles: false // 禁用样式扫描
  });
}, 500);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏