在每一页的 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),
  })
})