javascript - 将整个 HTML 文档下载为 PDF 文件
问题描述
我尝试通过 React 应用程序中的html2PDF函数下载特定的 html 文档。这是我的代码:
import React, { FunctionComponent, useEffect, useState } from "react";
import { Grid, CircularProgress } from "@material-ui/core";
import { getUserExamResult } from "@containers/dashboard/users/websiteUsers/tools/api";
import html2PDF from "jspdf-html2canvas";
export interface UserExamFullResultProps {
data: any;
}
const UserExamFullResult: FunctionComponent<UserExamFullResultProps> = ({
data,
}) => {
const [examResultHtml, setExamResultHtml] = useState();
useEffect(() => {
(async () => {
try {
const result = await getUserExamResult(
data?.userProfileId,
data?.examId,
{}
);
setExamResultHtml(result?.resultPage);
} catch (err) {}
})();
}, []);
useEffect(() => {
const targetElement = document.getElementById("exam-result");
if (targetElement) {
targetElement.innerHTML = examResultHtml;
}
}, [examResultHtml]);
const handleExamResultDownload = () => {
const element = document.getElementById("exam-result");
html2PDF(element, {
jsPDF: {
format: "a4",
},
imageType: "image/jpeg",
output: "./pdf/generate.pdf",
});
};
return (
<>
{examResultHtml ? (
<Grid container direction="column" alignItems="center" justify="center">
<Tooltip color="action" title="دانلود نتیجهی کامل" placement="right">
<IconButton onClick={handleExamResultDownload}>
<GetApp/>
</IconButton>
</Tooltip>
<div id="exam-result"></div>
</Grid>
) : (
<Grid
style={{ width: "100%", height: "500px" }}
container
justify="center"
alignItems="center"
>
<Grid item style={{ textAlign: "center" }}>
<CircularProgress />
</Grid>
</Grid>
)}
</>
);
};
export default UserExamFullResult;
我之前提到的特定 HTML 文档来自 API 并显示在此链接中,而损坏的输出 PDF 文件显示在此链接中。如您所见,PDF 文件图像未加载且分页不合适。
解决方案
推荐阅读
- php - 在 Laravel 中创建用户表
- iot - 用于设备的 MQTT 通信,对于 PubSub 数据,RabbitMQ 或 Azure ServiceBus for IotConnect 哪个是更好的选择?
- python - 如何确定 Python 函数采用哪些参数?
- sqlite - 有没有办法让 max 函数忽略 sqlite 列中的空值?
- elasticsearch - 尽管使用了 dfs_query_then_fetch,Elsaticsearch 6.3.1 在云和本地提供了不同的结果。使用python的elasticsearch包查询
- c# - 以编程方式欺骗 MAC ID
- android - 在 Retrofit 中区分 writeTimeout、readTimeout 和 connectTimeout?
- angular - Angular 2+:当搜索是共享组件时在 json 数据中搜索
- json - json - 如何获取 json 到数组
- java - com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:无法删除或更新父行:外键约束失败