ユーザーが入力したデータからPDFレポートを生成する必要があります。これはオブジェクトに保存されます。これまでのところ、HTMLページを生成し、スクリーンショットを撮って、それをPDFに変換します。PDFをオブジェクトに保存されたデータから直接生成することを探しています。アイデアはありますか?
これは一般的な要件ですが、PDFの特定の要件についてはあまり詳しく説明していません。あなたは見ることができます:
https://www.npmjs.com/package/angular-pdf-generator
または
https://parall.ax/products/jspdf
クライアント側のオプションとして。 PDF生成された後の処理に応じて、他のオプションもあります。たとえば、サーバーにデータを送り返す方が理にかなっている場合があります。 1つ)PDFを生成し、それをデータベースなどに保存する。
お役に立てば幸いです。
HtmlをPDFにダウンロードできます。これが役立つことを願っています。
。Html
<div id="pdfTable" #pdfTable>
<h1>{{name}}</h1>
<table>
<tr>
<th>Company</th>
<th>Contact</th>
<th>Country</th>
</tr>
<tr>
<td>Alfreds Futterkiste</td>
<td>Maria Anders</td>
<td>Germany</td>
</tr>
<tr>
<td>Centro comercial Moctezuma</td>
<td>Francisco Chang</td>
<td>Mexico</td>
</tr>
<tr>
<td>Ernst Handel</td>
<td>Roland Mendel</td>
<td>Austria</td>
</tr>
<tr>
<td>Island Trading</td>
<td>Helen Bennett</td>
<td>UK</td>
</tr>
<tr>
<td>Laughing Bacchus Winecellars</td>
<td>Yoshi Tannamuri</td>
<td>Canada</td>
</tr>
<tr>
<td>Magazzini Alimentari Riuniti</td>
<td>Giovanni Rovelli</td>
<td>Italy</td>
</tr>
</table>
</div>
<div> <button (click)="downloadAsPDF()">Export To PDF</button></div>
。ts
public downloadAsPDF() {
const doc = new jsPDF();
const specialElementHandlers = {
'#editor': function (element, renderer) {
return true;
}
};
const pdfTable = this.pdfTable.nativeElement;
doc.fromHTML(pdfTable.innerHTML, 15, 15, {
width: 190,
'elementHandlers': specialElementHandlers
});
doc.save('tableToPdf.pdf');
}
次のコードが私のプロジェクトで使用され、機能しました
ステップ1:次のコマンドを実行してnpmパッケージをインストールする
> npm install jspdf
> npm install html2canvas
ステップ2:インストールされたパッケージをapp.components.tsにインポートします。これらのパッケージをconstructor()にインポートしていません
> import * as jspdf from 'jspdf';
> import html2canvas from 'html2canvas';
ステップ3:PDFとしてエクスポートする必要があるHTML divのIDを指定します。機能を有効にするボタンも追加します。
<div id="MyDIv" style="margin-left: 45px;" class="main-container">
</div>
<div class="icon_image " title="Share As PDF" (click)="exportAsPDF('MyDIv');"><img src="assets/img/pdf.png"></div>
ステップ4:PDFを生成するためのコードを次のように記述します
exportAsPDF()
{
let data = document.getElementById('MyDIv');
html2canvas(data).then(canvas => {
const contentDataURL = canvas.toDataURL('image/png')
let pdf = new jspdf('l', 'cm', 'a4'); //Generates PDF in landscape mode
// let pdf = new jspdf('p', 'cm', 'a4'); Generates PDF in portrait mode
pdf.addImage(contentDataURL, 'PNG', 0, 0, 29.7, 21.0);
pdf.save('Filename.pdf');
});
}
PDFMAKEプラグインを使用して印刷できます。 Gitでこのリンク https://www.npmjs.com/package/ng-pdf-make を使用してアクセスできます。インストールが非常に簡単になった後、インポートするだけで、これらのライブラリを印刷するコンポーネントに追加します。
"pdfmake/build/pdfmake"から* pdfMakeとしてインポートします。
インポート* "pdfmake/build/vfs_fonts"からpdfFontsとして;
After that, create a function that will print your document such as:
printDoc(){
pdfMake.vfs = pdfFonts.pdfMake.vfs;
let dd = {
// Here you put the page settings as your footer, for example:
footer: function(currentPage, pageCount) {
return [
{
text:
currentPage.toString() +
" de " +
pageCount +
"\n" +
"Footer Name",
alignment: currentPage ? "center" : "center"
}
];
},
// Here you can enter the page size and orientation:
pageSize: "A4",
pageOrientation: "Portrait",
//in pageOrientation you can put "Portrait" or "landscape"
// start the body of your impression:
content: [
{
table: {
widths: ["*"],
body: [
[
{
text: [
{ text: `${'Text Example'}`, bold: true }
],
style: "header",
width: "150",
alignment: "left",
border: [true, true, true, false],
margin: [0, 15, 0, 15]
}
]
]
}
},
]
}
pdfMake.createPdf(dd).download("Name of Print");
}
ユーザーが入力したデータは、htmlページに表示したり、pdfに変換したりできます。そうでない場合、オブジェクトをhtmlテンプレートにバインドする場合はhandlebarsを使用します。次に、htmlテンプレートをPDF in angular jspdfとhtml2canvasを使用した2/4/6 /7。htmlコンテンツは次のように処理する必要があります。このコードは複数ページのpdf作成をサポートしています。
ここにデータ-> htmlcontent
TS :generatePdf(data) {
html2canvas(data, { allowTaint: true }).then(canvas => {
let HTML_Width = canvas.width;
let HTML_Height = canvas.height;
let top_left_margin = 15;
let PDF_Width = HTML_Width + (top_left_margin * 2);
let PDF_Height = (PDF_Width * 1.5) + (top_left_margin * 2);
let canvas_image_width = HTML_Width;
let canvas_image_height = HTML_Height;
let totalPDFPages = Math.ceil(HTML_Height / PDF_Height) - 1;
canvas.getContext('2d');
let imgData = canvas.toDataURL("image/jpeg", 1.0);
let pdf = new jsPDF('p', 'pt', [PDF_Width, PDF_Height]);
pdf.addImage(imgData, 'JPG', top_left_margin, top_left_margin, canvas_image_width, canvas_image_height);
for (let i = 1; i <= totalPDFPages; i++) {
pdf.addPage([PDF_Width, PDF_Height], 'p');
pdf.addImage(imgData, 'JPG', top_left_margin, -(PDF_Height * i) + (top_left_margin * 4), canvas_image_width, canvas_image_height);
}
pdf.save("HTML-Document.pdf");
});
}
HTML:
<div #contentToConvert> Some content here </div>
<button (click)="generatePdf(contentToConvert)">Generate PDF</button>
利用可能なツールとテクノロジーの良い概要は次のとおりです: 最新のhtmlからpdfへの変換2019 そしてjspdfとhtml2canvasを使用した実用的な例: こちら