在 PDF 的每一页上写下文本

问题描述

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

解决方法

不确定它是否是您尝试在所有页面上写入的“对角线消息”,但如果是,则不应仅获取带有 const firstPage = pages[0] 的第一页,您应该遍历所有 pages 以在每个页面上使用 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),})
})

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...