【问题标题】:Write text on the side of the PDF for every pages为每一页在 PDF 的侧面写下文本
【发布时间】:2021-03-31 21:46:11
【问题描述】:

我使用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>

【问题讨论】:

    标签: javascript pdflib


    【解决方案1】:

    不确定它是否是您尝试在所有页面上写入的“对角线消息”,但如果是这样,您应该迭代所有 pages 以使用 drawText(),而不是仅使用 const firstPage = pages[0] 获取第一页在每一页上。

    // 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),
      })
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-28
      • 2012-10-31
      • 2020-06-17
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多