• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..03-May-2022-

gofpdf-1.16.2/H19-Nov-2019-

.gitattributeH A D01-Dec-202113

.gitignoreH A D01-Dec-2021295

.travis.ymlH A D01-Dec-2021120

LICENSEH A D01-Dec-20211.1 KiB

MakefileH A D01-Dec-2021747

README.mdH A D01-Dec-202112.6 KiB

attachments.goH A D01-Dec-20215.1 KiB

compare.goH A D01-Dec-20213.5 KiB

def.goH A D01-Dec-202129.3 KiB

doc.goH A D01-Dec-202111.2 KiB

embedded.goH A D01-Dec-202124.1 KiB

font.goH A D01-Dec-202112.6 KiB

fpdf.goH A D01-Dec-2021146.7 KiB

fpdftrans.goH A D01-Dec-20217.1 KiB

go.modH A D01-Dec-2021274

go.sumH A D01-Dec-20211.8 KiB

grid.goH A D01-Dec-202113.6 KiB

htmlbasic.goH A D01-Dec-20216.3 KiB

label.goH A D01-Dec-20212.2 KiB

layer.goH A D01-Dec-20213.4 KiB

png.goH A D01-Dec-20215.3 KiB

protect.goH A D01-Dec-20213.3 KiB

splittext.goH A D01-Dec-20211,018

spotcolor.goH A D01-Dec-20215.8 KiB

subwrite.goH A D01-Dec-20211.3 KiB

svgbasic.goH A D01-Dec-20216.3 KiB

svgwrite.goH A D01-Dec-20212.7 KiB

template.goH A D01-Dec-20218 KiB

template_impl.goH A D01-Dec-20217.8 KiB

ttfparser.goH A D01-Dec-20218.7 KiB

utf8fontfile.goH A D01-Dec-202130.9 KiB

util.goH A D01-Dec-202111.5 KiB

README.md

1# GoFPDF document generator
2
3[![No Maintenance
4Intended](http://unmaintained.tech/badge.svg)](http://unmaintained.tech/)
5[![MIT
6licensed](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/jung-kurt/gofpdf/master/LICENSE)
7[![Report](https://goreportcard.com/badge/github.com/jung-kurt/gofpdf)](https://goreportcard.com/report/github.com/jung-kurt/gofpdf)
8[![GoDoc](https://img.shields.io/badge/godoc-GoFPDF-blue.svg)](https://godoc.org/github.com/jung-kurt/gofpdf)
9
10![](https://github.com/jung-kurt/gofpdf/raw/master/image/logo_gofpdf.jpg?raw=true)
11
12Package gofpdf implements a PDF document generator with high level
13support for text, drawing and images.
14
15## Features
16
17  - UTF-8 support
18  - Choice of measurement unit, page format and margins
19  - Page header and footer management
20  - Automatic page breaks, line breaks, and text justification
21  - Inclusion of JPEG, PNG, GIF, TIFF and basic path-only SVG images
22  - Colors, gradients and alpha channel transparency
23  - Outline bookmarks
24  - Internal and external links
25  - TrueType, Type1 and encoding support
26  - Page compression
27  - Lines, Bézier curves, arcs, and ellipses
28  - Rotation, scaling, skewing, translation, and mirroring
29  - Clipping
30  - Document protection
31  - Layers
32  - Templates
33  - Barcodes
34  - Charting facility
35  - Import PDFs as templates
36
37gofpdf has no dependencies other than the Go standard library. All tests
38pass on Linux, Mac and Windows platforms.
39
40gofpdf supports UTF-8 TrueType fonts and “right-to-left” languages. Note
41that Chinese, Japanese, and Korean characters may not be included in
42many general purpose fonts. For these languages, a specialized font (for
43example,
44[NotoSansSC](https://github.com/jsntn/webfonts/blob/master/NotoSansSC-Regular.ttf)
45for simplified Chinese) can be used.
46
47Also, support is provided to automatically translate UTF-8 runes to code
48page encodings for languages that have fewer than 256 glyphs.
49
50## We Are Closed
51
52This repository will not be maintained, at least for some unknown
53duration. But it is hoped that gofpdf has a bright future in the open
54source world. Due to Go’s promise of compatibility, gofpdf should
55continue to function without modification for a longer time than would
56be the case with many other languages.
57
58Forks should be based on the [last viable
59commit](https://github.com/jung-kurt/gofpdf/commit/603f56990463f011cb1dbb64ef7f872c1adc009a).
60Tools such as
61[active-forks](https://techgaun.github.io/active-forks/index.html#jung-kurt/gofpdf)
62can be used to select a fork that looks promising for your needs. If a
63particular fork looks like it has taken the lead in attracting
64followers, this README will be updated to point people in that
65direction.
66
67The efforts of all contributors to this project have been deeply
68appreciated. Best wishes to all of you.
69
70## Installation
71
72To install the package on your system, run
73
74``` shell
75go get github.com/jung-kurt/gofpdf
76```
77
78Later, to receive updates, run
79
80``` shell
81go get -u -v github.com/jung-kurt/gofpdf/...
82```
83
84## Quick Start
85
86The following Go code generates a simple PDF file.
87
88``` go
89pdf := gofpdf.New("P", "mm", "A4", "")
90pdf.AddPage()
91pdf.SetFont("Arial", "B", 16)
92pdf.Cell(40, 10, "Hello, world")
93err := pdf.OutputFileAndClose("hello.pdf")
94```
95
96See the functions in the
97[fpdf\_test.go](https://github.com/jung-kurt/gofpdf/blob/master/fpdf_test.go)
98file (shown as examples in this documentation) for more advanced PDF
99examples.
100
101## Errors
102
103If an error occurs in an Fpdf method, an internal error field is set.
104After this occurs, Fpdf method calls typically return without performing
105any operations and the error state is retained. This error management
106scheme facilitates PDF generation since individual method calls do not
107need to be examined for failure; it is generally sufficient to wait
108until after `Output()` is called. For the same reason, if an error
109occurs in the calling application during PDF generation, it may be
110desirable for the application to transfer the error to the Fpdf instance
111by calling the `SetError()` method or the `SetErrorf()` method. At any
112time during the life cycle of the Fpdf instance, the error state can be
113determined with a call to `Ok()` or `Err()`. The error itself can be
114retrieved with a call to `Error()`.
115
116## Conversion Notes
117
118This package is a relatively straightforward translation from the
119original [FPDF](http://www.fpdf.org/) library written in PHP (despite
120the caveat in the introduction to [Effective
121Go](https://golang.org/doc/effective_go.html)). The API names have been
122retained even though the Go idiom would suggest otherwise (for example,
123`pdf.GetX()` is used rather than simply `pdf.X()`). The similarity of
124the two libraries makes the original FPDF website a good source of
125information. It includes a forum and FAQ.
126
127However, some internal changes have been made. Page content is built up
128using buffers (of type bytes.Buffer) rather than repeated string
129concatenation. Errors are handled as explained above rather than
130panicking. Output is generated through an interface of type io.Writer or
131io.WriteCloser. A number of the original PHP methods behave differently
132based on the type of the arguments that are passed to them; in these
133cases additional methods have been exported to provide similar
134functionality. Font definition files are produced in JSON rather than
135PHP.
136
137## Example PDFs
138
139A side effect of running `go test ./...` is the production of a number
140of example PDFs. These can be found in the gofpdf/pdf directory after
141the tests complete.
142
143Please note that these examples run in the context of a test. In order
144run an example as a standalone application, you’ll need to examine
145[fpdf\_test.go](https://github.com/jung-kurt/gofpdf/blob/master/fpdf_test.go)
146for some helper routines, for example `exampleFilename()` and
147`summary()`.
148
149Example PDFs can be compared with reference copies in order to verify
150that they have been generated as expected. This comparison will be
151performed if a PDF with the same name as the example PDF is placed in
152the gofpdf/pdf/reference directory and if the third argument to
153`ComparePDFFiles()` in internal/example/example.go is true. (By default
154it is false.) The routine that summarizes an example will look for this
155file and, if found, will call `ComparePDFFiles()` to check the example
156PDF for equality with its reference PDF. If differences exist between
157the two files they will be printed to standard output and the test will
158fail. If the reference file is missing, the comparison is considered to
159succeed. In order to successfully compare two PDFs, the placement of
160internal resources must be consistent and the internal creation
161timestamps must be the same. To do this, the methods `SetCatalogSort()`
162and `SetCreationDate()` need to be called for both files. This is done
163automatically for all examples.
164
165## Nonstandard Fonts
166
167Nothing special is required to use the standard PDF fonts (courier,
168helvetica, times, zapfdingbats) in your documents other than calling
169`SetFont()`.
170
171You should use `AddUTF8Font()` or `AddUTF8FontFromBytes()` to add a
172TrueType UTF-8 encoded font. Use `RTL()` and `LTR()` methods switch
173between “right-to-left” and “left-to-right” mode.
174
175In order to use a different non-UTF-8 TrueType or Type1 font, you will
176need to generate a font definition file and, if the font will be
177embedded into PDFs, a compressed version of the font file. This is done
178by calling the MakeFont function or using the included makefont command
179line utility. To create the utility, cd into the makefont subdirectory
180and run “go build”. This will produce a standalone executable named
181makefont. Select the appropriate encoding file from the font
182subdirectory and run the command as in the following example.
183
184``` shell
185./makefont --embed --enc=../font/cp1252.map --dst=../font ../font/calligra.ttf
186```
187
188In your PDF generation code, call `AddFont()` to load the font and, as
189with the standard fonts, SetFont() to begin using it. Most examples,
190including the package example, demonstrate this method. Good sources of
191free, open-source fonts include [Google
192Fonts](https://fonts.google.com/) and [DejaVu
193Fonts](http://dejavu-fonts.org/).
194
195## Related Packages
196
197The [draw2d](https://github.com/llgcode/draw2d) package is a two
198dimensional vector graphics library that can generate output in
199different forms. It uses gofpdf for its document production mode.
200
201## Contributing Changes
202
203gofpdf is a global community effort and you are invited to make it even
204better. If you have implemented a new feature or corrected a problem,
205please consider contributing your change to the project. A contribution
206that does not directly pertain to the core functionality of gofpdf
207should be placed in its own directory directly beneath the `contrib`
208directory.
209
210Here are guidelines for making submissions. Your change should
211
212  - be compatible with the MIT License
213  - be properly documented
214  - be formatted with `go fmt`
215  - include an example in
216    [fpdf\_test.go](https://github.com/jung-kurt/gofpdf/blob/master/fpdf_test.go)
217    if appropriate
218  - conform to the standards of [golint](https://github.com/golang/lint)
219    and [go vet](https://golang.org/cmd/vet/), that is, `golint .` and
220    `go vet .` should not generate any warnings
221  - not diminish [test coverage](https://blog.golang.org/cover)
222
223[Pull requests](https://help.github.com/articles/using-pull-requests/)
224are the preferred means of accepting your changes.
225
226## License
227
228gofpdf is released under the MIT License. It is copyrighted by Kurt Jung
229and the contributors acknowledged below.
230
231## Acknowledgments
232
233This package’s code and documentation are closely derived from the
234[FPDF](http://www.fpdf.org/) library created by Olivier Plathey, and a
235number of font and image resources are copied directly from it. Bruno
236Michel has provided valuable assistance with the code. Drawing support
237is adapted from the FPDF geometric figures script by David Hernández
238Sanz. Transparency support is adapted from the FPDF transparency script
239by Martin Hall-May. Support for gradients and clipping is adapted from
240FPDF scripts by Andreas Würmser. Support for outline bookmarks is
241adapted from Olivier Plathey by Manuel Cornes. Layer support is adapted
242from Olivier Plathey. Support for transformations is adapted from the
243FPDF transformation script by Moritz Wagner and Andreas Würmser. PDF
244protection is adapted from the work of Klemen Vodopivec for the FPDF
245product. Lawrence Kesteloot provided code to allow an image’s extent to
246be determined prior to placement. Support for vertical alignment within
247a cell was provided by Stefan Schroeder. Ivan Daniluk generalized the
248font and image loading code to use the Reader interface while
249maintaining backward compatibility. Anthony Starks provided code for the
250Polygon function. Robert Lillack provided the Beziergon function and
251corrected some naming issues with the internal curve function. Claudio
252Felber provided implementations for dashed line drawing and generalized
253font loading. Stani Michiels provided support for multi-segment path
254drawing with smooth line joins, line join styles, enhanced fill modes,
255and has helped greatly with package presentation and tests. Templating
256is adapted by Marcus Downing from the FPDF\_Tpl library created by Jan
257Slabon and Setasign. Jelmer Snoeck contributed packages that generate a
258variety of barcodes and help with registering images on the web. Jelmer
259Snoek and Guillermo Pascual augmented the basic HTML functionality with
260aligned text. Kent Quirk implemented backwards-compatible support for
261reading DPI from images that support it, and for setting DPI manually
262and then having it properly taken into account when calculating image
263size. Paulo Coutinho provided support for static embedded fonts. Dan
264Meyers added support for embedded JavaScript. David Fish added a generic
265alias-replacement function to enable, among other things, table of
266contents functionality. Andy Bakun identified and corrected a problem in
267which the internal catalogs were not sorted stably. Paul Montag added
268encoding and decoding functionality for templates, including images that
269are embedded in templates; this allows templates to be stored
270independently of gofpdf. Paul also added support for page boxes used in
271printing PDF documents. Wojciech Matusiak added supported for word
272spacing. Artem Korotkiy added support of UTF-8 fonts. Dave Barnes added
273support for imported objects and templates. Brigham Thompson added
274support for rounded rectangles. Joe Westcott added underline
275functionality and optimized image storage. Benoit KUGLER contributed
276support for rectangles with corners of unequal radius, modification
277times, and for file attachments and annotations.
278
279## Roadmap
280
281  - Remove all legacy code page font support; use UTF-8 exclusively
282  - Improve test coverage as reported by the coverage tool.
283