Go에서 PDF 파일의 워터마크 추가

소개하다.


PDF 파일에 워터마크를 추가하는 것은 보안 목적과 파일 소스를 추적하는 데 유용합니다.지폐에 물자국이 있는 것처럼 위조는 더욱 어려워진다.가시적 워터마크(예: 회사 로고나 텍스트)는 다음과 같은 메시지를 전달할 수 있습니다.
  • 텍스트'기밀'은 파일을 공유할 수 없음을 명시적으로 나타냅니다
  • 텍스트 뒤에 있는 회사 로고는 파일의 권한과 소유자를 명확하게 나타낸다.
  • UniPDF는 Golang의 강력한 PDF 라이브러리로서 PDF 파일을 작성, 편집 및 처리할 수 있습니다.Go는 속도와 가독성이 필요한 소프트웨어를 설계할 때 매우 강력한 언어이다.
    이 문서에서는 UniPDF를 사용하여 PDF 파일에 워터마크를 추가하는 방법을 보여 줍니다.Go 프로그램을 만들어 PDF를 열고 이미지에서 로드된 워터마크를 적용하고 워터마크가 있는 PDF를 작성합니다.이 기초는 일괄 처리 프로그램이나 웹 서비스로 쉽게 바뀔 수 있다.

    개요 - 주요 기능


    우리 프로그램은 세 가지 인자를 받아들인다. 워터마크를 넣어야 하는 파일의 입력 경로, 워터마크로 사용할 이미지, 쓸 출력 파일이다.그런 다음 함수addWaterMarkImage를 호출하여 워터마크를 추가합니다.이 기능은 나중에 자세히 설명합니다.
    func main() {
       if len(os.Args) < 4 {
           fmt.Printf("go run pdf_watermark_image.go input.pdf watermark.jpg output.pdf\n")
           os.Exit(1)
       }
       inputPath := os.Args[1]
       watermarkPath := os.Args[2]
       outputPath := os.Args[3]
       err := addWatermarkImage(inputPath, outputPath, watermarkPath)
       if err != nil {
           fmt.Printf("Error: %v\n", err)
           os.Exit(1)
       }
    
       fmt.Printf("Complete, see output file: %s\n", outputPath)
    }
    

    가져오기 - 가져오기 PDF 파일을 로드합니다.


    그래서 파일을 입력하는 것은 워터마크가 필요한 파일이다.이것은 임의의 여러 페이지를 포함하는 pdf 파일일 수 있지만, 본문을 읽는 데 편리하도록 이 보고서 카드 pdf 예시를 사용합니다.이 파일은 크리에이터 패키지를 사용하여 PDF 보고서 카드를 처음부터 만드는 방법에 대한 최근 블로그 글에서 만들어졌습니다.이 방법은 입력 경로에서 입력 파일을 읽는 데 사용됩니다.이것은 pdfReader 대상을 제공한 다음에 이 대상을 사용하여 워터마크를 생성할 수 있습니다.
     // Read the input pdf file.
     pdfReader, f, err := model.NewPdfReaderFromFile(inputPath, nil)
     if err != nil {
         return err
     }
     defer f.Close()
    

    입력 파일 - 워터마크가 있는 PDF 리포트 카드를 추가할 예정입니다.

    워터마크 이미지 - 로드 및 삽입


    워터프린트 이미지는 투명한 배경(또는 흰색)이 있는 이미지를 사용하는 것이 중요하다. 비투명한 배경이 있는 이미지를 사용하면 원시 pdf를 방해하고 출력을 왜곡할 수 있기 때문이다.이 부분 코드에서 그림을 읽는 방법과 그림의 위치와 비율을 설정하는 방법을 볼 수 있습니다.사용한 이미지 유형에 따라 불투명도를 설정하는 것도 중요하다. 옅은 색을 가진 이미지의 불투명도를 낮추면 색이 줄어들기 때문이다.
    watermarkImg, err := c.NewImageFromFile(watermarkPath)
    if err != nil {
        return err
    }
    c.AddPage(page)
    
    watermarkImg.ScaleToWidth(c.Context().PageWidth)
    watermarkImg.SetPos(0, (c.Context().PageHeight-watermarkImg.Height())/2)
    watermarkImg.SetOpacity(0.125)
    _ = c.Draw(watermarkImg) 
    
    이렇게 하면 컨텐트 맨 위에 워터마크가 투명하게 그려집니다.
    또는 배경이 번거로우면 먼저 그림을 그리고 그 위에 페이지 내용을 그릴 수 있습니다.이로 인해 워터마크가 모든 경우에 표시되지 않을 수 있습니다.이것은 용례와 수인 표시의 중요성에 달려 있다.
    이 예에서는 unidoc 로고를 사용합니다.png은 워터마크로 되어 있습니다.

    워터마크가 있는 PDF 파일 출력 생성하기


    여기서 우리는 마력이 생기는 함수에 대해 토론할 것이다.UniPDF의 새 작성자 객체를 작성한 다음 입력 파일과 입력 이미지를 읽고 전체 PDF 파일의 워터마크를 반복합니다.
    PDF 파일의 페이지 수를 얻기 위해 이 함수를 사용합니다.실패하면 페이지나 오류를 되돌려줍니다. (이것은 거의 영원히 일어나지 않을 뿐만 아니라 파일에 심각한 문제가 있음을 나타냅니다.)
    numPages, err := pdfReader.GetNumPages()
    if err != nil {
        return err
    }
    
    이것은 우리가 교체할 수 있는 페이지 수를 되돌려주고, 한 페이지씩 써서, 필요한 불투명도로 워터프린트 그림을 그립니다.
    for i := 0; i < numPages; i++ {
        pageNum := i + 1
    
        // Read the page.
        page, err := pdfReader.GetPage(pageNum)
        if err != nil {
            return err
        }
    
        // Add to creator.
        c.AddPage(page)
    
        watermarkImg.ScaleToWidth(c.Context().PageWidth)
        watermarkImg.SetPos(0, (c.Context().PageHeight-watermarkImg.Height())/2)
        watermarkImg.SetOpacity(0.125)
        _ = c.Draw(watermarkImg)
    } 
    
    그리고 출력 파일은 다음과 같이 쓰여 있다.파일을 쓰기 전에 원본 PDF의 아웃라인 트리와 양식을 적용하여 파일을 유지합니다(설정된 경우).
    // Add reader outline tree to the creator.
    c.SetOutlineTree(pdfReader.GetOutlineTree())
    
    // Add reader AcroForm to the creator.
    c.SetForms(pdfReader.AcroForm)
    
    return c.WriteToFile(outputPath)
    
    결과 PDF 파일은 다음과 같습니다.

    운동장 예제 - PDF 파일 워터마크의 전체 실행 코드 ###


    다음 재생 세그먼트에는 워터마크 PDF를 생성하는 전체 코드와 파일이 들어 있습니다.UniDoc 놀이공원 링크: https://play.unidoc.io/p/ededc48009bfaf76



    결론


    Golang과 UniPDF를 사용하여 워터마크가 있는 PDF를 간편하게 만드는 방법을 보여 드렸습니다.
    동일한 기술을 사용하여 원하는 PDF에 이미지를 추가할 수도 있습니다.예를 들어, PDF 페이지에 QR코드 또는 바코드를 추가하거나 각 페이지에 찰진 바닥글 또는 머리글을 추가할 수 있습니다.
    이 완전한 예는 우리PDF processing examples on GitHub의 일부분이며, 이 특별한 예는 here에서 찾을 수 있다.

    좋은 웹페이지 즐겨찾기