File size: 2,608 Bytes
6a7089a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package actions

import (
	"fmt"
	"net/http"
	"net/url"
	"os"
	"time"

	"github.com/pinchtab/pinchtab/internal/cli"
	"github.com/pinchtab/pinchtab/internal/cli/apiclient"
	"github.com/spf13/cobra"
)

func PDF(client *http.Client, base, token string, cmd *cobra.Command) {
	params := url.Values{}
	params.Set("raw", "true")

	outFile, _ := cmd.Flags().GetString("output")
	tabID, _ := cmd.Flags().GetString("tab")

	if v, _ := cmd.Flags().GetBool("landscape"); v {
		params.Set("landscape", "true")
	}
	if v, _ := cmd.Flags().GetString("scale"); v != "" {
		params.Set("scale", v)
	}
	if v, _ := cmd.Flags().GetString("paper-width"); v != "" {
		params.Set("paperWidth", v)
	}
	if v, _ := cmd.Flags().GetString("paper-height"); v != "" {
		params.Set("paperHeight", v)
	}
	if v, _ := cmd.Flags().GetString("margin-top"); v != "" {
		params.Set("marginTop", v)
	}
	if v, _ := cmd.Flags().GetString("margin-bottom"); v != "" {
		params.Set("marginBottom", v)
	}
	if v, _ := cmd.Flags().GetString("margin-left"); v != "" {
		params.Set("marginLeft", v)
	}
	if v, _ := cmd.Flags().GetString("margin-right"); v != "" {
		params.Set("marginRight", v)
	}
	if v, _ := cmd.Flags().GetString("page-ranges"); v != "" {
		params.Set("pageRanges", v)
	}
	if v, _ := cmd.Flags().GetBool("prefer-css-page-size"); v {
		params.Set("preferCSSPageSize", "true")
	}
	if v, _ := cmd.Flags().GetBool("display-header-footer"); v {
		params.Set("displayHeaderFooter", "true")
	}
	if v, _ := cmd.Flags().GetString("header-template"); v != "" {
		params.Set("headerTemplate", v)
	}
	if v, _ := cmd.Flags().GetString("footer-template"); v != "" {
		params.Set("footerTemplate", v)
	}
	if v, _ := cmd.Flags().GetBool("generate-tagged-pdf"); v {
		params.Set("generateTaggedPDF", "true")
	}
	if v, _ := cmd.Flags().GetBool("generate-document-outline"); v {
		params.Set("generateDocumentOutline", "true")
	}
	if v, _ := cmd.Flags().GetBool("file-output"); v {
		params.Del("raw")
		params.Set("output", "file")
	}
	if v, _ := cmd.Flags().GetString("path"); v != "" {
		params.Set("path", v)
	}

	if outFile == "" {
		outFile = fmt.Sprintf("page-%s.pdf", time.Now().Format("20060102-150405"))
	}

	var data []byte
	if tabID != "" {
		data = apiclient.DoGetRaw(client, base, token, fmt.Sprintf("/tabs/%s/pdf", tabID), params)
	} else {
		data = apiclient.DoGetRaw(client, base, token, "/pdf", params)
	}
	if data == nil {
		return
	}
	if err := os.WriteFile(outFile, data, 0600); err != nil {
		cli.Fatal("Write failed: %v", err)
	}
	fmt.Println(cli.StyleStdout(cli.SuccessStyle, fmt.Sprintf("Saved %s (%d bytes)", outFile, len(data))))
}