简体   繁体   中英

Converting a SharePoint List Item to form format and print it

I want to retrieve an item from a SharePoint Online list (Office 365) and print it out in a form format. I have looked at a few ways which involve using power automate and third party tools which such as Muhimbi and Encodian to put the item's values into a HTML form template and convert and download the as a PDF. However this solution requires paying for the third party apps which is extremely expensive. Is there anyway that I can work around this. Are there any other methods of generating and printing the form with the values of the SharePoint list item ?

Oh wow. I have a ready made answer for this. Here is how I implemented a print function from within powerapps & flow. No extra addons or anything. Just a printer with email and a simple understanding of HTML and powerapps.

Here is the article to get the printer to print: https://powerusers.microsoft.com/t5/Building-Power-Apps/Automatic-Printing-using-Flow-and-a-copier-this-is-a-workaround/mp/556375

and: https://powerusers.microsoft.com/t5/Power-Automate-Community-Blog/Printing-Documents-Automatically-Using-Power-Automate/bc-p/1636135#M1401

Setting up the HTML is the hardest part. I did it easily by using Notepad ++ in HTML language mode. Then plugging in the variables after copy pasting to powerapps collect. Here is one of the snips of my code:

 UpdateContext({PrintStatus:1});'ProcessWorkOrder-2'.Run("<!DOCTYPE html> <html> <head> <title>TicketNumber." &Text(dcvTicketID)&" ."& Text(dcvCustomerName)&" </title> <style> div.ltr { background-color: white; } #head { display: flex; justify-content: space-between; padding: 5%; } #head div { width: 50%; } .head { display: flex; background-color: white; } .head > div { padding: 20px; } div.border { border: 1px solid #333; text-align: right; } table.cdata { position: relative; left: 0.25in; top: 0.25in; } table.cdata1 { position: relative; margin-left: 5%; margin-right: 5%; top: 0.25in; width: 90%; } table, td, th { border: 1px solid #333; } thead, tfoot { background-color: #99ebff; color: black; } .bold { font-size: 25px; } img { border: 2px; } p { white-space:pre-wrap; } </style> </head> <body> <br><br> <div class='ltr'> <div > <div> <table class='cdata1'> <thead> <tr><th class='bold' colspan='2'><strong>Duplicate Print Job</strong></th></tr> </thead> </table> </div> </div> <br><br> <div > <div> <table class='cdata1'> <thead> <tr><th class='bold' colspan='2'><strong>Ticket Information:</strong></th></tr> </thead> <tr><td>Ticket ID: </td><td> "&Text(dcvTicketID)&"</td></tr> <tr><td>Chargeable Call: </td><td> "&If(tgIsChargeableCall.Value=true,"Yes, This is a chargeable call","No")&"</td></tr> <tr><td>Has Been Invoiced: </td><td> "&If(tgBeenInvoiced.Value=true,"Yes,This has been invoiced","No")&"</td></tr> <tr><td>Invoice Number: </td><td> "&Text(dcvInvoiceNumber)&"</td></tr> <tr><td>Customer PO Number: </td><td> "&Text(DataCardValue38)&"</td></tr> <tr><td>Ticket Status: </td><td> "&Text(ddStatus.Selected.Value)&"</td></tr> <tr><td>Call Type: </td><td> "&dcvCallType.Selected.Value&"</td></tr> <tr><td>Date Completed: </td><td> "&Text(dcvDateClosed)&"</td></tr> <tr><td>Closed By: </td><td> "&Text(dcvClosedBy)&"</td></tr> </table> </div> </div> <br><br> <div > <div> <table class='cdata1'> <thead> <tr><th class='bold' colspan='2'><strong>Customer Information:</strong></th></tr> </thead> <tr><td>Customer Name: </td><td> "&Text(dcvCustomerName)&"</td></tr> <tr><td>Office Branch: </td><td> "&Text(dcvBranchName)&"</td></tr> <tr><td>Location: </td><td> "&Text(dcvLocationName)&"</td></tr> <tr><td>Make: </td><td> "&Text(dcvMake)&"</td></tr> <tr><td>Model: </td><td> "&Text(dcvModel)&"</td></tr> <tr><td>Serial Number: </td><td> "&Text(dcvSerialNumber)&"</td></tr> <tr><td>Total Counter: </td><td> "&Text(dcvTotalCounter,"[$-en-US]#,###")&"</td></tr> <tr><td>Black Counter: </td><td> "&Text(dcvBWCounter,"[$-en-US]#,###")&"</td></tr> </table> </div> </div> <br><br> <div class='problem'> <table class='cdata1'> <thead> <tr> <th class='bold'><strong>Problem Description:</strong></th> </tr> </thead> <tbody> <tr> <td> <p>"&dcvProblem.Text&"</p> </td> </tr> </tbody> </table> </div> <br><br> <div class='solution'> <table class='cdata1'> <thead> <tr> <th class='bold'><strong>Solution:</strong></th> </tr> </thead> <tbody> <tr> <td> <p>"&dcvRichText.HtmlText&"</p> </td> </tr> </tbody> </table> </div> <br><br> <div class='visits'> <table class='cdata1'> <thead> <tr> <th class='bold' colspan='4'>Visits:</th> </tr> <tr><th>Date</th><th>Time In</th><th>Time Out</th><th>Total</th></tr></thead> <tbody>"& Concat(ItemGallery_8.AllItems, "<tr><td>"& Date &"</td><td>" & StartTime & "</td><td>" &EndTime&"</td><td>"&Value(Total)&"</td></tr>") &"</tbody><tfoot><tr><td class='bold' colspan='3'><strong>Total Time On-Site:</strong></td><td><strong>"& Sum(ItemGallery_8.AllItems, Total) &"</strong></td></tr></tfoot></table> </div> <br><br> <div class='charges'> <table class='cdata1'> <thead> <tr> <th class='bold' colspan='5'><strong>Chargeable Items:</strong></th> </tr> <tr><th>Item Type</th><th>Quantity</th><th>Description</th><th>Cost Per Item</th><th>Total</th></tr></thead> <tbody>"& Concat(GalleryChargeableItems.AllItems, "<tr><td>"& ItemType &"</td><td>" & Quantity & "</td><td>" &ItemName&"</td><td>"&Text(Value(CostPerItem),"[$-en-US]$#,###.00")&"</td><td>"&Text(Value(SubTotalCost),"[$-en-US]$#,###.00")&"</td></tr>") &"</tbody> <tfoot> <tr> <td class='bold' colspan='4'><strong>Total Cost:</strong></td> <td><strong>" & Text(Sum(GalleryChargeableItems.AllItems, SubTotalCost ), "[$-en-US]$#,###.00")&"</strong></td> </tr> </tfoot> </table> </div> <br><br> <div class='charges'> <table class='cdata1'> <thead> <tr> <th class='bold' colspan='2'><strong>Toners Delivered:</strong></th> </tr> <tr><th>Color</th><th>Quantity</th></tr></thead> <tbody><tr><td>Black</td><td>" &Text(TK)&"</td></tr><tr><td>Cyan</td><td>"&Text(TC)&"</td></tr><tr><td>Magenta</td><td>"&Text(TM)&"</td></tr><tr><td>Yellow</td><td>"&Text(TY)&"</td></tr></tbody> </table> </div> <br><br> <div class='solution'> <table class='cdata1'> <thead> <tr> <th class='bold'><strong>Notes About Toner:</strong></th> </tr> </thead> <tbody> <tr> <td> <p>"&dcvTonerNotes.Text&"</p> </td> </tr> </tbody> </table> </div> <br><br> <div class='signature'> <table class='cdata1'> <thead> <tr> <th class='bold'><strong>Signed By: "& SignersName.Text &"</strong></th></tr></thead> <tr> <td><img src=" & JSON(Sinature.Image,JSONFormat.IgnoreBinaryData) & " width='450px'></td></tr></table></div></div><br><br><br><br></body></html>","Print_Job_"&Text(dcvTicketID)&"_WO_"&Text(Now(),"[$-en-US]mm.dd.yyyy_hh.mm.ss"))

Here is the flow to make the HTML doc and convert it to PDF: 在此处输入图像描述 在此处输入图像描述

Here is the flow to send the email with the attached pdf to the printer: 在此处输入图像描述 在此处输入图像描述

You could morph my solution to do your own thing. I would suggest automating converting your list to a csv using flow and then converting it to PDF. Most modern printers support Email, and will allow printing of attached PDFS. Kyocera is the brand I recommend using. But I think brother also allows this without having to buy extra stuff. There is also a python library out there that would let you send info to a printer.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM