使用jsPdf和Html2Canvas将HTML页面转换为Angular中的PDF

洛基信德

[使用位置-182、0,图像208,298生成的pdf的第一张img ] [1]我正在尝试使用jspdf和Html2canvas将HTML页面转换为Angular 8+中的PDF。我只能将页面的一半转换为pdf。我所知道的是这是一个扩展问题。

当我尝试使用Ctrl + P在Chrome中打印表单时:“我在单个页面中获得了完整的表单,但没有CSS

当我在mozilla中尝试相同时:“它给了我两个没有CSS的不同页面

我已经尝试了所有示例,所有示例均基于html2Canvas和jspdf。

//pdf.component.ts
 public captureScreen() {
const filename = 'rtgs-form.pdf';
html2canvas(document.getElementById('contentToConvert')
).then(canvas => {
  const pdf = new jspdf('p', 'mm', 'a4');
  pdf.addImage(canvas.toDataURL('image/png'), 'PNG', 0, -182, 208, 298);
  pdf.save(filename);
});
  }
//pdf.component.html
    <div class="container" >
    <section class="top-form" id="contentToConvert" >
        <img class="form-image-align" src="assets/images/topRtgsYesBank.jpg" alt="top of rtgs neft form" />
        <table class="form-between-part" style="background-color: #9c9c9c; color: #000;">
            <tr>
                <td>&nbsp;&nbsp;Branch Code &nbsp;</td>
                <td><input type="text" name="" id=""></td>
                <td><label for="">&nbsp;Branch Name&nbsp;</label></td>
                <td><input type="text">&nbsp;</td>
                <td><input type="checkbox" name="" id="">&nbsp;NEFT</td>
                <td><input class="" type="checkbox" name="" id="">&nbsp;RTGS</td>
                <td><label for="">&nbsp;Application Date&nbsp;</label></td>
                <td><input type="text"></td>
            </tr>
        </table>
        <div>
            <p style="margin: 5px;">To,<br />
                The Branch Manager,
                ___________________Branch<br />
                Dear Sir,<br />
                Please remit through NEFT/RTGS a sum of <span class="fas fa-rupee-sign"></span> _________ (Rupees in
                words)
                ___________________<br />
                as per details given below:<br />
                <input type="checkbox" name="" id="">&nbsp; Cash
                <input type="checkbox" name="" id="">&nbsp;Cheque
                <input type="checkbox" name="" id="">&nbsp;Debit my / our account</p>
            <p style="margin: 5px; font-size: 10px;">*In Case of cash, please fill in the pay-in slip</p>
            <p style="font-size: 10px"><b
                    style="background-color: #2089d4; color: white; font-size: 15px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REMITTER
                    DETAILS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b> All fields are MANDATORY, All
                details should be entered in BLOCK LETTERS</p>
            <table class="form-between-part">
                <tr>
                    <td id="rtgs-fixed-col">PAN No.</td>
                    <td colspan="4"><input class="form-between-part" type="text" name="" id=""></td>
                    <td id="rtgs-fixed-col">Account type</td>
                    <td><input type="checkbox" name="" id="">Current</td>
                    <td><input type="checkbox" name="" id="">Savings</td>
                    <td><input type="checkbox" name="" id="">NRE</td>
                    <td><input type="checkbox" name="" id="">NRO</td>
                </tr>
                <tr>
                    <td id="fit-in-form">Remitter <br>(Applicant) name</td>
                    <td colspan="9"><input type="text" class="form-between-part" name="" id=""></td>
                </tr>
                <tr>
                    <td id="fit-in-form">Remitter <br>Account No.</td>
                    <td colspan="4"><input type="text" class="form-between-part" name="" id=""></td>
                    <td id="fit-in-form" colspan="2">Cash Deposited (Non - Customer)<br> Only in case of NEFT
                        transactions</td>
                    <td colspan="3"><input type="text" class="form-between-part" name="" id=""></td>
                </tr>
                <tr>
                    <td id="rtgs-fixed-col">Cheque Date:</td>
                    <td colspan="4"><input type="text" class="form-between-part" name="" id=""></td>
                    <td id="rtgs-fixed-col">Cheque No.</td>
                    <td colspan="4"><input type="text" class="form-between-part" name="" id=""></td>
                </tr>
                <tr>
                    <td rowspan="3" id="fit-in-form">Address of Remitter <i>(optional for YES BANK customers)</i></td>
                    <td rowspan="3" colspan="9"><textarea class="form-between-part"></textarea></td>
                </tr>
            </table>
            <table>
                <tr>
                    <td id="rtgs-fixed-col">Mobile Number</td>
                    <td colspan="5"><input type="text" class="form-between-part" name="" id=""></td>
                    <td id="rtgs-fixed-col">PIN code:</td>
                    <td id="rtgs-fixed-col"><input type="text" class="form-between-part" name="" id=""></td>
                </tr>
            </table>
            <p style="font-size: 10px"><b
                    style="background-color: #2089d4; color: white; font-size: 15px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BENEFICIARY
                    DETAILS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b> All fields are
                MANDATORY, All
                details should be entered in BLOCK LETTERS</p>
            <table class="form-between-part">
                <tr>
                    <td id="fit-in-form">Beneficiary Name*</td>
                    <td colspan="9"><input type="text" class="form-between-part" name="" id=""></td>
                </tr>
                <tr>
                    <td id="fit-in-form">Beneficiary <br>Account No.*</td>
                    <td colspan="4"><input type="text" class="form-between-part" name="" id=""></td>
                    <td id="fit-in-form" colspan="2">Beneficiary Bank*</td>
                    <td colspan="3"><input type="text" class="form-between-part" name="" id=""></td>
                </tr>
                <tr>
                    <td id="fit-in-form-text">Re confirm Beneficiary <br>Account No.*</td>
                    <td colspan="4"><input type="text" class="form-between-part" name="" id=""></td>
                    <td id="fit-in-form-text" colspan="2">Branch Name <br>& Address*</td>
                    <td colspan="3"><input type="text" class="form-between-part" name="" id=""></td>
                </tr>
                <tr>
                    <td id="rtgs-fixed-col">Account type</td>
                    <td><input type="checkbox" name="" id="">Current</td>
                    <td><input type="checkbox" name="" id="">Savings</td>
                    <td><input type="checkbox" name="" id="">NRE</td>
                    <td><input type="checkbox" name="" id="">NRO</td>
                    <td id="rtgs-fixed-col">IFSC code*</td>
                    <td colspan="4"><input type="text" class="form-between-part" name="" id=""></td>
                </tr>
                <tr>
                    <td id="fit-in-form">Purpose of<br>Remittance</td>
                    <td colspan="9"><input type="text" class="form-between-part" name="" id=""></td>
                </tr>
                <tr>
                    <td id="fit-in-form-text">Message from <br>Sender to Receiver</td>
                    <td colspan="3"><input type="text" class="form-between-part" name="" id=""></td>
                    <td id="fit-in-form-text">Beneficiary<br>Mobile No.</td>
                    <td id="rtgs-fixed-col" colspan="3"><input type="text" class="form-between-part" name="" id=""></td>
                </tr>
            </table>
        </div>
        <img class="form-image-align" src="assets/images/bottomRtgsYesBank.jpg" alt="bottom-rtgs-yes-bank" srcset="">
    </section>
</div>
<div>
    <button class="btn btn-primary" (click)="captureScreen()">
        Print
    </button>
    </div>

我希望将整个表格打印在一页pdf中。

洛基信德

我自己进行一些研发已经解决了这个问题。

我注意到这不是我的jspdf的问题,而是html2canvas库,所捕获的图像只有一半。因此,为了解决该问题,我使用了html-to-image npm软件包。这是我对代码进行的以下更改。

//in my component i imported
import htmlToImage from 'html-to-image';

public captureScreen() {
const filename = 'rtgs-form.pdf';
const node = document.getElementById('contentToConvert');
htmlToImage.toPng(node)
.then( (dataUrl) => {
const img = new Image();
img.src = dataUrl;
const pdf = new jspdf('p', 'mm', 'a4');
pdf.setLineWidth(1);
pdf.addImage(img, 'PNG', 0, 0, 208, 298);
pdf.save(filename);
})
.catch((error) => {
console.error('oops, something went wrong!', error);
});
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用html2canvas和jspdf将html页面截图转换为pdf

结合使用html2canvas和jsPDF来保存页面的PDF

JSPDF 和 html2canvas 与 Angular

html2canvas和jsPDF:将生成的pdf作为电子邮件附件发送

jsPDF和html2canvas无法将图像写入pdf

使用 html2canvas 和 php 将 div 数据转换为图像

如何使用html2canvas和jsPDF连接两个页面

如何使用html2canvas和jspdf以适当且简单的方式导出为pdf

如何使用jspdf和html2canvas打印全屏

使用jsPDF和&jsPDF AutoTable将仅特定的HTML表列转换为PDF

HTML2Canvas将溢出的内容转换为图像

使用html2canvas将HTML表转换为画布

使用JsPDF将Canvas转换为Pdf

当我们使用html2canvas和jsPDF库创建多个图形时,将生成空PDF报告

有什么方法可以结合使用JSPDF和html2canvas来加快在移动浏览器中的PDF下载?

jsPDF,html2canvas,PHPMailer,再次...!将PDF附加到邮件

使用JavaScript生成高质量的PDF(jspdf + html2canvas)

如何使用html2canvas JS将当前屏幕下载为PDF和图像?

HTA/IE11 中的 jsPDF + html2canvas

Html2canvas / jspdf 截断图像

jspdf/html2canvas 截断数据

如何使用jspdf和html2canvas添加分页符

使用 html2canvas 将带有 highcharts 图形的 html 转换为图像

使用html2canvas将highcharts图表呈现为pdf在IE和Firefox上不起作用

使用php将html页面转换为pdf

使用pdfbox库将pdf转换为html页面

从JavaScript将HTML页面转换为PDF

jsPDF:使用新的.html()方法时未加载html2canvas

如何使用Angular进行转换:将HTML转换为PDF