printpdf 0.9.1

Rust library for reading and writing PDF files
Documentation
name: Deploy static content to Pages
on:
  workflow_dispatch:

# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
  contents: read
  pages: write
  id-token: write

# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
concurrency:
  group: "pages"
  cancel-in-progress: false

jobs:
  deploy:
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Install Rust
        uses: dtolnay/rust-toolchain@master
        with:
          target: wasm32-unknown-unknown
          toolchain: stable
      - name: Install wasm-pack
        run: cargo install wasm-pack
      - name: wasm-pack build
        run: wasm-pack build --target web --no-pack --no-typescript --dev --no-default-features --features "html,js-sys,gif,jpeg,png,pnm,tiff,bmp,webp"
      - name: Inject default fonts into script.js
        run: |
          # Base64 encode fonts for WASM (no filesystem access)
          HELVETICA_B64=$(base64 -w 0 examples/assets/fonts/Helvetica.ttf)
          HELVETICA_BOLD_B64=$(base64 -w 0 examples/assets/fonts/Helvetica-Bold.ttf)
          HELVETICA_OBLIQUE_B64=$(base64 -w 0 examples/assets/fonts/Helvetica-Oblique.ttf)
          HELVETICA_BOLD_OBLIQUE_B64=$(base64 -w 0 examples/assets/fonts/Helvetica-BoldOblique.ttf)
          TIMES_B64=$(base64 -w 0 examples/assets/fonts/Times.ttf)
          TIMES_BOLD_B64=$(base64 -w 0 examples/assets/fonts/Times-Bold.ttf)
          TIMES_OBLIQUE_B64=$(base64 -w 0 examples/assets/fonts/Times-Oblique.ttf)
          TIMES_BOLD_OBLIQUE_B64=$(base64 -w 0 examples/assets/fonts/Times-BoldOblique.ttf)
          COURIER_B64=$(base64 -w 0 examples/assets/fonts/Courier.ttf)
          COURIER_BOLD_B64=$(base64 -w 0 examples/assets/fonts/Courier-Bold.ttf)
          COURIER_OBLIQUE_B64=$(base64 -w 0 examples/assets/fonts/Courier-Oblique.ttf)
          COURIER_BOLD_OBLIQUE_B64=$(base64 -w 0 examples/assets/fonts/Courier-BoldOblique.ttf)
          NOTO_SANS_JP_B64=$(base64 -w 0 examples/assets/fonts/NotoSansJP-Regular.otf)
          ROBOTO_B64=$(base64 -w 0 examples/assets/fonts/RobotoMedium.ttf)
          
          # Create the font object content
          FONT_OBJECT="\"Helvetica.ttf\": \"$HELVETICA_B64\",
              \"Helvetica-Bold.ttf\": \"$HELVETICA_BOLD_B64\",
              \"Helvetica-Oblique.ttf\": \"$HELVETICA_OBLIQUE_B64\",
              \"Helvetica-BoldOblique.ttf\": \"$HELVETICA_BOLD_OBLIQUE_B64\",
              \"Times.ttf\": \"$TIMES_B64\",
              \"Times-Bold.ttf\": \"$TIMES_BOLD_B64\",
              \"Times-Oblique.ttf\": \"$TIMES_OBLIQUE_B64\",
              \"Times-BoldOblique.ttf\": \"$TIMES_BOLD_OBLIQUE_B64\",
              \"Courier.ttf\": \"$COURIER_B64\",
              \"Courier-Bold.ttf\": \"$COURIER_BOLD_B64\",
              \"Courier-Oblique.ttf\": \"$COURIER_OBLIQUE_B64\",
              \"Courier-BoldOblique.ttf\": \"$COURIER_BOLD_OBLIQUE_B64\",
              \"NotoSansJP-Regular.otf\": \"$NOTO_SANS_JP_B64\",
              \"RobotoMedium.ttf\": \"$ROBOTO_B64\""
          
          # Replace the placeholder in script.js
          # Use a temp file approach to handle large base64 strings
          python3 << EOF
          import re
          
          with open('script.js', 'r') as f:
              content = f.read()
          
          # Replace the DEFAULT_FONTS placeholder
          font_object = '''$FONT_OBJECT'''
          new_content = re.sub(
              r'const DEFAULT_FONTS = \{[^}]*\};',
              'const DEFAULT_FONTS = {\n    ' + font_object + '\n};',
              content,
              flags=re.DOTALL
          )
          
          with open('script.js', 'w') as f:
              f.write(new_content)
          
          print("Fonts injected successfully")
          EOF
      - name: Setup Pages
        uses: actions/configure-pages@v5
      - name: Upload artifact
        uses: actions/upload-pages-artifact@v3
        with:
          path: '.'
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4