สอบถามการสร้าง API ในการทำลายน้ำให้ไฟล์ PDF

แนะนำ สอบถาม ภาษา C สำหรับผู้เริ่มต้น ภาษา Java ภาษา Python

Moderator: mindphp, ผู้ดูแลกระดาน

ภาพประจำตัวสมาชิก
fonfonn
PHP VIP Members
PHP VIP Members
โพสต์: 4983
ลงทะเบียนเมื่อ: 11/07/2022 9:28 am

สอบถามการสร้าง API ในการทำลายน้ำให้ไฟล์ PDF

โพสต์ที่ยังไม่ได้อ่าน โดย fonfonn »

สอบถามค่ะ เนื่องจากต้องการสร้างลายน้ำให้ไฟล์ PDF จากโค้ด ส่วนแรก เป็นการสร้างตัว request ขึ้นมา แล้วมีการ สร้างเงือนไขในการรับ ค่า เพราะว่าผู้ใช้งานสามารถเลือกการทำงานได้ว่าต้องการสร้างลายน้ำแบบข้อความหรือแบบรูปภาพ

โค้ด: เลือกทั้งหมด

class Waterpic_base64(BaseModel):
        type : str
        pdf_base64: str
        pic_base64: str
        text: str
        
@app.post('/api_watermark')
async def read_picwatermark(request: Waterpic_base64):
#ทำลายน้ำแบบรูป
    if request.type == "JPG":
        with open(r'C:\Users\fonfo\pdf-toolkits\pythonPDF.pdf', 'wb') as pdfFile:
            pdfFile.write(base64.b64decode(request.pdf_base64))
        
        with open(r'C:\Users\fonfo\pdf-toolkits\water.jpg', 'wb') as picFile:
            picFile.write(base64.b64decode(request.pic_base64))
        #ใส่การทำลายน้ำในส่วนนี้

#ทำลายน้ำแบบข้อความ
      if request.type == "text":
        with open(r'C:\Users\fonfo\pdf-toolkits\pythonPDF.pdf', 'wb') as pdfFile:
            pdfFile.write(base64.b64decode(request.pdf_base64))
            
        with open(r'C:\Users\fonfo\pdf-toolkits\text.txt', 'wb') as text:
            text.write(base64.b64decode(request.text))
        #ใส่การทำลายน้ำในส่วนนี้

    return "ss"
คำถามคือจากโค้ดในส่วนแรกการทำลายน้ำที่มีการรับค่าเป็นข้อความแบบนี้ แล้วเก็บในรูปแบบ text.txt ถูกหรือป่าวคะ ถ้าผิด ต้องมีการรับค่ามาในรูปแบบไหนคะ
you're the only one treasure💎
ภาพประจำตัวสมาชิก
fonfonn
PHP VIP Members
PHP VIP Members
โพสต์: 4983
ลงทะเบียนเมื่อ: 11/07/2022 9:28 am

Re: สอบถามการสร้าง API ในการทำลายน้ำให้ไฟล์ PDF

โพสต์ที่ยังไม่ได้อ่าน โดย fonfonn »

ถามเพิ่มเติมนะคะ คือ จากโค้ด เป็นการทำลายน้ำด้วยภาพ ซึ่งเมื่อทำตามขั้นตอนด้านล่างแล้ว ผลที่ได้คือ

โค้ด: เลือกทั้งหมด

@app.post('/api_watermark')
async def read_picwatermark(request: Waterpic_base64):
    
    if request.type == "JPG":
        with open(r'C:\Users\fonfo\pdf-toolkits\pythonPDF.pdf', 'wb') as pdfFile:
            pdfFile.write(base64.b64decode(request.pdf_base64))
        
        with open(r'C:\Users\fonfo\pdf-toolkits\water.jpg', 'wb') as picFile:
            picFile.write(base64.b64decode(request.pic_base64))
        
        pic = 'water.jpg'
        pdf = 'pythonPDF.pdf'
        c = canvas.Canvas(pdf)
        c.drawImage(pic,15,15)
        c.save()
ผลที่ได้
  • เมื่อทดสอบ API จะได้ไฟล์ PDF ที่มีภาพ ที่เรา Input แต่ไม่มีตัว ไฟล์ PDFที่ แปลงจาก base64 ค่ะ
    ได้ไฟล์ PDF ที่มีภาพ.png
    ได้ไฟล์ PDF ที่มีภาพ.png (35.53 KiB) Viewed 800 times
เลยอยากถามว่าถ้าเราต้องการให้ไฟล์รูปที่เรา Input เข้าไปวางทับบน PDF เดิมที่แปลงจาก base64 ต้องปรับแก้โค้ดตรงไหนคะ
you're the only one treasure💎
ภาพประจำตัวสมาชิก
wkid
PHP VIP Members
PHP VIP Members
โพสต์: 2158
ลงทะเบียนเมื่อ: 17/05/2022 10:37 am

Re: สอบถามการสร้าง API ในการทำลายน้ำให้ไฟล์ PDF

โพสต์ที่ยังไม่ได้อ่าน โดย wkid »

fonfonn เขียน: 15/08/2022 4:46 pm สอบถามค่ะ เนื่องจากต้องการสร้างลายน้ำให้ไฟล์ PDF จากโค้ด ส่วนแรก เป็นการสร้างตัว request ขึ้นมา แล้วมีการ สร้างเงือนไขในการรับ ค่า เพราะว่าผู้ใช้งานสามารถเลือกการทำงานได้ว่าต้องการสร้างลายน้ำแบบข้อความหรือแบบรูปภาพ

โค้ด: เลือกทั้งหมด

class Waterpic_base64(BaseModel):
        type : str
        pdf_base64: str
        pic_base64: str
        text: str
        
@app.post('/api_watermark')
async def read_picwatermark(request: Waterpic_base64):
#ทำลายน้ำแบบรูป
    if request.type == "JPG":
        with open(r'C:\Users\fonfo\pdf-toolkits\pythonPDF.pdf', 'wb') as pdfFile:
            pdfFile.write(base64.b64decode(request.pdf_base64))
        
        with open(r'C:\Users\fonfo\pdf-toolkits\water.jpg', 'wb') as picFile:
            picFile.write(base64.b64decode(request.pic_base64))
        #ใส่การทำลายน้ำในส่วนนี้

#ทำลายน้ำแบบข้อความ
      if request.type == "text":
        with open(r'C:\Users\fonfo\pdf-toolkits\pythonPDF.pdf', 'wb') as pdfFile:
            pdfFile.write(base64.b64decode(request.pdf_base64))
            
        with open(r'C:\Users\fonfo\pdf-toolkits\text.txt', 'wb') as text:
            text.write(base64.b64decode(request.text))
        #ใส่การทำลายน้ำในส่วนนี้

    return "ss"
คำถามคือจากโค้ดในส่วนแรกการทำลายน้ำที่มีการรับค่าเป็นข้อความแบบนี้ แล้วเก็บในรูปแบบ text.txt ถูกหรือป่าวคะ ถ้าผิด ต้องมีการรับค่ามาในรูปแบบไหนคะ
ขอดูวิธีส่งค่าในโพสแมนหน่อยครับ
ทำไมสัตว์ที่น่ากลัวที่สุดถึงตัวเล็กๆที่เรียกว่า Bug ละนั่น );
ภาพประจำตัวสมาชิก
fonfonn
PHP VIP Members
PHP VIP Members
โพสต์: 4983
ลงทะเบียนเมื่อ: 11/07/2022 9:28 am

Re: สอบถามการสร้าง API ในการทำลายน้ำให้ไฟล์ PDF

โพสต์ที่ยังไม่ได้อ่าน โดย fonfonn »

  • มีการ ใส่ type และ base64 ของ pdf และ base64 ของ ข้อความ
    input type และ  base64 ของ pdf.png
    input type และ base64 ของ pdf.png (85.46 KiB) Viewed 791 times
  • ผลที่ได้
    2022-08-15 (12).png
    2022-08-15 (12).png (72.39 KiB) Viewed 791 times
ที่สอบถามคือในการจะนำข้อความที่รับมาไปทำลายน้ำต่อ การรับค่าในรูปแบบนี้ถูกหรือยังคะ หรือไม่ต้องมีการแปลงไฟล์ เป็น base64 แต่รับข้อความโดยตรง ถ้าการรับค่าโดยตรงจะใช้โค้ดในลักษณะไหนคะ
you're the only one treasure💎
ภาพประจำตัวสมาชิก
wkid
PHP VIP Members
PHP VIP Members
โพสต์: 2158
ลงทะเบียนเมื่อ: 17/05/2022 10:37 am

Re: สอบถามการสร้าง API ในการทำลายน้ำให้ไฟล์ PDF

โพสต์ที่ยังไม่ได้อ่าน โดย wkid »

จาก scope งานถ้าเท่าที่ฟัง คิดว่าในส่วนของที่รับค่า ข้อความ น่าจะเป็นการรับค่าข้อความโดยตรงไปเลยครับ แต่ที่ตอนนี้ที่ต้องกำหนด type ของทั้ง text และ jpg นั้น อันนี้แค่เอามาไว้ทดสอบครับ เพราะตอนนี้เราส่งได้แค่ที่เป็น type ของตัวอักษรครับ
ทำไมสัตว์ที่น่ากลัวที่สุดถึงตัวเล็กๆที่เรียกว่า Bug ละนั่น );
ภาพประจำตัวสมาชิก
fonfonn
PHP VIP Members
PHP VIP Members
โพสต์: 4983
ลงทะเบียนเมื่อ: 11/07/2022 9:28 am

Re: สอบถามการสร้าง API ในการทำลายน้ำให้ไฟล์ PDF

โพสต์ที่ยังไม่ได้อ่าน โดย fonfonn »

wkid เขียน: 16/08/2022 6:48 am จาก scope งานถ้าเท่าที่ฟัง คิดว่าในส่วนของที่รับค่า ข้อความ น่าจะเป็นการรับค่าข้อความโดยตรงไปเลยครับ แต่ที่ตอนนี้ที่ต้องกำหนด type ของทั้ง text และ jpg นั้น อันนี้แค่เอามาไว้ทดสอบครับ เพราะตอนนี้เราส่งได้แค่ที่เป็น type ของตัวอักษรครับ
ก็จะเป็นการทำงานในลักษณะนี้ใช่ไหมคะ เปลี่ยนการรับค่าเป็นข้อความโดยตรง

โค้ด: เลือกทั้งหมด

    if request.type == "text":
        with open(r'C:\Users\fonfo\pdf-toolkits\pythonPDF.pdf', 'wb') as pdfFile:
            pdfFile.write(base64.b64decode(request.pdf_base64))
            
        {'Text' : request.text}
you're the only one treasure💎
ภาพประจำตัวสมาชิก
MBMoo
PHP VIP Members
PHP VIP Members
โพสต์: 25602
ลงทะเบียนเมื่อ: 04/06/2020 10:05 am

Re: สอบถามการสร้าง API ในการทำลายน้ำให้ไฟล์ PDF

โพสต์ที่ยังไม่ได้อ่าน โดย MBMoo »

Q - การใช้งาน reportlab
viewtopic.php?p=262874#p262874

ลองดูจากกระทู้นี้เพิ่มเติมค่ะ ถ้า reportlab อย่างเดียวทำลายน้ำไม่ได้ อาจจะต้องสร้าง pdf 2 ไฟล์ ไฟล์นึงลายน้ำ อีกไฟล์เป็น pdf ที่เราต้องการจะใส่ลายน้ำ แล้วเมิจเข้าด้วยกันโดยใช้ PyPDF2 ค่ะ

***ศึกษา Docs reportlab ก่อนนะคะ ว่าสามารถทำได้หรือเปล่า
ภาพประจำตัวสมาชิก
fonfonn
PHP VIP Members
PHP VIP Members
โพสต์: 4983
ลงทะเบียนเมื่อ: 11/07/2022 9:28 am

Re: สอบถามการสร้าง API ในการทำลายน้ำให้ไฟล์ PDF

โพสต์ที่ยังไม่ได้อ่าน โดย fonfonn »

fonfonn เขียน: 15/08/2022 5:01 pm ถามเพิ่มเติมนะคะ คือ จากโค้ด เป็นการทำลายน้ำด้วยภาพ ซึ่งเมื่อทำตามขั้นตอนด้านล่างแล้ว ผลที่ได้คือ

โค้ด: เลือกทั้งหมด

@app.post('/api_watermark')
async def read_picwatermark(request: Waterpic_base64):
    
    if request.type == "JPG":
        with open(r'C:\Users\fonfo\pdf-toolkits\pythonPDF.pdf', 'wb') as pdfFile:
            pdfFile.write(base64.b64decode(request.pdf_base64))
        
        with open(r'C:\Users\fonfo\pdf-toolkits\water.jpg', 'wb') as picFile:
            picFile.write(base64.b64decode(request.pic_base64))
        
        pic = 'water.jpg'
        pdf = 'pythonPDF.pdf'
        c = canvas.Canvas(pdf)
        c.drawImage(pic,15,15)
        c.save()
ผลที่ได้
  • เมื่อทดสอบ API จะได้ไฟล์ PDF ที่มีภาพ ที่เรา Input แต่ไม่มีตัว ไฟล์ PDFที่ แปลงจาก base64 ค่ะ
    ได้ไฟล์ PDF ที่มีภาพ.png
เลยอยากถามว่าถ้าเราต้องการให้ไฟล์รูปที่เรา Input เข้าไปวางทับบน PDF เดิมที่แปลงจาก base64 ต้องปรับแก้โค้ดตรงไหนคะ
จากที่ถามเรื่องนี้ไปค่ะ ทดลองใช้วิธีนี้สามารถให้ไฟล์รูปที่เรา Input เข้าไปวางทับบน PDF เดิมที่แปลงจาก base64 ได้ค่ะ

โค้ด: เลือกทั้งหมด

@app.post('/api_watermark')
async def read_picwatermark(request: Waterpic_base64):
    if request.type == "JPG":
        with open(r'C:\Users\fonfo\pdf-toolkits\pythonPDF.pdf', 'wb') as pdfFile:
            pdfFile.write(base64.b64decode(request.pdf_base64))
        
        with open(r'C:\Users\fonfo\pdf-toolkits\water.jpg', 'wb') as picFile:
            picFile.write(base64.b64decode(request.pic_base64))

        doc = aw.Document()
        builder = aw.DocumentBuilder(doc)
        builder.insert_image("water.jpg")
        doc.save("Output.pdf")
        
        def create_watermark ( input_pdf ,output, watermark ) :
            watermark_obj = PdfFileReader ( watermark )
            watermark_page = watermark_obj.getPage ( 0 )

            pdf_reader = PdfFileReader(input_pdf)
            pdf_writer = PdfFileWriter()

            for page in range (pdf_reader.getNumPages()):
                page = pdf_reader.getPage(page)
                page.mergePage(watermark_page)
                pdf_writer.addPage(page)

            with open (output,'wb') as out:
                pdf_writer.write (out)

        create_watermark(
                input_pdf='pythonPDF.pdf', #ไฟล์ต้นฉบับ
                output='watermarked.pdf', #ไฟล์ที่สร้างขึ้นใหม่ที่มีลายน้ำ
                watermark='Output.pdf' #ไฟล์ลายน้ำ
                )
ซึ่งผลลัพธ์ที่ได้ก็จะเป็นไฟล์ PDF ที่แปลงจาก base64 หนึ่งไฟล์ ไฟล์ภาพที่แปลงจาก base64 หนึ่งไฟล์ และ ไฟล์ ที่มีการทำลายน้ำ 1 ไฟล์
  • ไฟล์ที่ได้จากการทดสอบ
    ไฟล์ที่ได้จากการทดสอบ.png
    ไฟล์ที่ได้จากการทดสอบ.png (30.38 KiB) Viewed 730 times
  • ไฟล์ PDF ต้นฉบับที่แปลงจาก base64
    ไฟล์ PDF ต้นฉบับ.png
    ไฟล์ PDF ต้นฉบับ.png (77.89 KiB) Viewed 730 times
  • ไฟล์ที่มีการใส่ภาพที่แปลงจาก base64 ลงบน PDF ต้นฉบับ
    ไฟล์ที่มีการใส่ภาพทับ PDF ต้นฉบับ.png
    ไฟล์ที่มีการใส่ภาพทับ PDF ต้นฉบับ.png (99.04 KiB) Viewed 730 times
you're the only one treasure💎
ภาพประจำตัวสมาชิก
MBMoo
PHP VIP Members
PHP VIP Members
โพสต์: 25602
ลงทะเบียนเมื่อ: 04/06/2020 10:05 am

Re: สอบถามการสร้าง API ในการทำลายน้ำให้ไฟล์ PDF

โพสต์ที่ยังไม่ได้อ่าน โดย MBMoo »

ใช้ library อะไรในหารทำบ้างคะ ขอดูเพิ่มในส่วน import ได้มั้ยคะ
ภาพประจำตัวสมาชิก
fonfonn
PHP VIP Members
PHP VIP Members
โพสต์: 4983
ลงทะเบียนเมื่อ: 11/07/2022 9:28 am

Re: สอบถามการสร้าง API ในการทำลายน้ำให้ไฟล์ PDF

โพสต์ที่ยังไม่ได้อ่าน โดย fonfonn »

bolue เขียน: 17/08/2022 12:33 pm ใช้ library อะไรในหารทำบ้างคะ ขอดูเพิ่มในส่วน import ได้มั้ยคะ
ตัวที่เพิ่มเข้ามาเป็น PyPDF2 กับ aspose ค่ะ

โค้ด: เลือกทั้งหมด

from PyPDF2 import PdfFileWriter , PdfFileReader
import aspose.words as aw
you're the only one treasure💎
ตอบกลับโพส

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และบุคลทั่วไป 96