如何在“路由器插座”内生成 PDF 内容?

Posted

技术标签:

【中文标题】如何在“路由器插座”内生成 PDF 内容?【英文标题】:How to generate PDF of contents inside the 'router-outlet'? 【发布时间】:2022-01-20 03:50:23 【问题描述】:

我正在制作一个仪表板,其中router-outlet 中显示了不同的组件。我想生成“仅”router-outlet 中所有组件的 pdf。我认为jsPDF 可以解决问题。但问题是,我制作了一个 vc-export-pdf 按钮,它位于一个单独的组件 中。我正在检查如何使用 jsPDF,他们中的大多数人都使用参考来访问他们想要制作 pdf 的div。现在如何访问位于单独组件中的 div 的内容?

【问题讨论】:

您能在 stackblitz 中分享您的演示吗?我想看看并了解如何在 Angular 应用程序中使用 html2canvas 来使用 js-pdf?谢谢。 这是link。 stackblitz 有一些问题,但你会明白其中的逻辑 【参考方案1】:

这可能真的很棘手,但是要获取 div 的数据,您可以使用 ViewChild 但请记住,当您从 html div 使用 jsPDF 呈现时,需要呈现 div 并且它的内容需要呈现在 pdf 中.如果您想生成未呈现的内容的 pdf。我建议你从 jsPDF 创建一个 pdf,但都是用 jsPDF 的函数而不是 HTML 编写的。 如果您使用 HTML2Canva,带有 HTML 的 jsPDF 也可能不太方便,因为它会截取屏幕截图(如果您有太多东西,它可能会变得模糊并且不适合您的页面)并且您将无法复制 pdf 上的文本例如。

【讨论】:

您建议我应该使用什么来从 HTML 生成 pdf?除了jsPDF 不幸的是,我用来用 js 生成 pdf 的唯一库是 jsPDF。我首先尝试从 HTML 生成,但事实证明,如果它只是 PDF 的图像,它不会对用户友好。我知道自己用 jsPDF 的功能编写 PDF 需要做很多工作,但会更清晰。但是有 jsPDF 的替代品,但我没有尝试过:js.libhunt.com/jspdf-alternatives “使用 jsPDF 的函数自己编写 PDF”是什么意思 你可以像这样写一个pdf:const doc = new jsPDF('p', 'mm', 'a4', true); doc.addFileToVFS('Bitter.ttf', BITTER_FONT); doc.addFont('Bitter.ttf', 'bitter', 'normal'); try const imgUb = new Image(); imgUb.src = 'assets/logo/logo.png'; doc.addImage(imgUb, 'png', 25, 15, 15, 15); const img = new Image(); img.src = 'assets/logo/img.png'; doc.addImage(img, 'png', 120, 12, 70, 20); catch (err) this.log.warn('Cannot load images'); doc.text( doc.splitTextToSize('totototext, 160), 25, 45, ); 然后下载它你可以使用 doc.save('nameofile')

以上是关于如何在“路由器插座”内生成 PDF 内容?的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2,RC5 路由器插座在另一个路由器插座内

路由器插座内的路由器插座不工作

在 JHipster Angular 的主要组件中的“路由器插座”之外访问 Principal

Angular2 - 具有登录结构的路由器插座

如何使用路由器插座加载 Angular 组件

Angular 8嵌套路由和多个路由器插座不起作用