-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathdoc.go
104 lines (75 loc) · 3.48 KB
/
doc.go
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
94
95
96
97
98
99
100
101
102
103
104
/*
rm2pdf
MIT Licensed
RCL January 2020
Introduction
This programme attempts to create annotated A4 PDF files from reMarkable
tablet file groups (RM bundles), including .rm files recording marks.
Normally these files will be in a local directory, such as an xochitl
directory synchronised to a tablet over sshfs.
The programme takes as input either:
* The path to the PDF file which has had annotations made to it
* The path to the RM bundle with uuid, such as <path>/<uuid> with no
filename extension, together with a PDF template to use for the
background (a blank A4 template is provided in templates/A4.pdf).
The resulting PDF is layered with the background and .rm file layers
each in a separated PDF layer. The .rm file marks are stroked using the
fpdf PDF library, although .rm tilt and pressure characteristics are not
represented in the PDF output.
PDF files from sources such as Microsoft Word do not always work
well. It can help to rewrite them using the pdftk tool, e.g. by doing
pdftk word.pdf cat output word.pdf.pdftk \
&& mv word.pdf word.pdf.bkp \
&& mv word.pdf.pdftk word.pdf
Custom colours for some pens can be specified using the -c or --colours
switch, which overrides the default pen selection. A second -c switch
sets the colours on the second layer, and so on.
Example of processing an rm bundle without a pdf:
rm2pdf -t templates/A4.pdf \
testfiles/d34df12d-e72b-4939-a791-5b34b3a810e7 \
/tmp/output.pdf
Example of processing an rm bundle with a pdf, and per-layer colours:
rm2pdf -c chartreuse -c firebrick \
testfiles/cc8313bb-5fab-4ab5-af39-46e6d4160df3.pdf \
/tmp/output.pdf
General options:
rm2pdf [-v] [-c red] [-c green] [-c ...] [-t template] InputPath OutputFile
Warning: the OutputFile will be overwritten if it exists.
ReMarkable .rm file parser
The parser is a go port of reMarkable tablet "lines" or ".rm" file
parser, with binary decoding hints drawn from rm2svg
https://github.com/reHackable/maxio/blob/master/tools/rM2svg which in
turn refers to https://github.com/lschwetlick/maxio/tree/master/tools.
Python struct format codes referred to in the parser, such as "<{}sI"
are from rm2svg.
RMParser provides a python-like iterator based on bufio.Scan, which
iterates over the referenced reMarkable .rm file returning a data
structure consisting of each path with its associated layer and path
segments.
Usage example:
rm, err := rmparse.RMParse("filename.rm")
// start parsing; note that pdflayers are dealt with sequentially
for rm.Parse() {
path := rm.Path.Path
penName := StrokeMap[int(path.Pen)]
for s := 1; s <= int(path.NumSegments); s++ {
segment := rm.Path.Segments[s-1]
// do something with path and/or segment
}
}
PDF paths, strokes and colours
Pen selections are hard-coded in stroke.go with widths, opacities and
colours. The StrokeSetting interface "Width" is used to scale strokes
based on nothing more than what seems to be about right.
Resolving the page sizes and reMarkable output resolution was based on
the reMarkable png templates and viewing the reMarkable app's output x
and y widths. These dimensions are noted in pdf.go in PDF_WIDTH_IN_MM
and PDF_HEIGHT_IN_MM. Conversion from mm to points (MM_TO_RMPOINTS) and
from points to the resolution of the reMarkable tablet (PTS_2_RMPTS) is
also set in pdf.go. The theoretical conversion factor is slightly
altered based on the output from various tests, including those in the
testfiles directory.
To view the testfiles after processing use or alter the paths used in
the tests.
*/
package main