From 7787aab8379e803ea227626604eb331a97c3cd3a Mon Sep 17 00:00:00 2001 From: Anna Novikova Date: Fri, 10 Oct 2025 11:01:33 +0200 Subject: [PATCH 1/3] Added example for text insertions/deletions. --- document/track-revisions/main.go | 53 ++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 document/track-revisions/main.go diff --git a/document/track-revisions/main.go b/document/track-revisions/main.go new file mode 100644 index 0000000..cb17e7a --- /dev/null +++ b/document/track-revisions/main.go @@ -0,0 +1,53 @@ +// Copyright 2025 FoxyUtils ehf. All rights reserved. + +package main + +import ( + "log" + "os" + "time" + + "github.com/unidoc/unioffice/v2/common/license" + "github.com/unidoc/unioffice/v2/document" + "github.com/unidoc/unioffice/v2/measurement" + "github.com/unidoc/unioffice/v2/schema/soo/wml" +) + +func init() { + if err := license.SetMeteredKey(os.Getenv("UNIDOC_LICENSE_API_KEY")); err != nil { + log.Fatalf("error: %s", err) + } +} + +func main() { + doc := document.New() + defer doc.Close() + + doc.Settings.X().TrackRevisions = wml.NewCT_OnOff() + + p := doc.AddParagraph() + p.SetAfterSpacing(measurement.Point * 12) + + pr := p.AddRun() + pr.AddText("This is some paragraph text.") + + currentTime := time.Now + author := "Author 1" + revisionNumber := "002773B1" + + pr.AddInsertedText("Some inserted text is here.", revisionNumber, author, currentTime, 0) + + p = doc.AddParagraph() + p.SetAfterSpacing(measurement.Point * 12) + + pr = p.AddRun() + pr.AddText("This is more paragraph text.") + + currentTime = time.Now + author = "Author 2" + revisionNumber = "" + + pr.AddDeletedText("Some deleted text is there.", revisionNumber, author, currentTime, 1) + + doc.SaveToFile("insertions_deletions.docx") +} From 15c51b85b01cf989060c64d57d3f5aa6c3a7972b Mon Sep 17 00:00:00 2001 From: Anna Novikova Date: Mon, 3 Nov 2025 11:47:43 +0100 Subject: [PATCH 2/3] Updated unioffice reference and fixed errors. --- document/track-revisions/main.go | 10 +++++--- go.mod | 4 +-- go.sum | 42 ++++++++++++-------------------- 3 files changed, 24 insertions(+), 32 deletions(-) diff --git a/document/track-revisions/main.go b/document/track-revisions/main.go index cb17e7a..9e06e76 100644 --- a/document/track-revisions/main.go +++ b/document/track-revisions/main.go @@ -31,11 +31,12 @@ func main() { pr := p.AddRun() pr.AddText("This is some paragraph text.") - currentTime := time.Now + currentTime := time.Now() author := "Author 1" revisionNumber := "002773B1" - pr.AddInsertedText("Some inserted text is here.", revisionNumber, author, currentTime, 0) + // Add insertion to current paragraph. + p.AddInsertedText("Some inserted text is here.", revisionNumber, author, currentTime, 0) p = doc.AddParagraph() p.SetAfterSpacing(measurement.Point * 12) @@ -43,11 +44,12 @@ func main() { pr = p.AddRun() pr.AddText("This is more paragraph text.") - currentTime = time.Now + currentTime = time.Now() author = "Author 2" revisionNumber = "" - pr.AddDeletedText("Some deleted text is there.", revisionNumber, author, currentTime, 1) + // Add deletion to current paragraph. + p.AddDeletedText("Some deleted text is there.", revisionNumber, author, currentTime, 1) doc.SaveToFile("insertions_deletions.docx") } diff --git a/go.mod b/go.mod index a548491..7b7baaa 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( github.com/disintegration/imaging v1.6.2 github.com/go-ole/go-ole v1.3.0 github.com/unidoc/unichart v0.5.1 - github.com/unidoc/unioffice/v2 v2.5.0 + github.com/unidoc/unioffice/v2 v2.6.0 github.com/unidoc/unipdf/v4 v4.3.0 ) @@ -15,9 +15,9 @@ require ( github.com/adrg/sysfont v0.1.2 // indirect github.com/adrg/xdg v0.5.3 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/gabriel-vasile/mimetype v1.4.8 // indirect github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect github.com/gorilla/i18n v0.0.0-20150820051429-8b358169da46 // indirect + github.com/h2non/filetype v1.1.3 // indirect github.com/llgcode/draw2d v0.0.0-20240627062922-0ed1ff131195 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/richardlehane/msoleps v1.0.4 // indirect diff --git a/go.sum b/go.sum index f705b71..8bd68fb 100644 --- a/go.sum +++ b/go.sum @@ -11,19 +11,22 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1ei82L+c= github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4= -github.com/gabriel-vasile/mimetype v1.4.8 h1:FfZ3gj38NjllZIeJAmMhr+qKL8Wu+nOoI3GqacKw1NM= -github.com/gabriel-vasile/mimetype v1.4.8/go.mod h1:ByKUIKGjh1ODkGM1asKUbQZOLGrPjydw3hYPU2YU9t8= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/gorilla/i18n v0.0.0-20150820051429-8b358169da46 h1:N+R2A3fGIr5GucoRMu2xpqyQWQlfY31orbofBCdjMz8= github.com/gorilla/i18n v0.0.0-20150820051429-8b358169da46/go.mod h1:2Yoiy15Cf7Q3NFwfaJquh7Mk1uGI09ytcD7CUhn8j7s= +github.com/h2non/filetype v1.1.3 h1:FKkx9QbD7HR/zjK1Ia5XiBsq9zdLi5Kf3zGyFTAFkGg= +github.com/h2non/filetype v1.1.3/go.mod h1:319b3zT68BvV+WRj7cwy856M2ehB3HqNOt6sy1HndBY= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/llgcode/draw2d v0.0.0-20240627062922-0ed1ff131195 h1:Vdz2cBh5Fw2MYHWi3ED2PraDQaWEUhNCr1XFHrP4N5A= github.com/llgcode/draw2d v0.0.0-20240627062922-0ed1ff131195/go.mod h1:1Vk0LDW6jG5cGc2D9RQUxHaE0vYhTvIwSo9mOL6K4/U= github.com/llgcode/ps v0.0.0-20210114104736-f4b0c5d1e02e h1:ZAvbj5hI/G/EbAYAcj4yCXUNiFKefEhH0qfImDDD0/8= +github.com/llgcode/ps v0.0.0-20210114104736-f4b0c5d1e02e/go.mod h1:1l8ky+Ew27CMX29uG+a2hNOKpeNYEQjjtiALiBlFQbY= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/richardlehane/msoleps v1.0.4 h1:WuESlvhX3gH2IHcd8UqyCuFY5yiq/GR/yqaSM/9/g00= @@ -38,8 +41,7 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= -github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/unidoc/emf v0.1.0 h1:Iz6NPQybwaMoJeApCTm3ISE75XPCirKmI/RLNNiLzhI= github.com/unidoc/emf v0.1.0/go.mod h1:Qc3u+zymqB+sWkwjyA3eQg5PyaLooI0bcmpjYVxfbZ0= @@ -48,52 +50,40 @@ github.com/unidoc/freetype v0.2.3/go.mod h1:mJ/Q7JnqEoWtajJVrV6S1InbRv0K/fJerPB5 github.com/unidoc/garabic v0.0.0-20220702200334-8c7cb25baa11 h1:kExUKrbi429KdVVuAc85z4P+W/Rk4bjGWB5KzZLl/l8= github.com/unidoc/garabic v0.0.0-20220702200334-8c7cb25baa11/go.mod h1:SX63w9Ww4+Z7E96B01OuG59SleQUb+m+dmapZ8o1Jac= github.com/unidoc/pkcs7 v0.0.0-20200411230602-d883fd70d1df/go.mod h1:UEzOZUEpJfDpywVJMUT8QiugqEZC29pDq7kdIZhWCr8= -github.com/unidoc/pkcs7 v0.2.0 h1:0Y0RJR5Zu7OuD+/l7bODXARn6b8Ev2G4A8lI4rzy9kg= -github.com/unidoc/pkcs7 v0.2.0/go.mod h1:UEzOZUEpJfDpywVJMUT8QiugqEZC29pDq7kdIZhWCr8= +github.com/unidoc/pkcs7 v0.3.0 h1:+RCopNCR8UoZtlf4bu4Y88O3j1MbvrLcOuQj/tbPLoU= github.com/unidoc/pkcs7 v0.3.0/go.mod h1:UEzOZUEpJfDpywVJMUT8QiugqEZC29pDq7kdIZhWCr8= github.com/unidoc/timestamp v0.0.0-20200412005513-91597fd3793a h1:RLtvUhe4DsUDl66m7MJ8OqBjq8jpWBXPK6/RKtqeTkc= github.com/unidoc/timestamp v0.0.0-20200412005513-91597fd3793a/go.mod h1:j+qMWZVpZFTvDey3zxUkSgPJZEX33tDgU/QIA0IzCUw= -github.com/unidoc/unichart v0.4.0 h1:uXk9ZjbqzKb8Lt2Qv2oM9D2ftNRXvezPevgxQhsTQys= -github.com/unidoc/unichart v0.4.0/go.mod h1:9QsE8RbS0fE7ndHNroeCEFkRPqqk47Qsoj6QSAtcwN0= +github.com/unidoc/unichart v0.5.1 h1:qnYavwBV5sg9NUF59KbMOqJdh2kA454nVxdDTPPtSz8= github.com/unidoc/unichart v0.5.1/go.mod h1:/8yJsL49OqBOyG53JFVZOwwDXDquo/ZRMkfz9fNsVgc= -github.com/unidoc/unioffice/v2 v2.3.0 h1:oZ5c49a4NnQUsmJkP67r9wbXBq2yrDsd4yb0enekNtQ= -github.com/unidoc/unioffice/v2 v2.3.0/go.mod h1:Xw8klmfQMI0/g98nn3snEIeYaMgvFdyAJDd6ddwu4RI= -github.com/unidoc/unioffice/v2 v2.4.1 h1:h/nQRggO3sBkc09GZFnGD1T7gyRgL02gEVW1tLZCQNs= -github.com/unidoc/unioffice/v2 v2.4.1/go.mod h1:Xw8klmfQMI0/g98nn3snEIeYaMgvFdyAJDd6ddwu4RI= -github.com/unidoc/unioffice/v2 v2.5.0 h1:uaNUPWBZe2Aq7mEx+p/qxhyKO/WfWYkkRhC+jpblFvg= -github.com/unidoc/unioffice/v2 v2.5.0/go.mod h1:nQyVO/FzQ9cIEKjFlwgunDF7P42Oj2eZydnZG9VmZlo= -github.com/unidoc/unipdf/v4 v4.0.0 h1:XxrrOMGLJ6HD7VBO6GpZL5wfoRDmLxawV+wkMXTuPeM= -github.com/unidoc/unipdf/v4 v4.0.0/go.mod h1:SbSYFUoutyBR+hLlsHyNiCzzcSVVuG10S5Xu8RIJ6EY= +github.com/unidoc/unioffice/v2 v2.6.0 h1:mnm2NdFKXk1AGgIreNWAhBSjlVhN8pVQj7dGJnOPJkc= +github.com/unidoc/unioffice/v2 v2.6.0/go.mod h1:nQyVO/FzQ9cIEKjFlwgunDF7P42Oj2eZydnZG9VmZlo= github.com/unidoc/unipdf/v4 v4.3.0 h1:eA4zjRHTULtV5thy3MausfFYDP1i59qGdsfxe709oUY= github.com/unidoc/unipdf/v4 v4.3.0/go.mod h1:oR0EX7TmS7KaAuzFQPA9t9HjbU4f2NbWMvzXNqtXo70= github.com/unidoc/unitype v0.5.1 h1:UwTX15K6bktwKocWVvLoijIeu4JAVEAIeFqMOjvxqQs= github.com/unidoc/unitype v0.5.1/go.mod h1:3dxbRL+f1otNqFQIRHho8fxdg3CcUKrqS8w1SXTsqcI= -golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus= -golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= +golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4= golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc= golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= -golang.org/x/image v0.24.0 h1:AN7zRgVsbvmTfNyqIbbOraYL8mSwcKncEj8ofjgzcMQ= -golang.org/x/image v0.24.0/go.mod h1:4b/ITuLfqYq1hqZcjofwctIhi7sZh2WaCjvsBNjjya8= +golang.org/x/image v0.30.0 h1:jD5RhkmVAnjqaCUXfbGBrn3lpxbknfN9w2UhHHU+5B4= golang.org/x/image v0.30.0/go.mod h1:SAEUTxCCMWSrJcCy/4HwavEsfZZJlYxeHLc6tTiAe/c= -golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= -golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= +golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= -golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= -golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= +golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da h1:noIWHXmPHxILtqtCOPIhSt0ABwskkZKjD3bXGnZGpNY= golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= From e07f3c7972640404208fdb19b1dbf90ce52f5369 Mon Sep 17 00:00:00 2001 From: Anna Novikova Date: Mon, 3 Nov 2025 11:58:59 +0100 Subject: [PATCH 3/3] Skip file for validation. --- .ci/skip_files | 3 ++- .../track-revisions/insertions_deletions.docx | Bin 0 -> 5206 bytes 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 document/track-revisions/insertions_deletions.docx diff --git a/.ci/skip_files b/.ci/skip_files index ab5eb2a..87d0ba9 100644 --- a/.ci/skip_files +++ b/.ci/skip_files @@ -3,4 +3,5 @@ chart.pptx lists.pptx picture.pptx several_slides.pptx -table.pptx \ No newline at end of file +table.pptx +insertions_deletions.docx \ No newline at end of file diff --git a/document/track-revisions/insertions_deletions.docx b/document/track-revisions/insertions_deletions.docx new file mode 100644 index 0000000000000000000000000000000000000000..afc25f6db099ad8f07b77437072fd5f69ddd5b51 GIT binary patch literal 5206 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 Ny&hq`Tm$-c`ajl}k+%Q< literal 0 HcmV?d00001