Generate a PDF in React

Поделиться
HTML-код
  • Опубликовано: 13 сен 2024
  • Generate a PDF from HTML using JavaScript in React and Next.js.
    Learn how to convert HTML to a PDF using 3 different tools including html2pdf.js that allows us to convert an HTML tree to a PDF, React PDF to render a PDF, and Puppeteer to generate a PDF from a live page. We'll even see how we can set up an authenticated session in Puppeteer in Clerk to generate a PDF from private data.
    Get exclusive access to my upcoming course: spacejelly.dev...
    🧰 Resources
    Tutorial: spacejelly.dev...
    Code: github.com/col...
    📺 RUclips: ruclips.net/user/co...
    🐦 Twitter: / colbyfayock
    📹 Twitch: / colbyfayock
    ✉️ Newsletter: www.colbyfayoc...
    github.com/eKo...
    github.com/eKo...
    clerk.com/docs...
    clerk.com/docs...
    🎥 What I Use: www.colbyfayoc...
    #colbyfayock #pdf #javascript #nextjs #reactjs #webdevelopment

Комментарии • 71

  • @colbyfayock
    @colbyfayock  29 дней назад +1

    Learn how to build a full stack Next.js app in my upcoming course: colbyfayock.com/course

  • @JuanMoisesTorrijos
    @JuanMoisesTorrijos 29 дней назад +11

    Hi Colby. Thank you for this video. I’ve been using React-PDF and I think it’s the best of the three options. However, the documentation didn’t clearly explain how to use the renderToStream method properly, and I had a lot of trouble with it, especially with TypeScript. Your solution, even though it seems like a patch, has been really helpful-thank you!

    • @colbyfayock
      @colbyfayock  29 дней назад

      awesome, glad to hear this helped out!

    • @jtjt8777
      @jtjt8777 29 дней назад

      @@colbyfayock better than //@ts-ignore . The solution is perfect because it is quick and it works. Avoid ts hoops

    • @samiullahsheikh5015
      @samiullahsheikh5015 28 дней назад

      I am using jsPDF but struggling to add hyper links in table.
      Links do get into the pdf but are not click able.

  • @tusharphb6596
    @tusharphb6596 28 дней назад +3

    I was using Puppeteer to generate invoices in a serverless environment, and while it worked fine, the problem was that my computation hours were getting used up too quickly. After watching your video, I decided to give React-pdf a try. Thank you for the video ❤
    Looking forward to seeing you more often in my RUclips feed.

    • @colbyfayock
      @colbyfayock  28 дней назад +1

      yes! i could imagine that wasting a ton of resource time. no problem!

  • @mrvfino
    @mrvfino 28 дней назад +4

    Omg i was just looking for this! Thanks you always for the straightforward tutorials.

  • @asadsalehumar1011
    @asadsalehumar1011 27 дней назад +2

    Awesome video on a niche topic. Really helpful!

    • @colbyfayock
      @colbyfayock  27 дней назад +1

      Thanks glad to hear that!

  • @codewithyunus8423
    @codewithyunus8423 16 дней назад +1

    You deserve 1M subscribers .

    • @colbyfayock
      @colbyfayock  16 дней назад

      thank you! 🙌 hopefully one day haha

  • @Naz-e8z
    @Naz-e8z 11 дней назад

    This was really helpfull. You just saved me from tons of research.

    • @colbyfayock
      @colbyfayock  11 дней назад +1

      awesome!! glad to hear that

  • @81NARY
    @81NARY 29 дней назад +2

    Puppeteer might share the session between users (especially in server based environments), maybe clerk handles invalidations fine, but I'd still be careful with it.

    • @colbyfayock
      @colbyfayock  29 дней назад +1

      good call! think we'd be okay in the serverless env, but definitely need to be careful with that in server environments or working between multiple users in a single execution (probably rare tho on that one)

  • @ardianhotii
    @ardianhotii 27 дней назад

    Thank you for sharing this , probably gonna use react pdf for a costum format and style for my invoices, I tried pdf-lib but I think its too hard when dealing with costum designs .
    Really appreciate the video thank you again!

  • @jengkhaw15
    @jengkhaw15 29 дней назад

    I went into this few weeks ago! Thanks for sharing!

    • @colbyfayock
      @colbyfayock  29 дней назад

      nice!! did you have similar findings for the available options?

  • @rayusaki88
    @rayusaki88 25 дней назад

    Very helpful Colby as always. Thanks a ton. Can you do more advanced tutorial on React PDF?

    • @colbyfayock
      @colbyfayock  24 дня назад

      no problem!! im not sure when id get to it but i can add that to my list. is there something particular you're hoping to learn?

  • @FoodTechLife
    @FoodTechLife 29 дней назад

    Noice! Nothing like a solution that comes in at the perfect moment. I used this today 😄 Thanks!

  • @blacksun6761
    @blacksun6761 28 дней назад

    Hi man thank you so much for all the tuto you have done till now , I recently completed some personal project due to your tuto on intersection observer and html dialog, everything is really smooth when concepts are explain by a pro.
    Also can You please make a video on mdx with vite for a documentation or blog app.

    • @colbyfayock
      @colbyfayock  27 дней назад

      Hey thanks happy to hear that. Not a bad idea!! As far as vite do you mean a vanilla react app with vite? I think if doing a content site I'd def want static generation or at least SSR of some sort

  • @jtjt8777
    @jtjt8777 29 дней назад

    thank you! I was trying to generate pdf in react and had lots of problems with styling being slightly off. I guess I just need to recreate in React PDF.

    • @colbyfayock
      @colbyfayock  29 дней назад

      glad it helped! while it requires a little extra work, i think having full control helps produce a better and more reliable format (if thats important for the use case of course!)

  • @alamgirhossain9218
    @alamgirhossain9218 20 дней назад

    React-pdf/renderer is best. If you know about react native then it will be super easy to make a invoice and download without any issue. Also if you want to design with tailwindcss same as web then you can use react-pdf-tailwind.

    • @colbyfayock
      @colbyfayock  20 дней назад

      nice find with react-pdf-tailwind!

  • @imkir4n
    @imkir4n 26 дней назад

    i was just looking for this! Thanks.

    • @colbyfayock
      @colbyfayock  26 дней назад

      no problem!

    • @imkir4n
      @imkir4n 26 дней назад

      Colby, which of these options do you recommend for creating dynamic invoices that update based on user input?

    • @colbyfayock
      @colbyfayock  26 дней назад

      @@imkir4n are you hoping to display the PDF inside of the UI as far as what you mean by updating based on user input? i haven't tried this but React PDF has a Viewer component that you can render it in the UI, I would expect it would rerender based on props like a typical React component, then once ready to generate, can utilize the method shown in this video react-pdf.org/components#pdfviewer

    • @imkir4n
      @imkir4n 26 дней назад

      ​@@colbyfayockYes, this way I can preview the PDF nicely with page navigation and all. But the way of creating PDFs is different, right? We need to use some elements from React PDF to construct a PDF, so I'm confused - if the designs get a bit different, will I be able to style properly with the tags, since the current invoice is styled in HTML and inline css?

    • @colbyfayock
      @colbyfayock  25 дней назад

      @@imkir4n it's the same as what i went through in the video only you use the PDFViewer component instead of the renderToStream function, that way you're maintaining the same document for viewing and exporting

  • @adetunjiigbatayo8535
    @adetunjiigbatayo8535 27 дней назад

    thank you, this solved my problems

  • @swarajbachu8551
    @swarajbachu8551 15 дней назад

    its there is a better solution you can do with puppertier, which is create a new page which will only have invoice, and will be a public route, and pass in some toke? in query params verify it using that and then show contents, then you can do all the customization at react itself, and that page will be just how the final pdf looks

    • @colbyfayock
      @colbyfayock  14 дней назад

      sounds pretty similar to the solution i came up with in the video just little differences. seems like the same amount of work for vending and validating the tokens 🤷‍♂

  • @mohammadabbas1623
    @mohammadabbas1623 29 дней назад

    That's really interesting sir,
    Can you also provide a course in which there is option to edit a pdf doc like by pen and shapes on it and download it, i have to implement same feature in my next.js app

    • @colbyfayock
      @colbyfayock  28 дней назад +1

      thats a pretty interesting idea. i'm not sure that im going to get to something like that soon but you could potentially use something like this www.npmjs.com/package/react-canvas-draw or github.com/tldraw/tldraw which you can export as an image to use as your pdf content

    • @mohammadabbas1623
      @mohammadabbas1623 28 дней назад

      @colbyfayock ooh that's great thanks for your guidance

  • @confudler
    @confudler 28 дней назад

    Warming for people consider html2pdf sticking area I encountered were
    Custom fonts and letter spacing
    Pagination over many pages
    Thai
    Plus the image thing making accessibility impossible
    Would use for simpler use cases / mvp but not for serious platforms.

    • @colbyfayock
      @colbyfayock  28 дней назад

      Dang thanks for the heads up! Preferred react pdf anyways but good to know extra bumps

  • @armandsalle8447
    @armandsalle8447 29 дней назад

    Great video 🫶

  • @EvansIbok
    @EvansIbok 14 дней назад

    Shame I can't use react-pdf/renderer cause everytime I install it in my create-react-app I always get the error below:
    "Attempted import error: 'create' is not exported from 'fontkit' (imported as 'fontkit')."

    • @colbyfayock
      @colbyfayock  14 дней назад

      oh strange, is that a conflict with an existing package that you're aware of?

  • @raiyansarker
    @raiyansarker 28 дней назад

    You should've also covered Satori by Vercel

    • @colbyfayock
      @colbyfayock  27 дней назад +1

      Iirc the reason I didn't was because font support is a bit annoying where these solutions work easily out of the box

  • @JeevanTV-do2hc
    @JeevanTV-do2hc 27 дней назад

    Hi Colby I have a query
    If I use reac-pdf/render can I generate Graphs and append to that pdf?

    • @colbyfayock
      @colbyfayock  27 дней назад

      There's def an image component that you could save or embed it as base64. There are SVG components but haven't played with them.

    • @JeevanTV-do2hc
      @JeevanTV-do2hc 27 дней назад

      @@colbyfayock ok I'll look after it.

  • @imvivekkushwaha
    @imvivekkushwaha 19 дней назад

    I have to print without that print modal how i can do that

    • @colbyfayock
      @colbyfayock  19 дней назад

      if you're printing to a printer from the browser there will always be the modal

  • @goodsamaritan208
    @goodsamaritan208 29 дней назад

    Have you tried jspdf? Please share your opinion/feedback on it?

    • @colbyfayock
      @colbyfayock  28 дней назад +1

      didn't look at that one because of the API. i was looking for something that was either going to transform HTML or a React-like syntax as I find the syntax they use to be a little more unfriendly for more complicated documents: github.com/parallax/jsPDF?tab=readme-ov-file#usage
      being able to edit it in a standard HTML document flow was my goal

  • @sebastiancasal8589
    @sebastiancasal8589 28 дней назад

    i like the puppetear way but not the part of the cloudinary cause is to dependant

    • @colbyfayock
      @colbyfayock  28 дней назад

      yeah, Cloudinary was just an example, you could use anything there!

  • @MyGeorge1964
    @MyGeorge1964 29 дней назад

    Nice... I am looking for a solution for a mortgage, insurance and financial website where html can be downloaded as a pdf... any real solution out there? Perhaps, even with using CSS to format the pdf... TY.

    • @colbyfayock
      @colbyfayock  29 дней назад

      just curious did any of the solutions here not fit that need?

    • @ThomasWapps
      @ThomasWapps 29 дней назад

      react-pdf together with react-pdf-html works pretty good. to just input html into react-pdf instead of building the whole template with react-pdf components

    • @colbyfayock
      @colbyfayock  29 дней назад

      @@ThomasWapps ooo thats nice, and even seeing that example Rendering React Components, good find

    • @jtjt8777
      @jtjt8777 29 дней назад

      you could try react-to-print. It passes element to the web print api and user can save as pdf.

    • @jtjt8777
      @jtjt8777 25 дней назад

      You must understand any css/tailwind/html/jsx is processed as image or svg. Text is not searchable unless you use the text element supply by the pdf lib like react-pdf or pdfkit

  • @MuhammadAdnan2.0
    @MuhammadAdnan2.0 28 дней назад

    .docx ??

  • @OnlyJavascript
    @OnlyJavascript 22 дня назад

    one kind request. I appreciate your efforts but if it's a paid course pls use some other auth lib. not clerk. use clerk in your sponsored videos and not in paid courses.

    • @colbyfayock
      @colbyfayock  22 дня назад

      thanks for your feedback, but just curious, why in particular do you feel that way? regardless of if it's free or paid, Clerk is a fantastic managed auth solution (that a lot of people are eager to learn)

    • @masaratech
      @masaratech 22 дня назад

      Clerk is for noobs ​@@colbyfayock