javascript - React 如何在组件 View 中打印 PDF 文件

标签 javascript reactjs ecmascript-6

我想了解如何打印在 React 组件内呈现的 PDF 文档。目前,我的事件处理程序没有相应地触发以启用打印。

import React, { Component } from "react";

const pdfFile =
  "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf";

export default class PDFViewer extends Component {
  handlePrint = () => {
    // is getElementById an anti pattern even if I'm not modyfying the DOM?
    const node = document.getElementById("print-file");
    node.contentWindow.focus();
    node.contentWindow.print();
  };

  render() {
    return (
      <>
        <h2>PDF Viewer Component</h2>
        <object data={pdfFile} type="application/pdf">
          <iframe
            title="pdf document"
            id="print-file"
            src={`https://docs.google.com/viewer?url=${pdfFile}&embedded=true`}
          />
        </object>
        <button onClick={this.handlePrint}>Print</button>
      </>
    );
  }
}

我在 handlePrint() 中做错了吗?

我有一个 code sandbox在触发 handlePrint()

时,您可以在其中详细查看错误

最佳答案

您不能从另一个域打印 iframe 或窗口,正如@Trevor Reid 所说,您应该在前端跨域策略以及服务器中定义。

为您提供一些解决方案,您可以打开加载 PDF 的弹出窗口和导航器,或者打开可以下载的 pdf,或者直接下载文件。

我可以建议的代码是下一个:

handlePrint = (event) => {
  event.preventDefault();
  window.open(pdfFile, "PRINT", "height=400,width=600");
};

另外,实现起来有点困难的是使用下面的库: https://github.com/mozilla/pdf.js/blob/master/web/pdf_print_service.js

希望对你有帮助

关于javascript - React 如何在组件 View 中打印 PDF 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55502024/

相关文章:

javascript - 如何从字符串中获取键和值

javascript - 使用 javascript 动态加载元素的性能?

javascript - React Chrome 选项卡扩展不适用于 WebPack Dev Server

reactjs - react : Passing Props to Descendants

javascript - 在 Map.prototype.forEach() 中获取索引

javascript - 如何更新本地存储阵列 Angular 7 中的值

javascript - 使用 jQuery 更改单选按钮选择上的标签文本

javascript - Node js找不到响应主体http createserver

javascript - React React setState 第一次尝试时未更新

javascript - 有人用过 ECMAScript 代理吗?