在每一页的 PDF 侧面写下文本
Write text on the side of the PDF for every pages
我使用 pdflib
,它非常适合我。但是我无法让它在 PDF 的所有页面上写一条消息。
如果我上传一个 7 页的 PDF,我怎样才能使该消息出现在所有 7 页上。如果我上传一个 5 页的 PDF,它会出现在所有 5 页上。
我也试过用if
,但最后没搞定。
<script>
const {
degrees,
PDFDocument,
rgb,
StandardFonts
} = PDFLib
modifyPdf();
async function modifyPdf() {
// Fetch an existing PDF document
const url = '<?php echo $pdf;?>'
const existingPdfBytes = await fetch(url).then(res => res.arrayBuffer())
// Load a PDFDocument from the existing PDF bytes
const pdfDoc = await PDFDocument.load(existingPdfBytes)
// Embed the Helvetica font
const helveticaFont = await pdfDoc.embedFont(StandardFonts.Helvetica)
// Get the first page of the document
const pages = pdfDoc.getPages()
const firstPage = pages[0]
// Get the width and height of the first page
const {
width,
height
} = firstPage.getSize()
// Draw a string of text diagonally across the first page
firstPage.drawText('Firmado por <?php echo $usuarionombre;?>, en fecha <?php echo $fechafirma;?>!', {
x: 12,
y: height / 2 - 300,
size: 12,
font: helveticaFont,
color: rgb(0.95, 0.1, 0.1),
rotate: degrees(90),
//original ajustes.
// x: 5,
//y: height / 2 + 300,
//size: 12,
//font: helveticaFont,
//color: rgb(0.95, 0.1, 0.1),
//rotate: degrees(-90),
})
// Serialize the PDFDocument to bytes (a Uint8Array)
const pdfBytes = await pdfDoc.save()
// esto es para descargar el pdf
//download(pdfBytes, "pdf-lib_modification_example.pdf", "application/pdf");
// This step is only necessary if you don't already have a Buffer Object
var blob = new Blob([pdfBytes])
var reader = new FileReader();
reader.onload = function(event) {
var base64 = event.target.result
var res = base64.replace("data:application/octet-stream;base64,", "");
var sites = ['data:application/pdf;base64, ' + res]
document.getElementById('myIframe').src = sites[Math.floor(Math.random() * sites.length)];
};
reader.readAsDataURL(blob);
}
</script>
不确定这是否是您尝试在所有页面上写的“对角线消息”,但如果是这样,您应该遍历所有 [=12=,而不是仅使用 const firstPage = pages[0]
获取第一页] 在每个页面上使用 drawText()
。
// Get document pages
const pages = pdfDoc.getPages()
// Iterate every pages
pages.forEach(page => {
// Get the width and height of the page
const {
width,
height
} = page.getSize()
// Draw a string of text diagonally across the page
page.drawText('Firmado por <?php echo $usuarionombre;?>, en fecha <?php echo $fechafirma;?>!', {
x: 12,
y: height / 2 - 300,
size: 12,
font: helveticaFont,
color: rgb(0.95, 0.1, 0.1),
rotate: degrees(90),
})
})
我使用 pdflib
,它非常适合我。但是我无法让它在 PDF 的所有页面上写一条消息。
如果我上传一个 7 页的 PDF,我怎样才能使该消息出现在所有 7 页上。如果我上传一个 5 页的 PDF,它会出现在所有 5 页上。
我也试过用if
,但最后没搞定。
<script>
const {
degrees,
PDFDocument,
rgb,
StandardFonts
} = PDFLib
modifyPdf();
async function modifyPdf() {
// Fetch an existing PDF document
const url = '<?php echo $pdf;?>'
const existingPdfBytes = await fetch(url).then(res => res.arrayBuffer())
// Load a PDFDocument from the existing PDF bytes
const pdfDoc = await PDFDocument.load(existingPdfBytes)
// Embed the Helvetica font
const helveticaFont = await pdfDoc.embedFont(StandardFonts.Helvetica)
// Get the first page of the document
const pages = pdfDoc.getPages()
const firstPage = pages[0]
// Get the width and height of the first page
const {
width,
height
} = firstPage.getSize()
// Draw a string of text diagonally across the first page
firstPage.drawText('Firmado por <?php echo $usuarionombre;?>, en fecha <?php echo $fechafirma;?>!', {
x: 12,
y: height / 2 - 300,
size: 12,
font: helveticaFont,
color: rgb(0.95, 0.1, 0.1),
rotate: degrees(90),
//original ajustes.
// x: 5,
//y: height / 2 + 300,
//size: 12,
//font: helveticaFont,
//color: rgb(0.95, 0.1, 0.1),
//rotate: degrees(-90),
})
// Serialize the PDFDocument to bytes (a Uint8Array)
const pdfBytes = await pdfDoc.save()
// esto es para descargar el pdf
//download(pdfBytes, "pdf-lib_modification_example.pdf", "application/pdf");
// This step is only necessary if you don't already have a Buffer Object
var blob = new Blob([pdfBytes])
var reader = new FileReader();
reader.onload = function(event) {
var base64 = event.target.result
var res = base64.replace("data:application/octet-stream;base64,", "");
var sites = ['data:application/pdf;base64, ' + res]
document.getElementById('myIframe').src = sites[Math.floor(Math.random() * sites.length)];
};
reader.readAsDataURL(blob);
}
</script>
不确定这是否是您尝试在所有页面上写的“对角线消息”,但如果是这样,您应该遍历所有 [=12=,而不是仅使用 const firstPage = pages[0]
获取第一页] 在每个页面上使用 drawText()
。
// Get document pages
const pages = pdfDoc.getPages()
// Iterate every pages
pages.forEach(page => {
// Get the width and height of the page
const {
width,
height
} = page.getSize()
// Draw a string of text diagonally across the page
page.drawText('Firmado por <?php echo $usuarionombre;?>, en fecha <?php echo $fechafirma;?>!', {
x: 12,
y: height / 2 - 300,
size: 12,
font: helveticaFont,
color: rgb(0.95, 0.1, 0.1),
rotate: degrees(90),
})
})