78 lines
1.5 KiB
Go
Executable File
78 lines
1.5 KiB
Go
Executable File
package lib
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"github.com/pdfcpu/pdfcpu/pkg/api"
|
|
"github.com/pdfcpu/pdfcpu/pkg/pdfcpu/model"
|
|
)
|
|
|
|
func ExtractFromPdf(inputFilePath string, outputFilePath string) error {
|
|
logger := GetDebugLogger()
|
|
logger.Log(fmt.Sprintf("enter ExtractFromPdf(%s, %s)", inputFilePath, outputFilePath))
|
|
defer func() {
|
|
logger.Log("leave extractFromPdf")
|
|
}()
|
|
|
|
if inputFilePath == "" {
|
|
return errors.New("no input file specified")
|
|
}
|
|
|
|
if outputFilePath == "" {
|
|
outputFilePath = strings.TrimSuffix(inputFilePath, filepath.Ext(inputFilePath)) + ".xml"
|
|
}
|
|
|
|
logger.Log(fmt.Sprintf("pdfInput: '%s' output: '%s'", inputFilePath, outputFilePath))
|
|
|
|
inputFile, err := os.Open(inputFilePath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer inputFile.Close()
|
|
|
|
var (
|
|
attachments []model.Attachment
|
|
rawData []byte
|
|
ctx *model.Context
|
|
attachment *model.Attachment
|
|
)
|
|
|
|
ctx, err = api.ReadContextFile(inputFilePath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
attachments, err = api.Attachments(inputFile, model.NewDefaultConfiguration())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
attachment, err = ctx.ExtractAttachment(attachments[0])
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
rawData, err = io.ReadAll(attachment)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
var outputFile *os.File
|
|
outputFile, err = os.Create(outputFilePath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer outputFile.Close()
|
|
|
|
_, err = outputFile.Write(rawData)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|