Compare commits

..

348 Commits

Author SHA1 Message Date
57984ca8a2 Merge branch 'hotfix/v9.2.1' into release/v9.3.0 2025-12-11 17:05:36 +03:00
a30f7dfdf4 Merge pull request 'Fix bug 65734' (#567) from fix/bug65734 into release/v9.3.0
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/core/pulls/567
2025-12-11 14:04:21 +00:00
b369c32e9e fix value array xlsx 2025-12-11 17:03:42 +03:00
40a4fa1a92 Fix bug 65734 2025-12-11 17:02:56 +03:00
2779542061 Merge branch 'hotfix/v9.2.1' into release/v9.3.0 2025-12-11 11:20:23 +03:00
3209c8e42e Merge pull request 'fix/fix-bugs-9.2.1' (#566) from fix/fix-bugs-9.2.1 into hotfix/v9.2.1
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/core/pulls/566
2025-12-11 08:16:12 +00:00
037057ea7a fix bug #78960
(cherry picked from commit bebb39a619)
2025-12-11 11:13:01 +03:00
d373a8cc4c fix bug #78953
(cherry picked from commit 84847f1e74)
2025-12-11 11:09:34 +03:00
13e2efe724 fix bug #78955
(cherry picked from commit 6ea64599bd)
2025-12-11 11:08:56 +03:00
b09d441987 fix bug #78958
(cherry picked from commit e15391ea35)
2025-12-11 11:06:44 +03:00
9e835d5cc1 Merge pull request 'For bug 79029' (#565) from fix/bug-79029 into release/v9.3.0
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/core/pulls/565
2025-12-11 07:24:25 +00:00
f75df05824 Fix SetDV for radiobutton 2025-12-11 10:14:13 +03:00
d7a1642a62 Merge pull request 'Fix bug 79005' (#564) from fixbugs/rtf into release/v9.3.0 2025-12-10 15:12:28 +00:00
d74899a116 Fix bug 79005 2025-12-10 18:08:20 +03:00
d0dfd6737c [x2t] Add m_sSigningKeyStorePath to params.xml and SIGNING_KEYSTORE_PASSPHRASE to env for pdf 2025-12-10 16:50:43 +03:00
3623b0970b Merge pull request 'Fix bug 78932' (#563) from fix/bug-78932 into release/v9.3.0
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/core/pulls/563
2025-12-10 11:38:48 +00:00
9fedabc0e2 Fix write Opt radiobutton at child 2025-12-10 12:46:52 +03:00
fa46455e74 Fix Opt radiobutton at child 2025-12-10 12:19:26 +03:00
9dacd4a548 Merge pull request 'fix bug #54521' (#562) from fix/bug54521 into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/core/pulls/562
2025-12-10 09:17:46 +00:00
fb8a72cd6b fix bug #54521 2025-12-10 15:01:52 +06:00
61311457be Merge pull request 'fix bug #78958' (#561) from fix/bug78958 into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/core/pulls/561
2025-12-09 12:33:45 +00:00
e15391ea35 fix bug #78958 2025-12-09 16:43:05 +06:00
fefeb483e5 Fix bug 78932 2025-12-09 12:56:53 +03:00
5c7ef5a6eb add rdValueData 2025-12-08 23:42:44 +03:00
fc110a004d Merge remote-tracking branch 'origin/feature/pdf-link' into develop 2025-12-08 11:33:57 +03:00
12d33fad53 Merge remote-tracking branch 'origin/develop' into feature/pdf-link 2025-12-08 11:31:42 +03:00
2534d2b5c9 Fix swap rectangle 2025-12-08 11:20:59 +03:00
7019b192bd Merge pull request 'fix bug #78955' (#558) from fix/bug78955 into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/core/pulls/558
2025-12-05 14:30:49 +00:00
ac97a5680b Merge pull request 'fix bug #78960' (#559) from fix/bug78960 into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/core/pulls/559
2025-12-05 14:24:41 +00:00
bebb39a619 fix bug #78960 2025-12-05 20:10:56 +06:00
d014383a6d Merge pull request 'fix/bug59965' (#557) from fix/bug45616 into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/core/pulls/557
2025-12-05 13:45:12 +00:00
f2023f626b fix/bug59965
fix bug #59965
2025-12-05 13:57:34 +03:00
6ea64599bd fix bug #78955 2025-12-05 16:09:45 +06:00
d1d94f481d . 2025-12-04 18:49:57 +03:00
82eb921f05 Merge pull request 'fix bug #78953' (#556) from fix/bug78953 into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/core/pulls/556
2025-12-04 15:22:13 +00:00
84847f1e74 fix bug #78953 2025-12-04 21:19:39 +06:00
8391667147 Merge pull request 'Fix bug #48033' (#554) from fix/rtf into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/core/pulls/554
2025-12-03 14:26:26 +00:00
39da47bc21 Fix bug #48033 2025-12-03 12:57:51 +03:00
3a201b8b28 Merge pull request 'fix bug #78778' (#553) from fix/bug78778 into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/core/pulls/553
2025-12-02 14:04:25 +00:00
bbfbe4a149 Merge remote-tracking branch 'origin/fix/bug-78854' into develop 2025-12-02 16:28:20 +03:00
0c1c57ccb3 Fix bug 78854 2025-12-02 16:27:25 +03:00
fa532edad6 Deferred Link resolution 2025-12-02 15:10:49 +03:00
df82306306 Merge remote-tracking branch 'origin/develop' into feature/pdf-link 2025-12-02 12:59:10 +03:00
7a3464b985 Fix test 2025-12-02 12:56:54 +03:00
49924e23ac AcroForm at the beginning 2025-12-02 12:56:07 +03:00
1eaac39e48 . 2025-12-01 22:34:28 +03:00
7624e24027 Merge remote-tracking branch 'origin/master' into develop 2025-12-01 21:53:15 +03:00
44ffa4b72e For bug 78854 2025-12-01 19:59:30 +03:00
10bdf2703a Merge pull request 'fix/bug69510' (#552) from fix/bug69510 into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/core/pulls/552
2025-12-01 16:09:59 +00:00
c488384dbc fix/bug69510
fix bug #69510
2025-12-01 18:57:08 +03:00
b1b3e1fb7c Merge branch release/v9.2.0 into master 2025-12-01 07:25:12 +00:00
d78487e0f5 . 2025-11-29 12:25:03 +03:00
5069b68247 fix build 2025-11-28 20:46:03 +03:00
86d0d2113e . 2025-11-28 17:30:28 +03:00
8f2b4e4153 Merge remote-tracking branch 'origin/feature/add-xls-writing' into develop 2025-11-28 15:03:05 +03:00
0be867c47d for bug #78766 2025-11-28 15:02:03 +03:00
78aae7e9d0 Merge pull request 'fix/bug76076' (#551) from fix/bug76076 into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/core/pulls/551
2025-11-28 11:58:23 +00:00
10e63543dc Merge pull request 'fix bug #77811' (#550) from fix/bug77811 into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/core/pulls/550
2025-11-28 11:57:22 +00:00
900cf01902 Merge pull request 'fix bug #78487' (#549) from fix/bug78487 into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/core/pulls/549
2025-11-28 11:56:50 +00:00
f6a52876ce Fix bug 78801 2025-11-27 18:26:36 +03:00
45ad566eb1 Merge pull request 'Fix bug #75486' (#548) from fix/rtf into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/core/pulls/548
2025-11-27 15:09:08 +00:00
5bbea51848 Fix bug #75486 2025-11-27 18:07:12 +03:00
28a1828000 fix bug #78778 2025-11-27 17:43:59 +06:00
816430e0e2 Generate doctrenderer embed 2025-11-27 13:40:37 +03:00
bf66c1d9c0 fix bug #78766 2025-11-27 11:39:26 +03:00
2a3982a884 Merge pull request 'Fix bug #69318' (#546) from fix/rtf into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/core/pulls/546
2025-11-27 08:12:46 +00:00
b5fb8a34dc fix shared formulas conversion 2025-11-26 19:54:45 +06:00
11f0c937f4 Fix bug #69318 2025-11-26 16:28:07 +03:00
5e435d322f Merge branch 'develop' into feature/add-xls-writing 2025-11-26 17:03:08 +06:00
842d17f79e Merge pull request 'fix/bug37832' (#543) from fix/bug37832 into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/core/pulls/543
2025-11-25 13:55:07 +00:00
d48a28fe1d Fix Redact merge image&form 2025-11-25 16:42:16 +03:00
2a22c5e1f3 fix/bug37832
fix bug #37832
2025-11-25 15:30:06 +03:00
629a35213e Merge remote-tracking branch 'origin/release/v9.2.0' into develop 2025-11-24 22:30:18 +03:00
a056b2e4a9 Merge pull request 'Fix direction determination' (#540) from fix/boolean-op into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/core/pulls/540
2025-11-24 14:46:42 +00:00
2dd35a7d81 Fix direction determination 2025-11-24 17:31:01 +03:00
080d89c8a0 Merge remote-tracking branch 'origin/fix/bug69510' into develop 2025-11-24 15:57:45 +03:00
1809f7f4c2 Merge remote-tracking branch 'origin/fix/pdf-redact' into develop 2025-11-24 15:16:17 +03:00
4bfd4f0a08 Fix Encrypt with Redact 2025-11-24 15:13:35 +03:00
3ef5651dfd fix/bug69510
fix bug #69510
2025-11-24 14:52:55 +03:00
8231809ef0 fix bug #78487 2025-11-24 16:42:46 +06:00
7f3d073d63 Fix hierarchy of heading levels 2025-11-24 13:12:55 +03:00
5f09e91944 . 2025-11-23 12:39:22 +03:00
f4359e0b7f no message 2025-11-22 17:25:10 +03:00
ca9cf4ee61 . 2025-11-21 16:58:09 +03:00
f52538f66a . 2025-11-21 15:52:56 +03:00
15359be125 fix bug #77811 2025-11-21 16:10:49 +06:00
fc2a12c6f2 Merge remote-tracking branch 'origin/fix/bug69510' into develop 2025-11-21 10:34:42 +03:00
42030372fe fix logging 2025-11-21 10:29:36 +03:00
bbf6c2d8e9 fix/bug69510
fix bug #69510
2025-11-20 23:42:25 +03:00
cb15cc18eb Merge pull request 'fix/bug69510' (#538) from fix/bug69510 into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/core/pulls/538
2025-11-20 11:46:32 +00:00
389bf976a9 fix/bug69510
fix bug #69510
2025-11-20 14:41:10 +03:00
4d1b516cc9 Merge remote-tracking branch 'origin/feature/pdf-password' into develop 2025-11-20 13:28:08 +03:00
600a59c966 Fix Open with owner password 2025-11-20 13:11:37 +03:00
66b2f3c828 Fix bug 78602 2025-11-20 12:48:09 +03:00
64e077da19 For bug 76845 2025-11-20 12:08:43 +03:00
499fe52b8c Merge remote-tracking branch 'origin/release/v9.2.0' into develop 2025-11-20 11:31:17 +03:00
6f9c376040 Create CheckPerm 2025-11-20 10:41:43 +03:00
1e18352e77 Create CheckOwnerPassword 2025-11-19 18:23:23 +03:00
c3f4f32702 fix read alternative drawing 2025-11-19 18:17:33 +03:00
6df7a7e01e Merge pull request 'Fix bug #53908' (#534) from fix/rtf into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/core/pulls/534
2025-11-19 13:54:00 +00:00
6167f23a08 Fix bug #53908 2025-11-19 15:36:42 +03:00
7c544729bc Fix drawForm 2025-11-19 13:23:51 +03:00
d60c102dbb fix xlst->xlsb conversion 2025-11-18 19:41:06 +06:00
d709598563 Fix SaveRGBAToStream 2025-11-18 10:32:38 +03:00
7afad1fe49 fix bug #76076 2025-11-14 21:27:49 +06:00
aa53d6302f Fix RedactOutputDev::drawImageMask 2025-11-14 17:09:22 +03:00
7f665b96a5 Create Image for InlineImg 2025-11-13 18:00:15 +03:00
8926c15908 fix numFmt conversion 2025-11-13 19:49:14 +06:00
033c45b7a0 . 2025-11-13 16:40:30 +03:00
16d75fe498 Merge branch 'develop' into feature/add-xls-writing 2025-11-13 15:02:17 +06:00
fe2e1568fa Merge pull request 'fix/bug51597' (#524) from fix/bug51597 into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/core/pulls/524
2025-11-12 18:27:24 +00:00
7e057bab6e fix list fmla conversion 2025-11-12 19:31:42 +06:00
4bf8308bff Merge branch 'develop' into feature/add-xls-writing 2025-11-12 14:16:45 +06:00
6af3f2fe35 Do RedactOutputDev::drawImageMask 2025-11-11 17:05:02 +03:00
b61d8df484 fix ptgArea3d conversion 2025-11-11 16:25:20 +06:00
fc3748e516 for bug #40743 2025-11-11 11:26:46 +03:00
468dcd7ba4 Merge remote-tracking branch 'origin/release/v9.2.0' into develop 2025-11-11 10:21:53 +03:00
7048f132c6 Fix action GoTo FitR 2025-11-10 13:13:52 +03:00
238cdc8084 Merge branch 'develop' into feature/add-xls-writing 2025-11-10 15:08:26 +06:00
580283ef45 Merge remote-tracking branch 'origin/fix/rtf' into develop 2025-11-07 16:50:47 +03:00
fd648a7dd3 Merge remote-tracking branch 'origin/release/v9.2.0' into fix/pdf-redact
# Conflicts:
#	PdfFile/SrcReader/Adaptors.cpp
2025-11-07 14:03:51 +03:00
4d4f3be717 Fix bug #77975 2025-11-07 11:32:31 +03:00
6e481f6a34 Merge pull request 'fix/bug51965' (#515) from fix/bug51965 into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/core/pulls/515
2025-11-07 06:47:08 +00:00
2059e4bb95 fix/bug51965
fix bug #51965
2025-11-07 00:58:31 +03:00
6a5186c411 fix 2025-11-06 14:55:28 +03:00
b5ea9d68e2 fix defined names fmlas xls conversion 2025-11-06 16:24:04 +06:00
71e96930c9 Fix read Action 2025-11-06 12:08:23 +03:00
d9be0df8fb Fix data validations conversion 2025-11-06 15:00:38 +06:00
3cee4b0212 Merge pull request 'For bug 77757' (#511) from rtfbugs/fix into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/core/pulls/511
2025-11-05 12:22:52 +00:00
cfb62d599d For bug 77757 2025-11-05 13:55:43 +03:00
919d117a1f Fix ptgList conversion 2025-11-05 16:14:58 +06:00
d4b289d0ca Fix RedactOutputDev::drawSoftMaskedImage 2025-11-05 12:58:48 +03:00
270e8e41dd fix ptg list xls conversion 2025-11-01 19:44:50 +06:00
751b82dc51 fix dxfs conversion 2025-11-01 13:09:43 +06:00
320e30c857 Do RedactOutputDev::drawSoftMaskedImage 2025-10-31 17:13:38 +03:00
a6898c8235 Merge branch 'develop' into feature/add-xls-writing 2025-10-31 13:58:33 +06:00
463ca05404 Do RedactOutputDev::drawImage 2025-10-30 18:44:06 +03:00
548cee436a Merge remote-tracking branch 'origin/hotfix/v9.2.0' into develop 2025-10-30 15:13:03 +03:00
b1a36d546b fix ptgName writing 2025-10-30 18:06:11 +06:00
07d3f371a2 Merge pull request 'fix/bug77123' (#506) from fix/bug77123 into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/core/pulls/506
2025-10-30 11:02:46 +00:00
278cac8a61 Merge branch 'fix/bug77123' into fix/bug51965 2025-10-30 13:56:13 +03:00
07fd1e87d7 Merge branch 'develop' into fix/bug51965 2025-10-30 13:55:14 +03:00
817ee4dde0 fix/bug77123
fix bug #77123
2025-10-30 13:50:56 +03:00
d93bd27896 Do RedactOutputDev::drawImage 2025-10-29 18:05:39 +03:00
be56209baf Fix empty cells conversion 2025-10-29 20:10:34 +06:00
6a573d0da7 Merge branch 'develop' into feature/add-xls-writing 2025-10-29 16:12:17 +06:00
e936e330d9 Do RedactOutputDev::drawForm 2025-10-28 18:21:00 +03:00
bda95fc03d Fix column styles conversion 2025-10-28 20:04:27 +06:00
c0c0289ffb Merge remote-tracking branch 'origin/Rtf/fixbugs' into develop 2025-10-28 15:57:46 +03:00
5c110799a6 . 2025-10-28 15:51:41 +03:00
1b6c81407b Merge branch 'develop' of https://git.onlyoffice.com/ONLYOFFICE/core into develop 2025-10-28 15:46:25 +03:00
1e0d662838 Fix previous 2025-10-28 15:35:46 +03:00
ae2680c419 fix defined names formula conversion 2025-10-28 18:18:57 +06:00
1b61353b2e Merge branch release/v9.1.0 into develop 2025-10-28 11:58:11 +00:00
7777048790 Merge branch release/v9.1.0 into master 2025-10-28 11:58:09 +00:00
fd6c0907bd Merge pull request 'fix/bug77123' (#504) from fix/bug77123 into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/core/pulls/504
2025-10-28 11:33:11 +00:00
2aef5daf12 fix/bug77123 2025-10-28 14:06:05 +03:00
317e21af6a Merge remote-tracking branch 'origin/hotfix/v9.2.0' into develop 2025-10-28 11:29:01 +03:00
4f6daaae67 fix/bug77123
fix correct receipt page parametrs
2025-10-28 10:51:52 +03:00
8203492999 Merge branch 'develop' into feature/add-xls-writing 2025-10-28 13:19:12 +06:00
910f453ce8 Do RedactOutputDev::drawForm 2025-10-27 19:17:36 +03:00
54fb5a7891 remove smart_ptr for IFileConteiner (rels) 2025-10-27 18:54:00 +03:00
93b96e5555 fix bug #77324 2025-10-27 18:53:09 +03:00
9e57f8c3b1 Improve txt 2025-10-27 17:47:58 +03:00
57221c0e32 fix/bug77123
fix bug when the tabs were longer than available width
2025-10-27 16:27:48 +03:00
76b7099a37 Fix merged cells conversion 2025-10-27 19:04:55 +06:00
85f428fda6 fix formula conversion 2025-10-27 16:49:25 +06:00
d97a62442f Improve txt file writer 2025-10-27 13:40:48 +03:00
41fb12d58b Merge branch 'develop' into feature/add-xls-writing 2025-10-27 13:36:21 +06:00
ed0811d8ab For bug #50842 2025-10-25 11:52:35 +03:00
84cc97f035 Merge remote-tracking branch 'origin/hotfix/v9.2.0' into develop 2025-10-25 11:41:47 +03:00
984807d611 fix pivot cache id conversion 2025-10-24 19:23:02 +06:00
dbd92bfdfa Fix Link Border 2025-10-24 15:01:51 +03:00
2796fbed8b Optimization read drawSoftMaskedImage 2025-10-24 12:10:33 +03:00
9ccbb25acd Improve txt file writer 2025-10-23 17:48:08 +03:00
954d86ed0f fix sxdb conversion 2025-10-23 20:01:28 +06:00
1dd5eb3368 Write Link annots 2025-10-22 16:19:43 +03:00
47e0a0c9e7 Improve txt file reader 2025-10-22 12:37:03 +03:00
5a491aea3e Read Link annots 2025-10-21 17:04:30 +03:00
2d7c5ec2df fix defined names conversion 2025-10-21 19:03:16 +06:00
38079e8692 comment unfinished functionality 2025-10-20 16:01:45 +06:00
ac75675367 optimized theme colors conversion 2025-10-20 15:41:44 +06:00
a0fc634f5f Merge branch 'develop' into feature/add-xls-writing 2025-10-20 14:03:42 +06:00
2ebade4413 add theme colors conversion 2025-10-17 21:38:28 +06:00
5e9f99e960 For bug #50842 2025-10-17 11:59:06 +03:00
a67935908a Merge remote-tracking branch 'origin/master' into develop 2025-10-16 18:57:38 +03:00
da1bc5d2d6 add theme colors registration 2025-10-16 20:33:32 +06:00
9d5388a7bf fix pivotCache id conversion 2025-10-15 20:38:36 +06:00
2cdb04656d Fix pivotfrt writing 2025-10-15 15:16:39 +06:00
3934c28eb8 Fix pivot table conversion 2025-10-14 21:17:58 +06:00
f6337bb12c add pivot table styles conversion 2025-10-14 18:30:59 +06:00
1d88830b38 fix/bug51597
fix bug when document convert from odt to docx and docx to odt and after this document cells width will smaller then before convertation.
2025-10-14 12:33:13 +03:00
9737038776 add addlStyles writing 2025-10-13 19:19:11 +06:00
915c3497e4 add pivotAddl writing 2025-10-13 16:26:19 +06:00
53c4f320f6 add pivot frt writing 2025-10-10 19:33:23 +06:00
1aec69965d add dateType pivot oper parsing 2025-10-10 15:15:22 +06:00
afdac778b0 Merge branch 'develop' into feature/add-xls-writing 2025-10-10 13:34:45 +06:00
fbc42a514f Fix pivots conversion 2025-10-09 19:46:21 +06:00
c567c9739c Merge remote-tracking branch 'origin/release/v9.1.0' into develop 2025-10-09 12:00:09 +03:00
686b719bff add pivot cache records conversion 2025-10-08 20:12:59 +06:00
f05fa7c0ee add pivotCache source conversion 2025-10-07 20:59:28 +06:00
0d646a32c4 add workbook pivotCache conversion 2025-10-07 17:09:10 +06:00
917c33e76d Fix pivot cache conversion 2025-10-06 21:08:26 +06:00
1937895a56 add sqlTypes conversion 2025-10-06 18:14:34 +06:00
01fbf07c9e add pivot field properties conversion 2025-10-06 16:56:13 +06:00
d208215814 Merge branch 'develop' into feature/add-xls-writing 2025-10-06 13:15:13 +06:00
c45c63f914 Merge pull request 'release/v9.1.0' (#474) from release/v9.1.0 into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/core/pulls/474
2025-10-04 19:25:57 +00:00
5c5a18de0d add pivotCache properties conversion 2025-10-02 20:04:29 +06:00
9f24bda011 add pivotCache files conversion 2025-10-02 18:13:24 +06:00
fdb9eaa2a5 Add pivotCache stream writing 2025-10-02 15:41:11 +06:00
3e9b0ffbda add default params for SXEx 2025-10-02 14:30:16 +06:00
eb2ba042ef add pivotEx default writing 2025-10-01 21:22:55 +06:00
1111f421d9 Fix sxli conversion 2025-10-01 19:24:36 +06:00
e2bda52737 fix sxvd conversion 2025-10-01 17:38:08 +06:00
6c9c2cf538 fix pivot view header conversion 2025-10-01 17:13:56 +06:00
62d826d8c6 Merge branch 'develop' into feature/add-xls-writing 2025-10-01 14:05:17 +06:00
dfbdb869d7 add row&column items conversion 2025-09-30 15:04:03 +06:00
ed7a50855e Merge remote-tracking branch 'origin/release/v9.1.0' into develop 2025-09-29 21:58:01 +03:00
526a21da57 Merge branch 'develop' into feature/add-xls-writing 2025-09-29 17:06:24 +06:00
fb6bda209b add pivotIvd conversion 2025-09-29 17:04:36 +06:00
4b0f79a1ab add sxdi conversion 2025-09-29 16:00:11 +06:00
e5946892c9 add pivot field items conversion 2025-09-26 20:37:04 +06:00
d399027127 Add pivotField conversion 2025-09-26 19:31:23 +06:00
2e732ce62f add sxview conversion 2025-09-26 15:59:28 +06:00
44e6774c5a add pivot table writing 2025-09-25 18:37:33 +06:00
7ddb363d60 fix build 2025-09-25 13:19:47 +03:00
ecd333e238 Merge pull request 'feature/compound2' (#452) from feature/compound2 into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/core/pulls/452
2025-09-25 09:27:18 +00:00
b377493ecb Merge branch 'develop' into feature/compound_any 2025-09-25 12:23:12 +03:00
afeeeab564 Merge remote-tracking branch 'origin/release/v9.1.0' into develop 2025-09-25 10:23:12 +03:00
460abc0d55 fix xls color conversion 2025-09-24 20:48:11 +06:00
01b2aaedb2 add table styles conversion 2025-09-23 20:41:56 +06:00
580c896b72 fix table conversion 2025-09-23 18:13:47 +06:00
03a1d9fa4c add table conversion 2025-09-22 19:37:14 +06:00
61d199a0c1 add list12 writing 2025-09-19 16:16:00 +06:00
4ea31dcb00 Merge remote-tracking branch 'origin/release/v9.1.0' into develop 2025-09-18 19:07:44 +03:00
54a0c7f231 add feature11 writing 2025-09-18 20:36:54 +06:00
a4d60a1ae1 fix list parsed formula 2025-09-18 19:09:18 +06:00
b7b3e0dd65 add feat11field parts writing 2025-09-18 19:08:52 +06:00
c28a6bf1ea add feat11fieldData writing 2025-09-18 17:57:14 +06:00
9f24254cc7 add feat11 writing 2025-09-18 14:20:32 +06:00
e105eca426 add tablestyle element conversion 2025-09-17 19:51:02 +06:00
02a923afb4 add table styles conversion 2025-09-17 18:06:07 +06:00
c7a0996a6c Fix condfmt colors conversion 2025-09-16 21:33:48 +06:00
6d27231e15 add OfficeArtFOPT writing 2025-09-15 21:11:32 +06:00
a2a5ef8fcd add author writing to notes 2025-09-15 19:20:20 +06:00
1c877ebe59 add spgroup writing 2025-09-15 17:48:06 +06:00
f03248ca86 fix TextObject writing 2025-09-12 16:47:46 +06:00
a4005412a7 Merge branch 'develop' into feature/add-xls-writing 2025-09-12 13:37:30 +06:00
e50016259a add textObject processing 2025-09-11 21:38:36 +06:00
d5a6c935e5 add obj specifying for comment 2025-09-11 17:56:50 +06:00
aa3d4cb3ce add drawing preparation 2025-09-11 16:20:34 +06:00
73fa9b6aac Merge pull request 'fix bug 74748' (#439) from fix/bug-74748 into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/core/pulls/439
2025-09-11 08:54:43 +00:00
c9a0d6e4e5 Merge branch hotfix/v9.0.4 into develop 2025-09-11 08:40:08 +00:00
130de28e4b Add comments conversion 2025-09-10 18:10:17 +06:00
cd53c06be3 fix bug 74748 2025-09-09 17:53:21 +03:00
122a54f510 add textObjectWriting 2025-09-09 18:45:39 +06:00
b425405744 add gboData writing 2025-09-08 17:36:02 +06:00
28ffd27fca add FtLbsData writing 2025-09-08 16:11:51 +06:00
9bc9d86dd6 add pict fmla writing 2025-09-08 14:43:35 +06:00
a1891b597f add pictFmla writing 2025-09-05 21:24:54 +06:00
bf9ce4f535 add ft macro writing 2025-09-05 19:10:52 +06:00
508d8f25db add obj writing 2025-09-05 18:09:11 +06:00
efbfcaed37 add OfficeArtSpContainer writing 2025-09-04 20:54:51 +06:00
d1fc31ac28 add OfficeArtFRITContainer writing 2025-09-04 18:50:50 +06:00
b8efe6c554 add fdg writing 2025-09-04 17:26:28 +06:00
13410f8467 add objects writing 2025-09-03 19:37:32 +06:00
3a389147dd add dbb writing 2025-09-03 15:13:04 +06:00
ba203f734d add fdb writing 2025-09-02 20:19:02 +06:00
758454747d add sxformula writing 2025-09-02 16:46:39 +06:00
bf175e92a3 add sxdb writing 2025-09-01 20:02:35 +06:00
0c9b5821e7 add pivotcache stream writing 2025-09-01 19:29:29 +06:00
98dae842ae Add data validations conversion 2025-09-01 18:26:48 +06:00
ff53c1b474 Add others template params for cf12 conversion 2025-08-25 21:12:27 +06:00
334f9602b4 add conditional formatting filter conversion 2025-08-22 20:06:20 +06:00
fed94358fe add multistate conversion 2025-08-22 17:44:53 +06:00
89b669e319 fix databar conversion 2025-08-22 15:16:06 +06:00
db213d3ae4 add cf databar conversion 2025-08-21 21:35:04 +06:00
79df81301f add colorScale cond fmt conversion 2025-08-21 18:52:07 +06:00
197bbf7027 Add aligment conversion to conditional formatting 2025-08-20 18:17:03 +06:00
a466592bc2 add protection conversion 2025-08-20 14:48:03 +06:00
4bce73d81d Add numfmt convesion to dxf 2025-08-20 14:06:50 +06:00
ed13e54d26 Add dxf border conversion 2025-08-19 19:18:01 +06:00
e371f7ccf1 add font condfmt conversion 2025-08-18 20:42:46 +06:00
14a0e4713c add fills conversion to conditional formatting 2025-08-18 17:03:07 +06:00
74b9a426c2 fix/bug-with break-columns
update comments
2025-08-18 13:27:29 +03:00
43c7e2c9a8 Add global info using in conversion 2025-08-15 20:55:34 +06:00
39b9c28607 fix dxfn conversion 2025-08-15 17:34:07 +06:00
6e57d7e4e7 fix cfParsed formula conversion 2025-08-14 20:40:20 +06:00
f831d9a22d add condFmt conversion 2025-08-14 17:56:01 +06:00
7f54430813 Add dxf conversion 2025-08-13 17:21:03 +06:00
ea42899b9e Merge branch 'develop' into feature/add-xls-writing 2025-08-13 13:20:11 +06:00
b420fd731f Add borders style conversion 2025-08-12 20:59:33 +06:00
dbbf4d04f9 Add blanc cell processing 2025-08-12 20:16:16 +06:00
62132c27bd add fills conversion 2025-08-11 17:09:43 +06:00
e4449d7aa9 Add font color conversion 2025-08-08 18:55:02 +06:00
cb304293b7 Add palette conversion 2025-08-08 14:20:56 +06:00
ffb62243a9 Merge branch 'develop' into feature/add-xls-writing 2025-08-08 13:27:43 +06:00
63a80580cc fix number value conversion 2025-08-07 20:04:19 +06:00
fed142690b Add data consolidation conversion 2025-08-07 15:13:09 +06:00
8d368ca91c Merge branch 'develop' into feature/add-xls-writing 2025-08-07 13:07:10 +06:00
2cc2434982 fix continue record writing 2025-08-06 20:27:16 +06:00
f5989b979a Fix autofilter record writing 2025-08-06 18:44:53 +06:00
62955d5f6e Add autofilter writing 2025-08-05 21:35:39 +06:00
9fc3fcabcb Fix sort data record writing 2025-08-04 19:01:27 +06:00
6af0b89c1d Add sort state conversion 2025-08-04 17:48:04 +06:00
c34b9e00e5 Merge branch 'develop' into feature/add-xls-writing 2025-08-04 13:14:17 +06:00
e715da8680 Add header and footer conversion 2025-08-01 18:33:49 +06:00
7a26c345c5 Fix margin conversion 2025-08-01 16:42:57 +06:00
2a6e76a2bc Add pagesetup conversion 2025-08-01 15:42:05 +06:00
adfc79938d Merge branch 'develop' into feature/add-xls-writing 2025-08-01 14:00:31 +06:00
c3ce1d2756 Fix hlink conversion 2025-07-31 19:14:09 +06:00
cf5208d6a5 Add hyperlinks conversion 2025-07-31 13:53:14 +06:00
56e6a0a3b8 Merge branch 'develop' into feature/add-xls-writing 2025-07-31 13:06:10 +06:00
0a7ad2f560 Add worksheet protection conversion 2025-07-30 17:25:53 +06:00
fede5921e1 add workbook protection conversion 2025-07-30 16:54:57 +06:00
897ea781b7 Fix font conversion 2025-07-30 15:45:59 +06:00
f95014f46f Add phonetic string conversion 2025-07-29 17:25:33 +06:00
92fae52a6d Fix rich string xls conversion 2025-07-28 21:52:30 +06:00
afb0f44af2 Add crun shared string conversion 2025-07-28 20:49:38 +06:00
af20b1f63d fix cell xf index writiong 2025-07-28 18:34:52 +06:00
c779654a58 Add cell styles conversion 2025-07-25 21:04:32 +06:00
d1c99891c6 Add xfs conversion 2025-07-25 18:12:27 +06:00
ffc94bf455 Add numFmts conversion 2025-07-25 15:27:53 +06:00
680c83853a Add fonts conversion 2025-07-25 14:44:08 +06:00
33e698242c Merge branch 'develop' into feature/add-xls-writing 2025-07-25 13:16:39 +06:00
e8ad643a0e Add bookviewsConversion 2025-07-24 21:24:07 +06:00
609e3bc158 Add worksheet view conversion 2025-07-24 20:50:37 +06:00
7e51dd143a Add colls & merged cells conversion 2025-07-24 15:02:36 +06:00
31d65dea7c Merge branch 'develop' into feature/add-xls-writing 2025-07-24 13:02:00 +06:00
89172a9047 add relsSorting 2025-07-23 20:45:04 +06:00
0103717241 add dimensions conversion 2025-07-23 20:44:54 +06:00
c012662402 Add array formula writing 2025-07-23 17:21:30 +06:00
00c3085a90 Merge branch 'develop' into feature/add-xls-writing 2025-07-22 17:37:35 +06:00
f1fa861c8a Add shared formula conversion 2025-07-22 17:35:57 +06:00
c37f96da2d Add formula conversion 2025-07-21 19:20:37 +06:00
89473c5ba0 Add simple shared strings conversion 2025-07-18 20:03:37 +06:00
07afc6e4c3 add simple cells conversion 2025-07-18 16:16:03 +06:00
34c34018a0 Merge branch 'develop' into feature/add-xls-writing 2025-07-18 14:48:55 +06:00
05dd636a1c Add cellType processing function 2025-07-17 21:36:00 +06:00
e6158043b9 add sheet data conversion 2025-07-17 18:42:22 +06:00
cfd1dcc3ee Add worksheets conversion 2025-07-17 17:14:12 +06:00
7a2944ce58 Add defined names conversion 2025-07-17 15:26:34 +06:00
8a11fa5aac Merge branch 'develop' into feature/add-xls-writing 2025-07-17 13:03:44 +06:00
aa2127b55f Add bundlesheet conversion 2025-07-16 20:28:40 +06:00
86a2d66d83 Add xlsx2xls conversion 2025-07-16 19:13:12 +06:00
d6ed01e1df fix compound2 function 2023-09-04 12:25:28 +03:00
0fcf29eddc fix compound converter 2023-09-01 18:01:58 +03:00
474a500819 Add compound file to checker 2023-08-31 18:15:27 +03:00
515 changed files with 12892 additions and 2456 deletions

View File

@ -90,7 +90,7 @@ static std::wstring convertUtf16ToWString(const UTF16 * Data, int nLength)
return std::wstring();
}
std::wstring wstr ((wchar_t *) pStrUtf32);
std::wstring wstr ((wchar_t *) pStrUtf32, nLength);
delete [] pStrUtf32;
return wstr;

View File

@ -1,5 +0,0 @@
<<<<<<<
if((c >= 'a' && c <= 'z') || (c>= 'A' && c<= 'Z') || (c >= '0' && c<= '9')){
=======
if((c >= 'a' && c <= 'z') || (c>= 'A' && c<= 'Z') || (c >= '0' && c<= '9') || ('-' == c) || ('_' == c) || ('.' == c) || ('~' == c)){
>>>>>>>

View File

@ -74,6 +74,7 @@ public:
bool isDocFormatFile(const std::wstring& fileName);
bool isXlsFormatFile(const std::wstring& fileName);
bool isCompoundFile (POLE::Storage* storage);
bool isOleObjectFile(POLE::Storage* storage);
bool isDocFormatFile(POLE::Storage* storage);
bool isXlsFormatFile(POLE::Storage* storage);

View File

@ -552,6 +552,15 @@ bool COfficeFileFormatChecker::isPptFormatFile(POLE::Storage *storage)
return true;
}
bool COfficeFileFormatChecker::isCompoundFile(POLE::Storage* storage)
{
if (storage == NULL) return false;
if (storage->GetAllStreams(L"/").size() == 1) return true;
return false;
}
std::wstring COfficeFileFormatChecker::getDocumentID(const std::wstring &_fileName)
{
#if defined(_WIN32) || defined(_WIN32_WCE) || defined(_WIN64)
@ -749,6 +758,11 @@ bool COfficeFileFormatChecker::isOfficeFile(const std::wstring &_fileName)
nFileType = AVS_OFFICESTUDIO_FILE_OTHER_MS_VBAPROJECT;
return true;
}
else if (isCompoundFile(&storage))
{
nFileType = AVS_OFFICESTUDIO_FILE_OTHER_COMPOUND;
return true;
}
else if (isHwpFile(&storage))
{
nFileType = AVS_OFFICESTUDIO_FILE_DOCUMENT_HWP;

View File

@ -136,6 +136,7 @@
#define AVS_OFFICESTUDIO_FILE_OTHER_MS_MITCRYPTO AVS_OFFICESTUDIO_FILE_OTHER + 0x000b
#define AVS_OFFICESTUDIO_FILE_OTHER_MS_VBAPROJECT AVS_OFFICESTUDIO_FILE_OTHER + 0x000c
#define AVS_OFFICESTUDIO_FILE_OTHER_PACKAGE_IN_OLE AVS_OFFICESTUDIO_FILE_OTHER + 0x000d
#define AVS_OFFICESTUDIO_FILE_OTHER_COMPOUND AVS_OFFICESTUDIO_FILE_OTHER + 0x000e
#define AVS_OFFICESTUDIO_FILE_TEAMLAB 0x1000
#define AVS_OFFICESTUDIO_FILE_TEAMLAB_DOCY AVS_OFFICESTUDIO_FILE_TEAMLAB + 0x0001

View File

@ -60,6 +60,7 @@ namespace NSSystemUtils
static const wchar_t* gc_EnvModified = L"MODIFIED";
static const wchar_t* gc_EnvMemoryLimit = L"X2T_MEMORY_LIMIT";
static const wchar_t* gc_EnvMemoryLimitDefault = L"4GiB";
static const wchar_t* gc_EnvSigningKeystorePassphrase = L"SIGNING_KEYSTORE_PASSPHRASE";
KERNEL_DECL std::string GetEnvVariableA(const std::wstring& strName);
KERNEL_DECL std::wstring GetEnvVariable(const std::wstring& strName);

View File

@ -245,7 +245,18 @@ public:
return 0;
}
bool CheckOwnerPassword(const std::wstring& sPassword)
{
if (m_nType == 0)
return ((CPdfFile*)m_pFile)->CheckOwnerPassword(sPassword);
return true;
}
bool CheckPerm(int nPerm)
{
if (m_nType == 0)
return ((CPdfFile*)m_pFile)->CheckPerm(nPerm);
return true;
}
BYTE* GetInfo()
{
NSWasm::CData oRes;

View File

@ -737,11 +737,13 @@ CBooleanOperations::CBooleanOperations(const CGraphicsPath& path1,
const CGraphicsPath& path2,
BooleanOpType op,
long fillType,
bool isLuminosity) :
bool isLuminosity,
bool isSelf) :
Op(op),
Close1(path1.Is_poly_closed()),
Close2(path2.Is_poly_closed()),
IsLuminosity(isLuminosity),
IsSelf(isSelf),
FillType(fillType),
Path1(path1),
Path2(path2)
@ -784,10 +786,9 @@ bool CBooleanOperations::IsSelfInters(const CGraphicsPath& p)
void CBooleanOperations::TraceBoolean()
{
bool reverse = false;
bool self = Path1 == Path2;
if (((Op == Subtraction || Op == Exclusion) ^
Path1.IsClockwise() ^
Path2.IsClockwise()) && !self)
Path2.IsClockwise()) && !IsSelf)
reverse = true;
PreparePath(Path1, 1, Segments1, Curves1);
@ -798,7 +799,7 @@ void CBooleanOperations::TraceBoolean()
GetIntersection();
if (self)
if (IsSelf)
{
if (Op == Subtraction)
return;
@ -823,6 +824,11 @@ void CBooleanOperations::TraceBoolean()
CreateNewPath(adj_matr);
return;
}
else if (Path1 == Path2)
{
Result = std::move(Path1);
return;
}
if (!Locations.empty())
{
@ -2355,7 +2361,7 @@ CGraphicsPath CalcBooleanOperation(const CGraphicsPath& path1,
CBooleanOperations o;
if (i > skip_end2 && o.IsSelfInters(paths2[i]))
{
CBooleanOperations operation(paths2[i], paths2[i], Intersection, fillType, isLuminosity);
CBooleanOperations operation(paths2[i], paths2[i], Intersection, fillType, isLuminosity, true);
CGraphicsPath p = std::move(operation.GetResult());
std::vector<CGraphicsPath> tmp_paths = p.GetSubPaths();
@ -2370,7 +2376,7 @@ CGraphicsPath CalcBooleanOperation(const CGraphicsPath& path1,
CBooleanOperations o2;
if (j > skip_end1 && o2.IsSelfInters(paths1[j]))
{
CBooleanOperations operation(paths1[j], paths1[j], Intersection, fillType, isLuminosity);
CBooleanOperations operation(paths1[j], paths1[j], Intersection, fillType, isLuminosity, true);
CGraphicsPath p = std::move(operation.GetResult());
std::vector<CGraphicsPath> tmp_paths = p.GetSubPaths();
@ -2380,7 +2386,7 @@ CGraphicsPath CalcBooleanOperation(const CGraphicsPath& path1,
paths1.insert(paths1.begin() + i + k, tmp_paths[k]);
}
CBooleanOperations operation(paths1[j], paths2[i], op, fillType, isLuminosity);
CBooleanOperations operation(paths1[j], paths2[i], op, fillType, isLuminosity, false);
paths.push_back(operation.GetResult());
}

View File

@ -108,7 +108,7 @@ namespace Aggplus
{
public:
CBooleanOperations() {};
CBooleanOperations(const CGraphicsPath& path1, const CGraphicsPath& path2, BooleanOpType op, long fillType, bool isLuminosity);
CBooleanOperations(const CGraphicsPath& path1, const CGraphicsPath& path2, BooleanOpType op, long fillType, bool isLuminosity, bool isSelf);
~CBooleanOperations();
CGraphicsPath&& GetResult();
bool IsSelfInters(const CGraphicsPath& p);
@ -166,6 +166,7 @@ namespace Aggplus
bool Close1 = true;
bool Close2 = true;
bool IsLuminosity = false;
bool IsSelf = false;
// c_nStroke, c_nWindingFillMode, c_nEvenOddFillMode
long FillType = c_nWindingFillMode;

View File

@ -886,17 +886,17 @@ namespace Aggplus
if (isCurve)
{
std::vector<PointD> points = GetPoints(idx, 4);
area = (points[3].Y - points[0].Y) * (points[1].X + points[2].X)
- (points[3].X - points[0].X) * (points[1].Y + points[2].Y)
+ points[1].Y * (points[0].X - points[2].X)
- points[1].X * (points[0].Y - points[2].Y)
+ points[3].Y * (points[2].X + points[0].X / 3.0)
- points[3].X * (points[2].Y + points[0].Y / 3.0);
area = 3.0 * (points[3].Y - points[0].Y) * (points[1].X + points[2].X)
- (points[3].X - points[0].X) * (points[1].Y + points[2].Y)
+ points[1].Y * (points[0].X - points[2].X)
- points[1].X * (points[0].Y - points[2].Y)
+ points[3].Y * (points[2].X + points[0].X / 3.0)
- points[3].X * (points[2].Y + points[0].Y / 3.0) / 20.0;
}
else
{
std::vector<PointD> points = GetPoints(idx, 2);
area = 4.0 * (points[1].Y * points[0].X - points[1].X * points[0].Y) / 3.0;
area = (points[1].Y * points[0].X - points[1].X * points[0].Y) / 2.0;
}
return area;

View File

@ -46,6 +46,92 @@
// void Set(const std::wstring& ws) { m_ws = ws; }
// const std::wstring& Get() { return m_ws; }
CAnnotFieldInfo::CActionFieldPr* ReadAction(NSOnlineOfficeBinToPdf::CBufferReader* pReader)
{
CAnnotFieldInfo::CActionFieldPr* pRes = new CAnnotFieldInfo::CActionFieldPr();
pRes->nActionType = pReader->ReadByte();
switch (pRes->nActionType)
{
case 14: // JavaScript
{
pRes->wsStr1 = pReader->ReadString();
break;
}
case 1: // GoTo
{
pRes->nInt1 = pReader->ReadInt();
pRes->nKind = pReader->ReadByte();
switch (pRes->nKind)
{
case 0:
case 2:
case 3:
case 6:
case 7:
{
pRes->nFlags = pReader->ReadByte();
if (pRes->nFlags & (1 << 0))
pRes->dD[0] = pReader->ReadDouble();
if (pRes->nFlags & (1 << 1))
pRes->dD[1] = pReader->ReadDouble();
if (pRes->nFlags & (1 << 2))
pRes->dD[2] = pReader->ReadDouble();
break;
}
case 4:
{
pRes->dD[0] = pReader->ReadDouble();
pRes->dD[1] = pReader->ReadDouble();
pRes->dD[2] = pReader->ReadDouble();
pRes->dD[3] = pReader->ReadDouble();
break;
}
case 1:
case 5:
default:
{
break;
}
}
break;
}
case 10: // Named
{
pRes->wsStr1 = pReader->ReadString();
break;
}
case 6: // URI
{
pRes->wsStr1 = pReader->ReadString();
break;
}
case 9: // Hide
{
pRes->nKind = pReader->ReadByte();
int n = pReader->ReadInt();
pRes->arrStr.reserve(n);
for (int i = 0; i < n; ++i)
pRes->arrStr.push_back(pReader->ReadString());
break;
}
case 12: // ResetForm
{
pRes->nInt1 = pReader->ReadInt();
int n = pReader->ReadInt();
pRes->arrStr.reserve(n);
for (int i = 0; i < n; ++i)
pRes->arrStr.push_back(pReader->ReadString());
break;
}
}
if (pReader->ReadByte())
pRes->pNext = ReadAction(pReader);
return pRes;
}
CAnnotFieldInfo::CAnnotFieldInfo() : IAdvancedCommand(AdvancedCommandType::Annotaion)
{
m_nType = EAnnotType::Unknown;
@ -77,6 +163,7 @@ CAnnotFieldInfo::CAnnotFieldInfo() : IAdvancedCommand(AdvancedCommandType::Annot
m_pCaretPr = NULL;
m_pStampPr = NULL;
m_pRedactPr = NULL;
m_pLinkPr = NULL;
m_pWidgetPr = NULL;
}
CAnnotFieldInfo::~CAnnotFieldInfo()
@ -93,6 +180,7 @@ CAnnotFieldInfo::~CAnnotFieldInfo()
RELEASEOBJECT(m_pCaretPr);
RELEASEOBJECT(m_pStampPr);
RELEASEOBJECT(m_pRedactPr);
RELEASEOBJECT(m_pLinkPr);
RELEASEOBJECT(m_pWidgetPr);
}
@ -113,6 +201,12 @@ void CAnnotFieldInfo::SetType(int nType)
m_pTextPr = new CAnnotFieldInfo::CTextAnnotPr();
break;
}
case EAnnotType::Link:
{
RELEASEOBJECT(m_pLinkPr);
m_pLinkPr = new CAnnotFieldInfo::CLinkAnnotPr();
break;
}
case EAnnotType::FreeText:
{
CreateMarkup();
@ -305,6 +399,10 @@ bool CAnnotFieldInfo::IsRedact() const
{
return (m_nType == 25);
}
bool CAnnotFieldInfo::IsLink() const
{
return (m_nType == 1);
}
CAnnotFieldInfo::CMarkupAnnotPr* CAnnotFieldInfo::GetMarkupAnnotPr() { return m_pMarkupPr; }
CAnnotFieldInfo::CTextAnnotPr* CAnnotFieldInfo::GetTextAnnotPr() { return m_pTextPr; }
@ -318,6 +416,7 @@ CAnnotFieldInfo::CFreeTextAnnotPr* CAnnotFieldInfo::GetFreeTextAnnotPr()
CAnnotFieldInfo::CCaretAnnotPr* CAnnotFieldInfo::GetCaretAnnotPr() { return m_pCaretPr; }
CAnnotFieldInfo::CStampAnnotPr* CAnnotFieldInfo::GetStampAnnotPr() { return m_pStampPr; }
CAnnotFieldInfo::CRedactAnnotPr* CAnnotFieldInfo::GetRedactAnnotPr() { return m_pRedactPr; }
CAnnotFieldInfo::CLinkAnnotPr* CAnnotFieldInfo::GetLinkAnnotPr() { return m_pLinkPr; }
CAnnotFieldInfo::CWidgetAnnotPr* CAnnotFieldInfo::GetWidgetAnnotPr() { return m_pWidgetPr; }
bool CAnnotFieldInfo::Read(NSOnlineOfficeBinToPdf::CBufferReader* pReader, IMetafileToRenderter* pCorrector)
@ -412,6 +511,8 @@ bool CAnnotFieldInfo::Read(NSOnlineOfficeBinToPdf::CBufferReader* pReader, IMeta
m_pPopupPr->Read(pReader);
else if (IsWidget())
m_pWidgetPr->Read(pReader, nType);
else if (IsLink())
m_pLinkPr->Read(pReader);
return m_nType != -1;
}
@ -721,6 +822,45 @@ void CAnnotFieldInfo::CRedactAnnotPr::Read(NSOnlineOfficeBinToPdf::CBufferReader
}
}
CAnnotFieldInfo::CLinkAnnotPr::CLinkAnnotPr()
{
m_pAction = NULL;
m_pPA = NULL;
}
CAnnotFieldInfo::CLinkAnnotPr::~CLinkAnnotPr()
{
RELEASEOBJECT(m_pAction);
RELEASEOBJECT(m_pPA);
}
BYTE CAnnotFieldInfo::CLinkAnnotPr::GetH() const { return m_nH; }
int CAnnotFieldInfo::CLinkAnnotPr::GetFlags() const { return m_nFlags; }
const std::vector<double>& CAnnotFieldInfo::CLinkAnnotPr::GetQuadPoints() { return m_arrQuadPoints; }
CAnnotFieldInfo::CActionFieldPr* CAnnotFieldInfo::CLinkAnnotPr::GetA() { return m_pAction; }
CAnnotFieldInfo::CActionFieldPr* CAnnotFieldInfo::CLinkAnnotPr::GetPA() { return m_pPA; }
void CAnnotFieldInfo::CLinkAnnotPr::Read(NSOnlineOfficeBinToPdf::CBufferReader* pReader)
{
m_nFlags = pReader->ReadInt();
if (m_nFlags & (1 << 0))
{
pReader->ReadString();
m_pAction = ReadAction(pReader);
}
if (m_nFlags & (1 << 1))
{
pReader->ReadString();
m_pPA = ReadAction(pReader);
}
if (m_nFlags & (1 << 2))
m_nH = pReader->ReadByte();
if (m_nFlags & (1 << 3))
{
int n = pReader->ReadInt();
m_arrQuadPoints.reserve(n);
for (int i = 0; i < n; ++i)
m_arrQuadPoints.push_back(pReader->ReadDouble());
}
}
bool CAnnotFieldInfo::CPopupAnnotPr::IsOpen() const { return m_bOpen; }
int CAnnotFieldInfo::CPopupAnnotPr::GetFlag() const { return m_nFlag; }
int CAnnotFieldInfo::CPopupAnnotPr::GetParentID() const { return m_nParentID; }
@ -752,7 +892,7 @@ const std::wstring& CAnnotFieldInfo::CWidgetAnnotPr::GetFontKey() { return m_w
const std::vector<double>& CAnnotFieldInfo::CWidgetAnnotPr::GetTC() { return m_arrTC; }
const std::vector<double>& CAnnotFieldInfo::CWidgetAnnotPr::GetBC() { return m_arrBC; }
const std::vector<double>& CAnnotFieldInfo::CWidgetAnnotPr::GetBG() { return m_arrBG; }
const std::vector<CAnnotFieldInfo::CWidgetAnnotPr::CActionWidget*>& CAnnotFieldInfo::CWidgetAnnotPr::GetActions() { return m_arrAction; }
const std::vector<CAnnotFieldInfo::CActionFieldPr*>& CAnnotFieldInfo::CWidgetAnnotPr::GetActions() { return m_arrAction; }
CAnnotFieldInfo::CWidgetAnnotPr::CButtonWidgetPr* CAnnotFieldInfo::CWidgetAnnotPr::GetButtonWidgetPr() { return m_pButtonPr; }
CAnnotFieldInfo::CWidgetAnnotPr::CTextWidgetPr* CAnnotFieldInfo::CWidgetAnnotPr::GetTextWidgetPr() { return m_pTextPr; }
CAnnotFieldInfo::CWidgetAnnotPr::CChoiceWidgetPr* CAnnotFieldInfo::CWidgetAnnotPr::GetChoiceWidgetPr() { return m_pChoicePr; }
@ -812,93 +952,8 @@ CAnnotFieldInfo::CWidgetAnnotPr::~CWidgetAnnotPr()
RELEASEOBJECT(m_arrAction[i]);
}
CAnnotFieldInfo::CWidgetAnnotPr::CActionWidget::CActionWidget() : pNext(NULL) {}
CAnnotFieldInfo::CWidgetAnnotPr::CActionWidget::~CActionWidget() { RELEASEOBJECT(pNext); }
CAnnotFieldInfo::CWidgetAnnotPr::CActionWidget* ReadAction(NSOnlineOfficeBinToPdf::CBufferReader* pReader)
{
CAnnotFieldInfo::CWidgetAnnotPr::CActionWidget* pRes = new CAnnotFieldInfo::CWidgetAnnotPr::CActionWidget();
pRes->nActionType = pReader->ReadByte();
switch (pRes->nActionType)
{
case 14: // JavaScript
{
pRes->wsStr1 = pReader->ReadString();
break;
}
case 1: // GoTo
{
pRes->nInt1 = pReader->ReadInt();
pRes->nKind = pReader->ReadByte();
switch (pRes->nKind)
{
case 0:
case 2:
case 3:
case 6:
case 7:
{
pRes->nFlags = pReader->ReadByte();
if (pRes->nFlags & (1 << 0))
pRes->dD[0] = pReader->ReadDouble();
if (pRes->nFlags & (1 << 1))
pRes->dD[1] = pReader->ReadDouble();
if (pRes->nFlags & (1 << 2))
pRes->dD[2] = pReader->ReadDouble();
break;
}
case 4:
{
pRes->dD[0] = pReader->ReadDouble();
pRes->dD[1] = pReader->ReadDouble();
pRes->dD[2] = pReader->ReadDouble();
pRes->dD[3] = pReader->ReadDouble();
break;
}
case 1:
case 5:
default:
{
break;
}
}
break;
}
case 10: // Named
{
pRes->wsStr1 = pReader->ReadString();
break;
}
case 6: // URI
{
pRes->wsStr1 = pReader->ReadString();
break;
}
case 9: // Hide
{
pRes->nKind = pReader->ReadByte();
int n = pReader->ReadInt();
pRes->arrStr.reserve(n);
for (int i = 0; i < n; ++i)
pRes->arrStr.push_back(pReader->ReadString());
break;
}
case 12: // ResetForm
{
pRes->nInt1 = pReader->ReadInt();
int n = pReader->ReadInt();
pRes->arrStr.reserve(n);
for (int i = 0; i < n; ++i)
pRes->arrStr.push_back(pReader->ReadString());
break;
}
}
if (pReader->ReadByte())
pRes->pNext = ReadAction(pReader);
return pRes;
}
CAnnotFieldInfo::CActionFieldPr::CActionFieldPr() : pNext(NULL) {}
CAnnotFieldInfo::CActionFieldPr::~CActionFieldPr() { RELEASEOBJECT(pNext); }
void CAnnotFieldInfo::CWidgetAnnotPr::Read(NSOnlineOfficeBinToPdf::CBufferReader* pReader, BYTE nType)
{
m_wsFN = pReader->ReadString();
@ -957,7 +1012,7 @@ void CAnnotFieldInfo::CWidgetAnnotPr::Read(NSOnlineOfficeBinToPdf::CBufferReader
for (int i = 0; i < nAction; ++i)
{
std::wstring wsType = pReader->ReadString();
CAnnotFieldInfo::CWidgetAnnotPr::CActionWidget* pA = ReadAction(pReader);
CAnnotFieldInfo::CActionFieldPr* pA = ReadAction(pReader);
if (pA)
{
pA->wsType = wsType;
@ -987,6 +1042,7 @@ const std::wstring& CAnnotFieldInfo::CWidgetAnnotPr::CButtonWidgetPr::GetCA() {
const std::wstring& CAnnotFieldInfo::CWidgetAnnotPr::CButtonWidgetPr::GetRC() { return m_wsRC; }
const std::wstring& CAnnotFieldInfo::CWidgetAnnotPr::CButtonWidgetPr::GetAC() { return m_wsAC; }
const std::wstring& CAnnotFieldInfo::CWidgetAnnotPr::CButtonWidgetPr::GetAP_N_Yes() { return m_wsAP_N_Yes; }
const std::vector< std::pair<std::wstring, std::wstring> >& CAnnotFieldInfo::CWidgetAnnotPr::CButtonWidgetPr::GetOpt() { return m_arrOpt; }
void CAnnotFieldInfo::CWidgetAnnotPr::CButtonWidgetPr::Read(NSOnlineOfficeBinToPdf::CBufferReader* pReader, BYTE nType, int nFlags)
{
if (nType == 27)
@ -1027,6 +1083,17 @@ void CAnnotFieldInfo::CWidgetAnnotPr::CButtonWidgetPr::Read(NSOnlineOfficeBinToP
if (nFlags & (1 << 9))
m_wsV = pReader->ReadString();
m_nStyle = pReader->ReadByte();
if (nFlags & (1 << 10))
{
int n = pReader->ReadInt();
m_arrOpt.reserve(n);
for (int i = 0; i < n; ++i)
{
std::wstring s1 = pReader->ReadString();
std::wstring s2 = pReader->ReadString();
m_arrOpt.push_back(std::make_pair(s1, s2));
}
}
if (nFlags & (1 << 14))
m_wsAP_N_Yes = pReader->ReadString();
}
@ -1192,7 +1259,7 @@ bool CWidgetsInfo::Read(NSOnlineOfficeBinToPdf::CBufferReader* pReader, IMetafil
for (int i = 0; i < nAction; ++i)
{
std::wstring wsType = pReader->ReadString();
CAnnotFieldInfo::CWidgetAnnotPr::CActionWidget* pA = ReadAction(pReader);
CAnnotFieldInfo::CActionFieldPr* pA = ReadAction(pReader);
if (pA)
{
pA->wsType = wsType;

View File

@ -70,6 +70,23 @@ public:
WidgetSignature = 33
};
class GRAPHICS_DECL CActionFieldPr
{
public:
CActionFieldPr();
~CActionFieldPr();
BYTE nKind;
BYTE nFlags;
BYTE nActionType;
int nInt1;
double dD[4]{};
std::wstring wsType;
std::wstring wsStr1;
std::vector<std::wstring> arrStr;
CActionFieldPr* pNext;
};
class GRAPHICS_DECL CWidgetAnnotPr
{
public:
@ -90,6 +107,7 @@ public:
const std::wstring& GetRC();
const std::wstring& GetAC();
const std::wstring& GetAP_N_Yes();
const std::vector< std::pair<std::wstring, std::wstring> >& GetOpt();
void Read(NSOnlineOfficeBinToPdf::CBufferReader* pReader, BYTE nType, int nFlags);
@ -108,6 +126,7 @@ public:
std::wstring m_wsRC;
std::wstring m_wsAC;
std::wstring m_wsAP_N_Yes;
std::vector< std::pair<std::wstring, std::wstring> > m_arrOpt;
};
class GRAPHICS_DECL CTextWidgetPr
@ -159,23 +178,6 @@ public:
};
class GRAPHICS_DECL CActionWidget
{
public:
CActionWidget();
~CActionWidget();
BYTE nKind;
BYTE nFlags;
BYTE nActionType;
int nInt1;
double dD[4]{};
std::wstring wsType;
std::wstring wsStr1;
std::vector<std::wstring> arrStr;
CActionWidget* pNext;
};
CWidgetAnnotPr(BYTE nType);
~CWidgetAnnotPr();
@ -199,7 +201,7 @@ public:
const std::vector<double>& GetTC();
const std::vector<double>& GetBC();
const std::vector<double>& GetBG();
const std::vector<CActionWidget*>& GetActions();
const std::vector<CActionFieldPr*>& GetActions();
CButtonWidgetPr* GetButtonWidgetPr();
CTextWidgetPr* GetTextWidgetPr();
@ -229,7 +231,7 @@ public:
std::vector<double> m_arrTC;
std::vector<double> m_arrBC;
std::vector<double> m_arrBG;
std::vector<CActionWidget*> m_arrAction;
std::vector<CActionFieldPr*> m_arrAction;
CButtonWidgetPr* m_pButtonPr;
CTextWidgetPr* m_pTextPr;
@ -389,7 +391,7 @@ public:
{
public:
bool IsOpen() const;
int GetFlag() const;
int GetFlag() const;
int GetParentID() const;
void Read(NSOnlineOfficeBinToPdf::CBufferReader* pReader);
@ -478,6 +480,28 @@ public:
std::vector<double> m_arrQuadPoints;
};
class GRAPHICS_DECL CLinkAnnotPr
{
public:
CLinkAnnotPr();
~CLinkAnnotPr();
BYTE GetH() const;
int GetFlags() const;
const std::vector<double>& GetQuadPoints();
CActionFieldPr* GetA();
CActionFieldPr* GetPA();
void Read(NSOnlineOfficeBinToPdf::CBufferReader* pReader);
private:
BYTE m_nH;
int m_nFlags;
std::vector<double> m_arrQuadPoints;
CActionFieldPr* m_pAction;
CActionFieldPr* m_pPA;
};
CAnnotFieldInfo();
virtual ~CAnnotFieldInfo();
@ -518,6 +542,7 @@ public:
bool IsCaret() const;
bool IsStamp() const;
bool IsRedact() const;
bool IsLink() const;
CMarkupAnnotPr* GetMarkupAnnotPr();
CTextAnnotPr* GetTextAnnotPr();
@ -531,6 +556,7 @@ public:
CCaretAnnotPr* GetCaretAnnotPr();
CStampAnnotPr* GetStampAnnotPr();
CRedactAnnotPr* GetRedactAnnotPr();
CLinkAnnotPr* GetLinkAnnotPr();
CWidgetAnnotPr* GetWidgetAnnotPr();
bool Read(NSOnlineOfficeBinToPdf::CBufferReader* pReader, IMetafileToRenderter* pCorrector);
@ -576,6 +602,7 @@ private:
CCaretAnnotPr* m_pCaretPr;
CStampAnnotPr* m_pStampPr;
CRedactAnnotPr* m_pRedactPr;
CLinkAnnotPr* m_pLinkPr;
CWidgetAnnotPr* m_pWidgetPr;
};
@ -610,7 +637,7 @@ public:
std::wstring sTU;
std::vector<int> arrI;
std::vector<std::wstring> arrV;
std::vector<CAnnotFieldInfo::CWidgetAnnotPr::CActionWidget*> arrAction;
std::vector<CAnnotFieldInfo::CActionFieldPr*> arrAction;
std::vector< std::pair<std::wstring, std::wstring> > arrOpt;
};

View File

@ -179,7 +179,6 @@ CHeadings::CHeading::CHeading()
nPage = 0;
dX = 0.0;
dY = 0.0;
pParent = NULL;
}
CHeadings::CHeading::~CHeading()
{
@ -196,35 +195,26 @@ CHeadings::~CHeadings()
const std::vector<CHeadings::CHeading*>& CHeadings::GetHeading() { return m_arrHeading; }
bool CHeadings::Read(NSOnlineOfficeBinToPdf::CBufferReader* pReader, IMetafileToRenderter* pCorrector)
{
int nPredLevel = 0, nHeaderLevel = 0;
std::vector<CHeading*>* arrHeading = &m_arrHeading;
CHeading* pParent = NULL;
std::vector<CHeading*> arrParentStack;
int nHeadings = pReader->ReadInt();
for (int i = 0; i < nHeadings; ++i)
{
int nLevel = pReader->ReadInt();
if (nLevel > nPredLevel && i > 0)
{
nHeaderLevel = nPredLevel;
pParent = arrHeading->back();
arrHeading = &pParent->arrHeading;
}
else if (nLevel < nPredLevel && nLevel <= nHeaderLevel)
{
nHeaderLevel = nLevel;
pParent = pParent ? pParent->pParent : NULL;
arrHeading = pParent ? &pParent->arrHeading : &m_arrHeading;
}
nPredLevel = nLevel;
CHeading* pHeading = new CHeading();
pHeading->nPage = pReader->ReadInt();
pHeading->dX = pReader->ReadDouble();
pHeading->dY = pReader->ReadDouble();
pHeading->wsTitle = pReader->ReadString();
pHeading->pParent = pParent;
arrHeading->push_back(pHeading);
while (arrParentStack.size() > nLevel)
arrParentStack.pop_back();
if (arrParentStack.empty())
m_arrHeading.push_back(pHeading);
else
arrParentStack.back()->arrHeading.push_back(pHeading);
arrParentStack.push_back(pHeading);
}
return true;
}

View File

@ -181,7 +181,6 @@ public:
int nPage;
double dX;
double dY;
CHeading* pParent;
std::vector<CHeading*> arrHeading;
CHeading();

View File

@ -56,6 +56,8 @@
"_UnmergePages",
"_RedactPage",
"_UndoRedact",
"_CheckOwnerPassword",
"_CheckPerm",
"_GetImageBase64",
"_GetImageBase64Len",
"_GetImageBase64Ptr",

View File

@ -145,6 +145,14 @@ CFile.prototype["isNeedPassword"] = function()
{
return this._isNeedPassword;
};
CFile.prototype["CheckOwnerPassword"] = function(password)
{
return this._CheckOwnerPassword(password);
};
CFile.prototype["CheckPerm"] = function(perm)
{
return this._CheckPerm(perm);
};
CFile.prototype["SplitPages"] = function(arrOriginIndex, arrayBufferChanges)
{
let ptr = this._SplitPages(arrOriginIndex, arrayBufferChanges);
@ -413,9 +421,9 @@ function readAction(reader, rec, readDoubleFunc, readStringFunc)
case 4:
{
rec["left"] = readDoubleFunc.call(reader);
rec["bottom"] = readDoubleFunc.call(reader);
rec["top"] = readDoubleFunc.call(reader);
rec["right"] = readDoubleFunc.call(reader);
rec["top"] = readDoubleFunc.call(reader);
rec["bottom"] = readDoubleFunc.call(reader);
break;
}
case 1:
@ -1027,6 +1035,33 @@ function readAnnotType(reader, rec, readDoubleFunc, readDouble2Func, readStringF
rec["font"]["style"] = reader.readInt();
}
}
// Link
else if (rec["type"] == 1)
{
flags = reader.readInt();
if (flags & (1 << 0))
{
rec["A"] = {};
readAction(reader, rec["A"], readDoubleFunc, readStringFunc);
}
if (flags & (1 << 1))
{
rec["PA"] = {};
readAction(reader, rec["PA"], readDoubleFunc, readStringFunc);
}
// Selection mode - H
// 0 - none, 1 - invert, 2 - push, 3 - outline
if (flags & (1 << 2))
rec["highlight"] = reader.readByte();
// QuadPoints
if (flags & (1 << 3))
{
let n = reader.readInt();
rec["QuadPoints"] = [];
for (let i = 0; i < n; ++i)
rec["QuadPoints"].push(readDoubleFunc.call(reader));
}
}
}
function readWidgetType(reader, rec, readDoubleFunc, readDouble2Func, readStringFunc, isRead = false)
{
@ -1171,6 +1206,20 @@ function readWidgetType(reader, rec, readDoubleFunc, readDouble2Func, readString
rec["value"] = readStringFunc.call(reader);
// 0 - check, 1 - cross, 2 - diamond, 3 - circle, 4 - star, 5 - square
rec["style"] = reader.readByte();
if (flags & (1 << 10))
{
let n = reader.readInt();
rec["opt"] = [];
for (let i = 0; i < n; ++i)
{
let opt1 = readStringFunc.call(reader);
let opt2 = readStringFunc.call(reader);
if (opt1 == "")
rec["opt"].push(opt2);
else
rec["opt"].push([opt2, opt1]);
}
}
if (flags & (1 << 14))
rec["ExportValue"] = readStringFunc.call(reader);
// 12.7.4.2.1

View File

@ -146,6 +146,16 @@ CFile.prototype._UndoRedact = function()
return g_native_drawing_file["UndoRedact"]();
};
CFile.prototype._CheckOwnerPassword = function(password)
{
return true;
}
CFile.prototype._CheckPerm = function(perm)
{
return true;
}
// FONTS
CFile.prototype._isNeedCMap = function()
{

View File

@ -224,6 +224,29 @@ CFile.prototype._UndoRedact = function()
return Module["_UndoRedact"](this.nativeFile) == 1;
};
CFile.prototype._CheckOwnerPassword = function(password)
{
let passwordPtr = 0;
if (password)
{
let passwordBuf = password.toUtf8();
passwordPtr = Module["_malloc"](passwordBuf.length);
Module["HEAP8"].set(passwordBuf, passwordPtr);
}
let bRes = Module["_CheckOwnerPassword"](this.nativeFile, passwordPtr);
if (passwordPtr)
Module["_free"](passwordPtr);
return bRes == 1;
}
CFile.prototype._CheckPerm = function(perm)
{
return Module["_CheckPerm"](this.nativeFile, perm) == 1;
}
// FONTS
CFile.prototype._isNeedCMap = function()
{

View File

@ -191,6 +191,17 @@ WASM_EXPORT int UndoRedact(CDrawingFile* pFile)
{
return pFile->UndoRedact() ? 1 : 0;
}
WASM_EXPORT int CheckOwnerPassword(CDrawingFile* pFile, const char* password)
{
std::wstring sPassword = L"";
if (NULL != password)
sPassword = NSFile::CUtf8Converter::GetUnicodeStringFromUTF8((BYTE*)password, strlen(password));
return pFile->CheckOwnerPassword(sPassword) ? 1 : 0;
}
WASM_EXPORT int CheckPerm(CDrawingFile* pFile, int nPermFlag)
{
return pFile->CheckPerm(nPermFlag) ? 1 : 0;
}
WASM_EXPORT void* GetImageBase64(CDrawingFile* pFile, int rId)
{

View File

@ -704,6 +704,23 @@ void ReadInteractiveForms(BYTE* pWidgets, int& i)
i += 1;
std::cout << "Style " << arrStyle[nPathLength] << ", ";
if (nFlags & (1 << 10))
{
int nOptLength = READ_INT(pWidgets + i);
i += 4;
for (int j = 0; j < nOptLength; ++j)
{
nPathLength = READ_INT(pWidgets + i);
i += 4;
std::cout << std::to_string(j) << " Opt1 " << std::string((char*)(pWidgets + i), nPathLength) << ", ";
i += nPathLength;
nPathLength = READ_INT(pWidgets + i);
i += 4;
std::cout << std::to_string(j) << " Opt2 " << std::string((char*)(pWidgets + i), nPathLength) << ", ";
i += nPathLength;
}
}
if (nFlags & (1 << 14))
{
nPathLength = READ_INT(pWidgets + i);
@ -1125,6 +1142,18 @@ int main(int argc, char* argv[])
}
}
// OWNER PASSWORD
if (false)
{
std::string sPassword = "gfhjkmgfhjkm";
std::cout << "CheckPerm 4 Edit " << CheckPerm(pGrFile, 4) << std::endl;
std::cout << "CheckPerm 4 Print " << CheckPerm(pGrFile, 3) << std::endl;
std::cout << "CheckOwnerPassword " << CheckOwnerPassword(pGrFile, sPassword.c_str()) << std::endl;
std::cout << "CheckPerm 4 Edit " << CheckPerm(pGrFile, 4) << std::endl;
std::cout << "CheckPerm 4 Print " << CheckPerm(pGrFile, 3) << std::endl;
}
BYTE* pColor = new BYTE[12] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
// REDACT
if (false)
@ -1164,7 +1193,7 @@ int main(int argc, char* argv[])
free(pInfo);
// LINKS
if (true && nPagesCount > 0)
if (false && nPagesCount > 0)
{
BYTE* pLinks = GetLinks(pGrFile, nTestPage);
nLength = READ_INT(pLinks);
@ -1200,7 +1229,7 @@ int main(int argc, char* argv[])
}
// STRUCTURE
if (true)
if (false)
{
BYTE* pStructure = GetStructure(pGrFile);
nLength = READ_INT(pStructure);
@ -2132,6 +2161,44 @@ int main(int argc, char* argv[])
std::cout << nPathLength << ", ";
}
}
else if (sType == "Link")
{
nFlags = READ_INT(pAnnots + i);
i += 4;
if (nFlags & (1 << 0))
{
std::cout << std::endl << "A ";
ReadAction(pAnnots, i);
std::cout << std::endl;
}
if (nFlags & (1 << 1))
{
std::cout << std::endl << "PA ";
ReadAction(pAnnots, i);
std::cout << std::endl;
}
if (nFlags & (1 << 2))
{
std::string arrHighlighting[] = {"none", "invert", "push", "outline"};
nPathLength = READ_BYTE(pAnnots + i);
i += 1;
std::cout << "Highlight " << arrHighlighting[nPathLength] << ", ";
}
if (nFlags & (1 << 3))
{
std::cout << "QuadPoints";
int nQuadPointsLength = READ_INT(pAnnots + i);
i += 4;
for (int j = 0; j < nQuadPointsLength; ++j)
{
nPathLength = READ_INT(pAnnots + i);
i += 4;
std::cout << " " << (double)nPathLength / 100.0;
}
std::cout << ", ";
}
}
std::cout << std::endl << "]" << std::endl;
}

View File

@ -202,6 +202,19 @@ bool CImageFileFormatChecker::isWbcFile(BYTE* pBuffer,DWORD dwBytes)
return false;
}
//raster graphics file format developed by Google
bool CImageFileFormatChecker::isWebPFile(BYTE* pBuffer, DWORD dwBytes)
{
if (eFileType)return false;
if ((20 <= dwBytes) && ('R' == pBuffer[0] && 'I' == pBuffer[1] && 'F' == pBuffer[2] && 'F' == pBuffer[3]
//47 length + 12
&& 'W' == pBuffer[8] && 'E' == pBuffer[9] && 'B' == pBuffer[10] && 'P' == pBuffer[11])
&& 'V' == pBuffer[12] && 'P' == pBuffer[13] && '8' == pBuffer[14])
return true;
return false;
}
//webshot(wb ver 1) HEX 57 57 42 42 31 31 31 31
//webshot (wb ver 2) HEX 00 00 02 00 02 10 c9 00 02 00 c8 06 4c 00 02 00
bool CImageFileFormatChecker::isWbFile(BYTE* pBuffer,DWORD dwBytes)
@ -509,6 +522,10 @@ bool CImageFileFormatChecker::isImageFile(const std::wstring& fileName)
{
eFileType = _CXIMAGE_FORMAT_WB;
}
else if (isWebPFile(buffer, sizeRead))
{
eFileType = _CXIMAGE_FORMAT_WEBP;
}
else if (isPsdFile(buffer,sizeRead))
{
eFileType = _CXIMAGE_FORMAT_PSD;

View File

@ -64,6 +64,7 @@ enum __ENUM_CXIMAGE_FORMATS
_CXIMAGE_FORMAT_SVG = 24,
_CXIMAGE_FORMAT_PIC = 25,
_CXIMAGE_FORMAT_HEIF = 26,
_CXIMAGE_FORMAT_WEBP = 27
};
class GRAPHICS_DECL CImageFileFormatChecker
@ -96,6 +97,7 @@ public:
bool isTiffFile(BYTE* pBuffer,DWORD dwBytes);
bool isJpgFile(BYTE* pBuffer,DWORD dwBytes);
bool isWbFile(BYTE* pBuffer,DWORD dwBytes);
bool isWebPFile(BYTE* pBuffer, DWORD dwBytes);
bool isIcoFile(BYTE* pBuffer,DWORD dwBytes);
bool isRasFile(BYTE* pBuffer,DWORD dwBytes);

View File

@ -88,6 +88,8 @@ namespace DocFileFormat
BorderCode( unsigned char* bytes, int size );
BorderCode( const BorderCode& bc );
unsigned char GetType() const { return brcType; }
bool GetNil() {return fNil;}
bool operator == ( const BorderCode& bc );
bool operator != ( const BorderCode& bc );

View File

@ -606,6 +606,7 @@ namespace DocFileFormat
std::wstring PAGE ( L"PAGE" );
std::wstring SHAPE ( L"SHAPE" );
std::wstring NREF ( L"NREF");
std::wstring Tocn (L"Toc");
if (arField.empty() == false)
f = arField[0];
@ -629,14 +630,16 @@ namespace DocFileFormat
bool bSHAPE = search( f.begin(), f.end(), SHAPE.begin(), SHAPE.end()) != f.end();
bool bNREF = search( f.begin(), f.end(), NREF.begin(), NREF.end()) != f.end();
bool bPAGEREF = false;
bool bPAGEREF = false;
bool bTocn = false;
if (bHYPERLINK && arField.size() > 1)
{
std::wstring f1 = arField[1];
bPAGEREF = search( f1.begin(), f1.end(), PAGEREF.begin(), PAGEREF.end()) != f1.end();
bTocn = search( f1.begin(), f1.end(), Tocn.begin(), Tocn.end()) != f1.end();
}
if (bTOC)
if (bTOC || bTocn)
_bContentWrite = true;
if ( bFORM )
@ -710,12 +713,13 @@ namespace DocFileFormat
}
else
{
for (size_t i = 1; i < arField.size(); i++)
//for (size_t i = 1; i < arField.size(); i++)
if (arField.size() > 1)
{
std::wstring f1 = arField[1];
int d = (int)f1.find(PAGEREF);
size_t d = f1.find(PAGEREF);
if (d > 0)
if (d != std::wstring::npos)
{
_writeWebHidden = true;
std::wstring _writeTocLink =f1.substr(d + 9);
@ -726,10 +730,8 @@ namespace DocFileFormat
_writeAfterRun += XmlUtils::EncodeXmlString(_writeTocLink);
_writeAfterRun += std::wstring (L"\" w:history=\"1\">");
break;
//cp = cpFieldSep1;
//break;
}
//cpFieldSep1 = cpFieldSep2;
}
_skipRuns = 5; //with separator
}
@ -781,6 +783,7 @@ namespace DocFileFormat
else
{
PictureDescriptor pic(chpxObj, m_document->DataStream, 0x7fffffff, m_document->nWordVersion);
bPict = false;
oleWriter.WriteNodeBegin (L"w:object", true);
oleWriter.WriteAttribute( L"w:dxaOrig", FormatUtils::IntToWideString( ( pic.dxaGoal + pic.dxaOrigin ) ) );
@ -1066,85 +1069,90 @@ namespace DocFileFormat
}
else if (TextMark::Picture == code && fSpec)
{
PictureDescriptor oPicture (chpx, m_document->nWordVersion > 0 ? m_document->WordDocumentStream : m_document->DataStream, 0x7fffffff, m_document->nWordVersion);
if (bPict)
{
PictureDescriptor oPicture (chpx, m_document->nWordVersion > 0 ? m_document->WordDocumentStream : m_document->DataStream, 0x7fffffff, m_document->nWordVersion);
bool isInline = _isTextBoxContent;
bool isInline = _isTextBoxContent;
if (oPicture.embeddedData && oPicture.embeddedDataSize > 0)
{
m_pXmlWriter->WriteNodeBegin (L"w:pict");
if (oPicture.embeddedData && oPicture.embeddedDataSize > 0)
{
m_pXmlWriter->WriteNodeBegin (L"w:pict");
VMLPictureMapping oVmlMapper(m_context, m_pXmlWriter, false, _caller, isInline);
oPicture.Convert (&oVmlMapper);
VMLPictureMapping oVmlMapper(m_context, m_pXmlWriter, false, _caller, isInline);
oPicture.Convert (&oVmlMapper);
m_pXmlWriter->WriteNodeEnd (L"w:pict");
}
else if ((oPicture.mfp.mm > 98) && (NULL != oPicture.shapeContainer)/* && (false == oPicture.shapeContainer->isLastIdentify())*/)
{
bool bPicture = true;
bool m_bSkip = false;
m_pXmlWriter->WriteNodeEnd (L"w:pict");
}
else if ((oPicture.mfp.mm > 98) && (NULL != oPicture.shapeContainer)/* && (false == oPicture.shapeContainer->isLastIdentify())*/)
{
bool bPicture = true;
bool m_bSkip = false;
if (oPicture.shapeContainer)
{
if (oPicture.shapeContainer->m_nShapeType != msosptPictureFrame)
bPicture = false;//шаблон 1.doc картинка в колонтитуле
if (oPicture.shapeContainer)
{
if (oPicture.shapeContainer->m_nShapeType != msosptPictureFrame)
bPicture = false;//шаблон 1.doc картинка в колонтитуле
m_bSkip = oPicture.shapeContainer->m_bSkip;
}
if (!m_bSkip)
{
bool bFormula = false;
XMLTools::CStringXmlWriter pictWriter;
pictWriter.WriteNodeBegin (L"w:pict");
m_bSkip = oPicture.shapeContainer->m_bSkip;
}
if (!m_bSkip)
{
bool bFormula = false;
XMLTools::CStringXmlWriter pictWriter;
pictWriter.WriteNodeBegin (L"w:pict");
if (bPicture)
{
VMLPictureMapping oVmlMapper(m_context, &pictWriter, false, _caller, isInline);
oPicture.Convert (&oVmlMapper);
if (bPicture)
{
VMLPictureMapping oVmlMapper(m_context, &pictWriter, false, _caller, isInline);
oPicture.Convert (&oVmlMapper);
if (oVmlMapper.m_isEmbedded)
{
OleObject ole ( chpx, m_document);
OleObjectMapping oleObjectMapping( &pictWriter, m_context, &oPicture, _caller, oVmlMapper.m_shapeId );
if (oVmlMapper.m_isEmbedded)
{
OleObject ole ( chpx, m_document);
OleObjectMapping oleObjectMapping( &pictWriter, m_context, &oPicture, _caller, oVmlMapper.m_shapeId );
ole.isEquation = oVmlMapper.m_isEquation;
ole.isEmbedded = oVmlMapper.m_isEmbedded;
ole.embeddedData = oVmlMapper.m_embeddedData;
ole.isEquation = oVmlMapper.m_isEquation;
ole.isEmbedded = oVmlMapper.m_isEmbedded;
ole.embeddedData = oVmlMapper.m_embeddedData;
ole.Convert( &oleObjectMapping );
}
else if (oVmlMapper.m_isEquation)
{
//нельзя в Run писать oMath
//m_pXmlWriter->WriteString(oVmlMapper.m_equationXml);
_writeAfterRun = oVmlMapper.m_equationXml;
bFormula = true;
}
else if (oVmlMapper.m_isBlob)
{
_writeAfterRun = oVmlMapper.m_blobXml;
bFormula = true;
}
}
else
{
VMLShapeMapping oVmlMapper(m_context, &pictWriter, NULL, &oPicture, _caller, isInline, false);
oPicture.shapeContainer->Convert(&oVmlMapper);
}
ole.Convert( &oleObjectMapping );
}
else if (oVmlMapper.m_isEquation)
{
//нельзя в Run писать oMath
//m_pXmlWriter->WriteString(oVmlMapper.m_equationXml);
_writeAfterRun = oVmlMapper.m_equationXml;
bFormula = true;
}
else if (oVmlMapper.m_isBlob)
{
_writeAfterRun = oVmlMapper.m_blobXml;
bFormula = true;
}
}
else
{
VMLShapeMapping oVmlMapper(m_context, &pictWriter, NULL, &oPicture, _caller, isInline, false);
oPicture.shapeContainer->Convert(&oVmlMapper);
}
pictWriter.WriteNodeEnd (L"w:pict");
pictWriter.WriteNodeEnd (L"w:pict");
if (!bFormula)
{
m_pXmlWriter->WriteString(pictWriter.GetXmlString());
if (!bFormula)
{
m_pXmlWriter->WriteString(pictWriter.GetXmlString());
if ((false == _fieldLevels.empty()) && (_fieldLevels.back().bSeparate && !_fieldLevels.back().bResult)) //ege15.doc
{
_fieldLevels.back().bResult = true;
}//imrtemplate(endnotes).doc
}
}
}
if ((false == _fieldLevels.empty()) && (_fieldLevels.back().bSeparate && !_fieldLevels.back().bResult)) //ege15.doc
{
_fieldLevels.back().bResult = true;
}//imrtemplate(endnotes).doc
}
}
}
}
else
bPict = true;
}
else if ((TextMark::AutoNumberedFootnoteReference == code) && fSpec)
{

View File

@ -84,6 +84,7 @@ namespace DocFileFormat
std::wstring m_shapeIdOwner;
std::wstring getOLEObject() { return _lastOLEObject; }
bool m_bOleInPicture = false;
bool bPict = true;
protected:
int getListNumCache (int fc, int fc_end);

View File

@ -66,7 +66,19 @@ namespace DocFileFormat
if (structureLength > 0)
{
// this PLEX contains CPs and Elements
n = ((int)lcb - CP_LENGTH) / (structureLength + CP_LENGTH);
//n = ((int)lcb - CP_LENGTH) / (structureLength + CP_LENGTH);
int totalSize = (int)lcb - CP_LENGTH;
int elementSize = structureLength + CP_LENGTH;
if (elementSize > 0)
{
n = totalSize / elementSize;
if (totalSize % elementSize != 0)
{
n += 1;
}
}
}
else
{

View File

@ -99,6 +99,7 @@ namespace DocFileFormat
XMLTools::XMLElement pgNumType (L"w:pgNumType");
HeaderAndFooterTable* pTable = _ctx->_doc->headerAndFooterTable;
bool bHasEndnoteNumFmt = false;
if (pTable)
{
@ -327,8 +328,11 @@ namespace DocFileFormat
break;
case sprmSNfcEdnRef:
{
appendValueElement( &endnotePr, L"numFmt", NumberingMapping::GetNumberFormatWideString( FormatUtils::BytesToInt16( iter->Arguments, 0, iter->argumentsSize ) ), true );
break;
bHasEndnoteNumFmt = true;
}
break;
case sprmSNFtn:
appendValueElement( &footnotePr, L"numStart", FormatUtils::IntToWideString( FormatUtils::BytesToInt16( iter->Arguments, 0, iter->argumentsSize ) ), true );
@ -488,6 +492,10 @@ namespace DocFileFormat
}
}
}
if (!bHasEndnoteNumFmt)
{
appendValueElement( &endnotePr, L"numFmt", L"decimal", true );
}
if (bWasSprmSFPgnRestart && false == wsSprmSPgnStart.empty() )
appendValueAttribute( &pgNumType, L"w:start", wsSprmSPgnStart );

View File

@ -190,7 +190,7 @@ namespace DocFileFormat
}
if (!IsTableBordersDefined(tapx->grpprl))
if (!IsTableBordersDefined(tapx->grpprl) || ( _tcDef.brcTop->GetType() != 0) || ( _tcDef.brcLeft->GetType() != 0) ||( _tcDef.brcRight->GetType() != 0) ||( _tcDef.brcBottom->GetType() != 0))
{
_brcTop = std::shared_ptr<BorderCode>(new BorderCode(*_tcDef.brcTop));
_brcLeft = std::shared_ptr<BorderCode>(new BorderCode(*_tcDef.brcLeft));
@ -443,28 +443,28 @@ namespace DocFileFormat
}
//append borders
if (_brcTop)
if ((_brcTop && _brcTop->GetType() != 0) || (_brcTop && _brcTop->GetNil()))
{
XMLTools::XMLElement topBorder( L"w:top" );
appendBorderAttributes(_brcTop.get(), &topBorder);
addOrSetBorder(_tcBorders, &topBorder );
}
if (_brcLeft )
if ((_brcLeft && _brcLeft->GetType() != 0) || (_brcLeft && _brcLeft->GetNil()))
{
XMLTools::XMLElement leftBorder( L"w:left" );
appendBorderAttributes(_brcLeft.get(), &leftBorder);
addOrSetBorder(_tcBorders, &leftBorder);
}
if (_brcBottom)
if ((_brcBottom && _brcBottom->GetType() != 0) || (_brcBottom && _brcBottom->GetNil()))
{
XMLTools::XMLElement bottomBorder( L"w:bottom" );
appendBorderAttributes(_brcBottom.get(), &bottomBorder);
addOrSetBorder(_tcBorders, &bottomBorder);
}
if (_brcRight)
if ((_brcRight && _brcRight->GetType() != 0) || (_brcRight && _brcRight->GetNil()))
{
XMLTools::XMLElement rightBorder( L"w:right" );
appendBorderAttributes( _brcRight.get(), &rightBorder );

View File

@ -23,6 +23,31 @@
<ClCompile Include="..\..\..\Common\SummaryInformation\PropertyFactory.cpp" />
<ClCompile Include="..\..\..\Common\SummaryInformation\PropertySet.cpp" />
<ClCompile Include="..\..\..\Common\SummaryInformation\PropertySetStream.cpp" />
<ClCompile Include="..\..\..\XlsFile\Converter\ConvertXls2Xlsx.cpp" />
<ClCompile Include="..\..\..\XlsFile\Converter\external_items.cpp" />
<ClCompile Include="..\..\..\XlsFile\Converter\mediaitems_utils.cpp" />
<ClCompile Include="..\..\..\XlsFile\Converter\namespaces.cpp" />
<ClCompile Include="..\..\..\XlsFile\Converter\oox_content_type.cpp" />
<ClCompile Include="..\..\..\XlsFile\Converter\oox_package.cpp" />
<ClCompile Include="..\..\..\XlsFile\Converter\oox_rels.cpp" />
<ClCompile Include="..\..\..\XlsFile\Converter\XlsConverter.cpp" />
<ClCompile Include="..\..\..\XlsFile\Converter\xlsx_activeX_context.cpp" />
<ClCompile Include="..\..\..\XlsFile\Converter\xlsx_chart_context.cpp" />
<ClCompile Include="..\..\..\XlsFile\Converter\xlsx_comments.cpp" />
<ClCompile Include="..\..\..\XlsFile\Converter\xlsx_comments_context.cpp" />
<ClCompile Include="..\..\..\XlsFile\Converter\xlsx_conversion_context.cpp" />
<ClCompile Include="..\..\..\XlsFile\Converter\xlsx_drawings.cpp" />
<ClCompile Include="..\..\..\XlsFile\Converter\xlsx_drawing_context.cpp" />
<ClCompile Include="..\..\..\XlsFile\Converter\xlsx_external_context.cpp" />
<ClCompile Include="..\..\..\XlsFile\Converter\xlsx_hyperlinks.cpp" />
<ClCompile Include="..\..\..\XlsFile\Converter\xlsx_output_xml.cpp" />
<ClCompile Include="..\..\..\XlsFile\Converter\xlsx_package.cpp" />
<ClCompile Include="..\..\..\XlsFile\Converter\xlsx_pivots_context.cpp" />
<ClCompile Include="..\..\..\XlsFile\Converter\xlsx_protection.cpp" />
<ClCompile Include="..\..\..\XlsFile\Converter\xlsx_sheet_context.cpp" />
<ClCompile Include="..\..\..\XlsFile\Converter\xlsx_tablecontext.cpp" />
<ClCompile Include="..\..\..\XlsFile\Converter\xlsx_textcontext.cpp" />
<ClCompile Include="..\..\..\XlsFile\Converter\xls_writer.cpp" />
<ClCompile Include="..\..\..\XlsFile\Format\Auxiliary\HelpFunc.cpp" />
<ClCompile Include="..\..\..\XlsFile\Format\Binary\CFRecord.cpp" />
<ClCompile Include="..\..\..\XlsFile\Format\Binary\CFRecordType.cpp" />
@ -415,6 +440,7 @@
<ClCompile Include="..\..\..\XlsFile\Format\Logic\Biff_structures\CFDatabar.cpp" />
<ClCompile Include="..\..\..\XlsFile\Format\Logic\Biff_structures\CFExNonCF12.cpp" />
<ClCompile Include="..\..\..\XlsFile\Format\Logic\Biff_structures\CFExTemplateParams.cpp" />
<ClCompile Include="..\..\..\XlsFile\Format\Logic\Biff_structures\CFFilter.cpp" />
<ClCompile Include="..\..\..\XlsFile\Format\Logic\Biff_structures\CFGradient.cpp" />
<ClCompile Include="..\..\..\XlsFile\Format\Logic\Biff_structures\CFMStateItem.cpp" />
<ClCompile Include="..\..\..\XlsFile\Format\Logic\Biff_structures\CFMultistate.cpp" />
@ -827,6 +853,33 @@
<ClInclude Include="..\..\..\Common\SummaryInformation\PropertyFactory.h" />
<ClInclude Include="..\..\..\Common\SummaryInformation\PropertySet.h" />
<ClInclude Include="..\..\..\Common\SummaryInformation\PropertySetStream.h" />
<ClInclude Include="..\..\..\XlsFile\Converter\ConvertXls2Xlsx.h" />
<ClInclude Include="..\..\..\XlsFile\Converter\external_items.h" />
<ClInclude Include="..\..\..\XlsFile\Converter\mediaitems_utils.h" />
<ClInclude Include="..\..\..\XlsFile\Converter\namespaces.h" />
<ClInclude Include="..\..\..\XlsFile\Converter\oox_content_type.h" />
<ClInclude Include="..\..\..\XlsFile\Converter\oox_package.h" />
<ClInclude Include="..\..\..\XlsFile\Converter\oox_rels.h" />
<ClInclude Include="..\..\..\XlsFile\Converter\progressCallback.h" />
<ClInclude Include="..\..\..\XlsFile\Converter\ShapeType.h" />
<ClInclude Include="..\..\..\XlsFile\Converter\XlsConverter.h" />
<ClInclude Include="..\..\..\XlsFile\Converter\xlsx_activeX_context.h" />
<ClInclude Include="..\..\..\XlsFile\Converter\xlsx_chart_context.h" />
<ClInclude Include="..\..\..\XlsFile\Converter\xlsx_comments.h" />
<ClInclude Include="..\..\..\XlsFile\Converter\xlsx_comments_context.h" />
<ClInclude Include="..\..\..\XlsFile\Converter\xlsx_conversion_context.h" />
<ClInclude Include="..\..\..\XlsFile\Converter\xlsx_drawings.h" />
<ClInclude Include="..\..\..\XlsFile\Converter\xlsx_drawing_context.h" />
<ClInclude Include="..\..\..\XlsFile\Converter\xlsx_external_context.h" />
<ClInclude Include="..\..\..\XlsFile\Converter\xlsx_hyperlinks.h" />
<ClInclude Include="..\..\..\XlsFile\Converter\xlsx_output_xml.h" />
<ClInclude Include="..\..\..\XlsFile\Converter\xlsx_package.h" />
<ClInclude Include="..\..\..\XlsFile\Converter\xlsx_pivots_context.h" />
<ClInclude Include="..\..\..\XlsFile\Converter\xlsx_protection.h" />
<ClInclude Include="..\..\..\XlsFile\Converter\xlsx_sheet_context.h" />
<ClInclude Include="..\..\..\XlsFile\Converter\xlsx_tablecontext.h" />
<ClInclude Include="..\..\..\XlsFile\Converter\xlsx_textcontext.h" />
<ClInclude Include="..\..\..\XlsFile\Converter\xls_writer.h" />
<ClInclude Include="..\..\..\XlsFile\Format\Auxiliary\HelpFunc.h" />
<ClInclude Include="..\..\..\XlsFile\Format\Binary\BinSmartPointers.h" />
<ClInclude Include="..\..\..\XlsFile\Format\Binary\CFRecord.h" />
@ -1230,6 +1283,7 @@
<ClInclude Include="..\..\..\XlsFile\Format\Logic\Biff_structures\CFDatabar.h" />
<ClInclude Include="..\..\..\XlsFile\Format\Logic\Biff_structures\CFExNonCF12.h" />
<ClInclude Include="..\..\..\XlsFile\Format\Logic\Biff_structures\CFExTemplateParams.h" />
<ClInclude Include="..\..\..\XlsFile\Format\Logic\Biff_structures\CFFilter.h" />
<ClInclude Include="..\..\..\XlsFile\Format\Logic\Biff_structures\CFGradient.h" />
<ClInclude Include="..\..\..\XlsFile\Format\Logic\Biff_structures\CFMStateItem.h" />
<ClInclude Include="..\..\..\XlsFile\Format\Logic\Biff_structures\CFMultistate.h" />

View File

@ -2443,6 +2443,84 @@
<ClCompile Include="..\..\..\XlsFile\Format\Logic\Biff_structures\FutureFunctionParser.cpp">
<Filter>Logic\Biff_structures</Filter>
</ClCompile>
<ClCompile Include="..\..\..\XlsFile\Format\Logic\Biff_structures\CFFilter.cpp">
<Filter>Logic\Biff_structures</Filter>
</ClCompile>
<ClCompile Include="..\..\..\XlsFile\Converter\ConvertXls2Xlsx.cpp">
<Filter>Binary</Filter>
</ClCompile>
<ClCompile Include="..\..\..\XlsFile\Converter\external_items.cpp">
<Filter>Binary</Filter>
</ClCompile>
<ClCompile Include="..\..\..\XlsFile\Converter\mediaitems_utils.cpp">
<Filter>Binary</Filter>
</ClCompile>
<ClCompile Include="..\..\..\XlsFile\Converter\namespaces.cpp">
<Filter>Binary</Filter>
</ClCompile>
<ClCompile Include="..\..\..\XlsFile\Converter\oox_content_type.cpp">
<Filter>Binary</Filter>
</ClCompile>
<ClCompile Include="..\..\..\XlsFile\Converter\oox_package.cpp">
<Filter>Binary</Filter>
</ClCompile>
<ClCompile Include="..\..\..\XlsFile\Converter\oox_rels.cpp">
<Filter>Binary</Filter>
</ClCompile>
<ClCompile Include="..\..\..\XlsFile\Converter\xls_writer.cpp">
<Filter>Binary</Filter>
</ClCompile>
<ClCompile Include="..\..\..\XlsFile\Converter\XlsConverter.cpp">
<Filter>Binary</Filter>
</ClCompile>
<ClCompile Include="..\..\..\XlsFile\Converter\xlsx_activeX_context.cpp">
<Filter>Binary</Filter>
</ClCompile>
<ClCompile Include="..\..\..\XlsFile\Converter\xlsx_chart_context.cpp">
<Filter>Binary</Filter>
</ClCompile>
<ClCompile Include="..\..\..\XlsFile\Converter\xlsx_comments.cpp">
<Filter>Binary</Filter>
</ClCompile>
<ClCompile Include="..\..\..\XlsFile\Converter\xlsx_comments_context.cpp">
<Filter>Binary</Filter>
</ClCompile>
<ClCompile Include="..\..\..\XlsFile\Converter\xlsx_conversion_context.cpp">
<Filter>Binary</Filter>
</ClCompile>
<ClCompile Include="..\..\..\XlsFile\Converter\xlsx_drawing_context.cpp">
<Filter>Binary</Filter>
</ClCompile>
<ClCompile Include="..\..\..\XlsFile\Converter\xlsx_drawings.cpp">
<Filter>Binary</Filter>
</ClCompile>
<ClCompile Include="..\..\..\XlsFile\Converter\xlsx_external_context.cpp">
<Filter>Binary</Filter>
</ClCompile>
<ClCompile Include="..\..\..\XlsFile\Converter\xlsx_hyperlinks.cpp">
<Filter>Binary</Filter>
</ClCompile>
<ClCompile Include="..\..\..\XlsFile\Converter\xlsx_output_xml.cpp">
<Filter>Binary</Filter>
</ClCompile>
<ClCompile Include="..\..\..\XlsFile\Converter\xlsx_package.cpp">
<Filter>Binary</Filter>
</ClCompile>
<ClCompile Include="..\..\..\XlsFile\Converter\xlsx_pivots_context.cpp">
<Filter>Binary</Filter>
</ClCompile>
<ClCompile Include="..\..\..\XlsFile\Converter\xlsx_protection.cpp">
<Filter>Binary</Filter>
</ClCompile>
<ClCompile Include="..\..\..\XlsFile\Converter\xlsx_sheet_context.cpp">
<Filter>Binary</Filter>
</ClCompile>
<ClCompile Include="..\..\..\XlsFile\Converter\xlsx_tablecontext.cpp">
<Filter>Binary</Filter>
</ClCompile>
<ClCompile Include="..\..\..\XlsFile\Converter\xlsx_textcontext.cpp">
<Filter>Binary</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\XlsFile\Format\Logging\Log.h">
@ -4899,5 +4977,89 @@
<ClInclude Include="..\..\..\XlsFile\Format\Logic\Biff_structures\FutureFunctionParser.h">
<Filter>Logic\Biff_structures</Filter>
</ClInclude>
<ClInclude Include="..\..\..\XlsFile\Format\Logic\Biff_structures\CFFilter.h">
<Filter>Logic\Biff_structures</Filter>
</ClInclude>
<ClInclude Include="..\..\..\XlsFile\Converter\ConvertXls2Xlsx.h">
<Filter>Binary</Filter>
</ClInclude>
<ClInclude Include="..\..\..\XlsFile\Converter\external_items.h">
<Filter>Binary</Filter>
</ClInclude>
<ClInclude Include="..\..\..\XlsFile\Converter\mediaitems_utils.h">
<Filter>Binary</Filter>
</ClInclude>
<ClInclude Include="..\..\..\XlsFile\Converter\namespaces.h">
<Filter>Binary</Filter>
</ClInclude>
<ClInclude Include="..\..\..\XlsFile\Converter\oox_content_type.h">
<Filter>Binary</Filter>
</ClInclude>
<ClInclude Include="..\..\..\XlsFile\Converter\oox_package.h">
<Filter>Binary</Filter>
</ClInclude>
<ClInclude Include="..\..\..\XlsFile\Converter\oox_rels.h">
<Filter>Binary</Filter>
</ClInclude>
<ClInclude Include="..\..\..\XlsFile\Converter\progressCallback.h">
<Filter>Binary</Filter>
</ClInclude>
<ClInclude Include="..\..\..\XlsFile\Converter\ShapeType.h">
<Filter>Binary</Filter>
</ClInclude>
<ClInclude Include="..\..\..\XlsFile\Converter\xls_writer.h">
<Filter>Binary</Filter>
</ClInclude>
<ClInclude Include="..\..\..\XlsFile\Converter\XlsConverter.h">
<Filter>Binary</Filter>
</ClInclude>
<ClInclude Include="..\..\..\XlsFile\Converter\xlsx_activeX_context.h">
<Filter>Binary</Filter>
</ClInclude>
<ClInclude Include="..\..\..\XlsFile\Converter\xlsx_chart_context.h">
<Filter>Binary</Filter>
</ClInclude>
<ClInclude Include="..\..\..\XlsFile\Converter\xlsx_comments.h">
<Filter>Binary</Filter>
</ClInclude>
<ClInclude Include="..\..\..\XlsFile\Converter\xlsx_comments_context.h">
<Filter>Binary</Filter>
</ClInclude>
<ClInclude Include="..\..\..\XlsFile\Converter\xlsx_conversion_context.h">
<Filter>Binary</Filter>
</ClInclude>
<ClInclude Include="..\..\..\XlsFile\Converter\xlsx_drawing_context.h">
<Filter>Binary</Filter>
</ClInclude>
<ClInclude Include="..\..\..\XlsFile\Converter\xlsx_drawings.h">
<Filter>Binary</Filter>
</ClInclude>
<ClInclude Include="..\..\..\XlsFile\Converter\xlsx_external_context.h">
<Filter>Binary</Filter>
</ClInclude>
<ClInclude Include="..\..\..\XlsFile\Converter\xlsx_hyperlinks.h">
<Filter>Binary</Filter>
</ClInclude>
<ClInclude Include="..\..\..\XlsFile\Converter\xlsx_output_xml.h">
<Filter>Binary</Filter>
</ClInclude>
<ClInclude Include="..\..\..\XlsFile\Converter\xlsx_package.h">
<Filter>Binary</Filter>
</ClInclude>
<ClInclude Include="..\..\..\XlsFile\Converter\xlsx_pivots_context.h">
<Filter>Binary</Filter>
</ClInclude>
<ClInclude Include="..\..\..\XlsFile\Converter\xlsx_protection.h">
<Filter>Binary</Filter>
</ClInclude>
<ClInclude Include="..\..\..\XlsFile\Converter\xlsx_sheet_context.h">
<Filter>Binary</Filter>
</ClInclude>
<ClInclude Include="..\..\..\XlsFile\Converter\xlsx_tablecontext.h">
<Filter>Binary</Filter>
</ClInclude>
<ClInclude Include="..\..\..\XlsFile\Converter\xlsx_textcontext.h">
<Filter>Binary</Filter>
</ClInclude>
</ItemGroup>
</Project>

View File

@ -34,6 +34,7 @@
#include "../Format/Binary/CompoundFile.h"
#include "../Format/Binary/CFStreamCacheWriter.h"
#include "../Format/Logic/WorkbookStreamObject.h"
#include <iomanip>
bool XlsWriter::Open(const std::wstring &fileName)
{
@ -45,18 +46,19 @@ bool XlsWriter::Open(const std::wstring &fileName)
bool XlsWriter::WriteWorkbook(XLS::BaseObjectPtr streamObject)
{
auto WokrkbokStreamName = L"Workbook";
auto xls_global_info = boost::shared_ptr<XLS::GlobalWorkbookInfo>(new XLS::GlobalWorkbookInfo(XLS::WorkbookStreamObject::DefaultCodePage, nullptr));
if(globalInfoPtr == nullptr)
globalInfoPtr = boost::shared_ptr<XLS::GlobalWorkbookInfo>(new XLS::GlobalWorkbookInfo(XLS::WorkbookStreamObject::DefaultCodePage, nullptr));
auto BookStream = xls_file->createNamedStream(WokrkbokStreamName);
if(BookStream == nullptr)
return false;
XLS::StreamCacheWriterPtr cacheWriter(new XLS::CFStreamCacheWriter(BookStream, xls_global_info));
XLS::StreamCacheWriterPtr cacheWriter(new XLS::CFStreamCacheWriter(BookStream, globalInfoPtr));
XLS::BinWriterProcessor stream_proc(cacheWriter, nullptr);
stream_proc.mandatory(*streamObject);
//writing fileptrs
{
auto filePos = BookStream->getStreamPointer();
for(auto sheet : xls_global_info->sheets_info)
for(auto sheet : globalInfoPtr->sheets_info)
{
//bof of worksheet
BookStream->seekFromBegin(sheet.BoundSheetPos);
@ -69,10 +71,20 @@ bool XlsWriter::WriteWorkbook(XLS::BaseObjectPtr streamObject)
}
bool XlsWriter::WriteStreamObject(std::wstring &streamName, XLS::BaseObjectPtr streamObject)
{
auto xls_global_info = boost::shared_ptr<XLS::GlobalWorkbookInfo>(new XLS::GlobalWorkbookInfo(XLS::WorkbookStreamObject::DefaultCodePage, nullptr));
XLS::StreamCacheWriterPtr cacheWriter(new XLS::CFStreamCacheWriter(xls_file->createNamedStream(streamName), xls_global_info));
if(globalInfoPtr == nullptr)
globalInfoPtr = boost::shared_ptr<XLS::GlobalWorkbookInfo>(new XLS::GlobalWorkbookInfo(XLS::WorkbookStreamObject::DefaultCodePage, nullptr));
XLS::StreamCacheWriterPtr cacheWriter(new XLS::CFStreamCacheWriter(xls_file->createNamedStream(streamName), globalInfoPtr));
XLS::BinWriterProcessor stream_proc(cacheWriter, nullptr);
stream_proc.mandatory(*streamObject);
return true;
}
bool XlsWriter::WritePivotCache(XLS::BaseObjectPtr streamObject, _UINT32 cacheId)
{
auto DirectoryName = L"_SX_DB_CUR/";
std::wstringstream ss;
ss << std::hex << std::setw(4) << std::setfill(L'0') << std::uppercase << cacheId;
std::wstring streamName = DirectoryName + ss.str();
return WriteStreamObject(streamName, streamObject);
}

View File

@ -44,7 +44,10 @@ class XlsWriter
public:
bool Open(const std::wstring &fileName);
bool WriteWorkbook(XLS::BaseObjectPtr streamObject);
bool WritePivotCache(XLS::BaseObjectPtr streamObject, _UINT32 cacheId);
bool WriteStreamObject(std::wstring &streamName, XLS::BaseObjectPtr streamObject);
boost::shared_ptr<XLS::GlobalWorkbookInfo> globalInfoPtr;
private:
std::wstring fileName_ = L"";

View File

@ -56,7 +56,7 @@ public:
Ref ref_;
ArrayParsedFormula formula;
bool fAlwaysCalc;
bool fAlwaysCalc = false;
RFX rfx; //biff12
};

View File

@ -72,7 +72,14 @@ void AutoFilter::readFields(CFRecord& record)
{
size_t pos_record = record.getRdPtr();
if (size == 0xffffffff) size = record.getDataSize() - pos_record;
if (size == 0xffffffff)
size = record.getDataSize() - pos_record;
else if(record.getDataSize() < pos_record + size)
{
//size error
return;
}
if (size > 0)
{

View File

@ -112,6 +112,7 @@ void AutoFilter12::readFields(CFRecord& record)
void AutoFilter12::writeFields(CFRecord& record)
{
_UINT16 flags = 0;
frtRefHeader.rt = 0x087E;
record << frtRefHeader << iEntry << fHideArrow << ft << cft << cCriteria << cDateGroupings;
bool fWorksheetAutoFilter = false;
if(idList == 0xFFFFFFFF)
@ -122,7 +123,8 @@ void AutoFilter12::writeFields(CFRecord& record)
record << idList;
_GUID_ guid_num;
STR::bstr2guid(guidSview, guid_num);
if(!guidSview.empty())
STR::bstr2guid(guidSview, guid_num);
record << guid_num;
if(rgb != nullptr)
rgb->save(record);

View File

@ -36,6 +36,15 @@
#include "../Biff_structures/CFMultistate.h"
#include "../Biff_structures/CFDatabar.h"
#include "../Biff_structures/CFGradient.h"
#include "../Biff_structures/CFFilter.h"
#include "../../../../../OOXML/XlsxFormat/ComplexTypes_Spreadsheet.h"
#include "../../../../../OOXML/XlsxFormat/Styles/dxf.h"
#include "../../../../../OOXML/XlsxFormat/Styles/Xfs.h"
#include "../../../../../OOXML/XlsxFormat/Styles/NumFmts.h"
#include "../../../../../OOXML/XlsxFormat/Styles/Fonts.h"
#include "../../../../../OOXML/XlsxFormat/Styles/Fills.h"
#include "../../../../../OOXML/XlsxFormat/Styles/Borders.h"
#include "../../../../../OOXML/Base/Unit.h"
namespace XLS
@ -100,9 +109,8 @@ void CF12::readFields(CFRecord& record)
rgbCT->load(record);
break;
case 0x05:
//todooo
//rgbCT = BiffStructurePtr(new CFFilter);
//rgbCT->load(record);
rgbCT = BiffStructurePtr(new CFFilter);
rgbCT->load(record);
break;
case 0x06:
rgbCT = BiffStructurePtr(new CFMultistate);
@ -117,13 +125,356 @@ void CF12::readFields(CFRecord& record)
dxfId_ = global_info->RegistrDxfn(strm.str());
}
void ProcessBorderProp( OOX::Spreadsheet::CBorderProp* prop, unsigned char& DgPtr, unsigned char& icvPtr)
{
if(prop->m_oStyle.IsInit())
{
switch(prop->m_oStyle->GetValue())
{
case SimpleTypes::Spreadsheet::EBorderStyle::borderstyleNone:
{
DgPtr = 0;
break;
}
case SimpleTypes::Spreadsheet::EBorderStyle::borderstyleThin:
{
DgPtr = 1;
break;
}
case SimpleTypes::Spreadsheet::EBorderStyle::borderstyleMedium:
{
DgPtr = 2;
break;
}
case SimpleTypes::Spreadsheet::EBorderStyle::borderstyleDashed:
{
DgPtr = 3;
break;
}
case SimpleTypes::Spreadsheet::EBorderStyle::borderstyleDotted:
{
DgPtr = 4;
break;
}
case SimpleTypes::Spreadsheet::EBorderStyle::borderstyleThick:
{
DgPtr = 5;
break;
}
case SimpleTypes::Spreadsheet::EBorderStyle::borderstyleDouble:
{
DgPtr = 6;
break;
}
case SimpleTypes::Spreadsheet::EBorderStyle::borderstyleHair:
{
DgPtr = 7;
break;
}
case SimpleTypes::Spreadsheet::EBorderStyle::borderstyleMediumDashed:
{
DgPtr = 8;
break;
}
case SimpleTypes::Spreadsheet::EBorderStyle::borderstyleDashDot:
{
DgPtr = 9;
break;
}
case SimpleTypes::Spreadsheet::EBorderStyle::borderstyleMediumDashDot:
{
DgPtr = 10;
break;
}
case SimpleTypes::Spreadsheet::EBorderStyle::borderstyleDashDotDot:
{
DgPtr = 11;
break;
}
case SimpleTypes::Spreadsheet::EBorderStyle::borderstyleSlantDashDot:
{
DgPtr = 13;
break;
}
default:
break;
}
}
if(prop->m_oColor.IsInit() && prop->m_oColor->m_oIndexed.IsInit())
icvPtr = prop->m_oColor->m_oIndexed->GetValue();
}
void CF12::writeFields(CFRecord& record)
{ frtRefHeader.rt = 0x087A;
{
GlobalWorkbookInfoPtr global_info = record.getGlobalWorkbookInfo();
frtRefHeader.rt = 0x087A;
record << frtRefHeader;
record << ct << cp;
record.reserveNunBytes(4);
auto ccePos = record.getRdPtr();
if(dxf.dxfn != nullptr)
{
//todo dxf conversion from global info
if(dxfId_ >= 0 && global_info->arrUserDxfs.size() > dxfId_)
{
OOX::Spreadsheet::CDxf dxfObj;
XmlUtils::CXmlLiteReader oReader;
if(oReader.FromString(global_info->arrUserDxfs.at(dxfId_)))
{
if(oReader.ReadNextNode())
{
dxfObj.fromXML(oReader);
if(dxfObj.m_oFill.IsInit() && dxfObj.m_oFill->m_oPatternFill.IsInit())
{
dxf.dxfn->flsNinch = false;
dxf.dxfn->ibitAtrPat = true;
dxf.dxfn->dxfpat.fls = 1;
if(dxfObj.m_oFill->m_oPatternFill->m_oFgColor.IsInit() && dxfObj.m_oFill->m_oPatternFill->m_oFgColor->m_oIndexed.IsInit())
{
dxf.dxfn->icvFNinch = false;
dxf.dxfn->dxfpat.icvForeground = dxfObj.m_oFill->m_oPatternFill->m_oFgColor->m_oIndexed->GetValue();
}
else if(dxfObj.m_oFill->m_oPatternFill->m_oFgColor.IsInit())
{
dxf.dxfn->icvFNinch= false;
ExtProp fgColor;
if(dxf.dxfn->xfext == nullptr)
{
auto Ext = new XFExtNoFRT;
dxf.dxfn->xfext = XFExtNoFRTPtr(Ext);
}
if(dxfObj.m_oFill->m_oPatternFill->m_oFgColor->m_oThemeColor.IsInit())
{
fgColor.extType = ExtProp::ForeColor;
fgColor.extPropData.color.xclrType = 3;
fgColor.extPropData.color.xclrValue = dxfObj.m_oFill->m_oPatternFill->m_oFgColor->m_oThemeColor->GetValue();
}
else if(dxfObj.m_oFill->m_oPatternFill->m_oFgColor->m_oRgb.IsInit())
{
fgColor.extType = ExtProp::ForeColor;
fgColor.extPropData.color.xclrType = 2;
fgColor.extPropData.color.xclrValue = dxfObj.m_oFill->m_oPatternFill->m_oFgColor->m_oRgb->ToInt();
}
dxf.dxfn->xfext->mapRgExt.emplace(ExtProp::ForeColor, fgColor);
}
if(dxfObj.m_oFill->m_oPatternFill->m_oBgColor.IsInit() && dxfObj.m_oFill->m_oPatternFill->m_oBgColor->m_oIndexed.IsInit())
{
dxf.dxfn->icvBNinch = false;
dxf.dxfn->dxfpat.icvBackground = dxfObj.m_oFill->m_oPatternFill->m_oBgColor->m_oIndexed->GetValue();
}
else if(dxfObj.m_oFill->m_oPatternFill->m_oBgColor.IsInit())
{
ExtProp bgColor;
dxf.dxfn->icvBNinch = false;
if(dxf.dxfn->xfext == nullptr)
{
auto Ext = new XFExtNoFRT;
dxf.dxfn->xfext = XFExtNoFRTPtr(Ext);
}
if(dxfObj.m_oFill->m_oPatternFill->m_oBgColor->m_oThemeColor.IsInit())
{
bgColor.extType = ExtProp::BackColor;
bgColor.extPropData.color.xclrType = 3;
bgColor.extPropData.color.xclrValue = dxfObj.m_oFill->m_oPatternFill->m_oBgColor->m_oThemeColor->GetValue();
}
else if(dxfObj.m_oFill->m_oPatternFill->m_oBgColor->m_oRgb.IsInit())
{
bgColor.extType = ExtProp::BackColor;
bgColor.extPropData.color.xclrType = 2;
bgColor.extPropData.color.xclrValue = dxfObj.m_oFill->m_oPatternFill->m_oBgColor->m_oRgb->ToInt();
}
dxf.dxfn->xfext->mapRgExt.emplace(ExtProp::BackColor, bgColor);
}
}
if(dxfObj.m_oFont.IsInit())
{
dxf.dxfn->ibitAtrFnt = true;
if(dxfObj.m_oFont->m_oBold.IsInit() && dxfObj.m_oFont->m_oBold->m_oVal.GetValue())
{ dxf.dxfn->dxffntd.fBlsNinch = false;
dxf.dxfn->dxffntd.stxp.bls = 0x02BC;
}
if(dxfObj.m_oFont->m_oStrike.IsInit() && dxfObj.m_oFont->m_oStrike->m_oVal.GetValue())
{
dxf.dxfn->dxffntd.stxp.ts.ftsStrikeout = true;
dxf.dxfn->dxffntd.tsNinch.ftsStrikeout = false;
}
if(dxfObj.m_oFont->m_oItalic.IsInit() && dxfObj.m_oFont->m_oItalic->m_oVal.GetValue())
{
dxf.dxfn->dxffntd.stxp.ts.ftsItalic = true;
dxf.dxfn->dxffntd.tsNinch.ftsItalic = false;
}
if(dxfObj.m_oFont->m_oSz.IsInit())
dxf.dxfn->dxffntd.stxp.twpHeight = dxfObj.m_oFont->m_oSz->m_oVal->GetValue() * 20;
if(dxfObj.m_oFont->m_oUnderline.IsInit())
{
dxf.dxfn->dxffntd.fUlsNinch = false;
if(dxfObj.m_oFont->m_oUnderline->m_oUnderline->GetValue() == SimpleTypes::Spreadsheet::EUnderline::underlineSingle)
dxf.dxfn->dxffntd.stxp.uls = 1;
else if(dxfObj.m_oFont->m_oUnderline->m_oUnderline->GetValue() == SimpleTypes::Spreadsheet::EUnderline::underlineDouble)
dxf.dxfn->dxffntd.stxp.uls = 2;
else if(dxfObj.m_oFont->m_oUnderline->m_oUnderline->GetValue() == SimpleTypes::Spreadsheet::EUnderline::underlineSingleAccounting)
dxf.dxfn->dxffntd.stxp.uls = 0x21;
else if(dxfObj.m_oFont->m_oUnderline->m_oUnderline->GetValue() == SimpleTypes::Spreadsheet::EUnderline::underlineDoubleAccounting)
dxf.dxfn->dxffntd.stxp.uls = 0x22;
}
if(dxfObj.m_oFont->m_oColor.IsInit() && dxfObj.m_oFont->m_oColor->m_oIndexed.IsInit())
dxf.dxfn->dxffntd.icvFore = dxfObj.m_oFont->m_oColor->m_oIndexed->GetValue();
}
if(dxfObj.m_oBorder.IsInit())
{
dxf.dxfn->ibitAtrBdr = true;
if(dxfObj.m_oBorder->m_oBottom.IsInit())
{
dxf.dxfn->glBottomNinch = false;
ProcessBorderProp(dxfObj.m_oBorder->m_oBottom.GetPointer(), dxf.dxfn->dxfbdr.dgBottom, dxf.dxfn->dxfbdr.icvBottom);
}
if(dxfObj.m_oBorder->m_oTop.IsInit())
{
dxf.dxfn->glTopNinch = false;
ProcessBorderProp(dxfObj.m_oBorder->m_oTop.GetPointer(), dxf.dxfn->dxfbdr.dgTop, dxf.dxfn->dxfbdr.icvTop);
}
if(dxfObj.m_oBorder->m_oStart.IsInit())
{
dxf.dxfn->glLeftNinch = false;
ProcessBorderProp(dxfObj.m_oBorder->m_oStart.GetPointer(), dxf.dxfn->dxfbdr.dgLeft, dxf.dxfn->dxfbdr.icvLeft);
}
if(dxfObj.m_oBorder->m_oEnd.IsInit())
{
dxf.dxfn->glRightNinch = false;
ProcessBorderProp(dxfObj.m_oBorder->m_oEnd.GetPointer(), dxf.dxfn->dxfbdr.dgRight, dxf.dxfn->dxfbdr.icvRight);
}
if(dxfObj.m_oBorder->m_oDiagonal.IsInit())
{
dxf.dxfn->glDiagDownNinch = false;
dxf.dxfn->glDiagUpNinch = false;
if(dxfObj.m_oBorder->m_oDiagonalDown.IsInit() && dxfObj.m_oBorder->m_oDiagonalDown->GetValue())
dxf.dxfn->dxfbdr.bitDiagDown = true;
if(dxfObj.m_oBorder->m_oDiagonalUp.IsInit() && dxfObj.m_oBorder->m_oDiagonalUp->GetValue())
dxf.dxfn->dxfbdr.bitDiagUp = true;
ProcessBorderProp(dxfObj.m_oBorder->m_oDiagonal.GetPointer(), dxf.dxfn->dxfbdr.dgDiag, dxf.dxfn->dxfbdr.icvDiag);
}
}
if(dxfObj.m_oNumFmt.IsInit())
{
dxf.dxfn->ibitAtrNum = true;
if(dxfObj.m_oNumFmt->m_oNumFmtId.IsInit())
{
dxf.dxfn->fIfmtUser = false;
dxf.dxfn->ifmtNinch = false;
dxf.dxfn->dxfnum.fmt_id.ifmt = dxfObj.m_oNumFmt->m_oNumFmtId->m_eValue;
}
else if (dxfObj.m_oNumFmt->m_oFormatCode.IsInit())
{
dxf.dxfn->fIfmtUser = true;
dxf.dxfn->dxfnum.user_defined.fmt = dxfObj.m_oNumFmt->m_oFormatCode.get();
}
}
if(dxfObj.m_oProtection.IsInit())
{
dxf.dxfn->ibitAtrProt = true;
dxf.dxfn->lockedNinch = false;
dxf.dxfn->hiddenNinch = false;
if(dxfObj.m_oProtection->m_oHidden.IsInit() && dxfObj.m_oProtection->m_oHidden->GetValue())
dxf.dxfn->dxfprot.fHidden = true;
if(dxfObj.m_oProtection->m_oLocked.IsInit() && dxfObj.m_oProtection->m_oLocked->GetValue())
dxf.dxfn->dxfprot.fLocked = true;
}
if(dxfObj.m_oAlignment.IsInit())
{
dxf.dxfn->ibitAtrAlc = true;
if(dxfObj.m_oAlignment->m_oHorizontal.IsInit())
{
dxf.dxfn->alchNinch = false;
if(dxfObj.m_oAlignment->m_oHorizontal->GetValue()
== SimpleTypes::Spreadsheet::EHorizontalAlignment::horizontalalignmentGeneral)
dxf.dxfn->dxfalc.alc = 0;
else if(dxfObj.m_oAlignment->m_oHorizontal->GetValue()
== SimpleTypes::Spreadsheet::EHorizontalAlignment::horizontalalignmentLeft)
dxf.dxfn->dxfalc.alc = 1;
else if(dxfObj.m_oAlignment->m_oHorizontal->GetValue()
== SimpleTypes::Spreadsheet::EHorizontalAlignment::horizontalalignmentCenter)
dxf.dxfn->dxfalc.alc = 2;
else if(dxfObj.m_oAlignment->m_oHorizontal->GetValue()
== SimpleTypes::Spreadsheet::EHorizontalAlignment::horizontalalignmentRight)
dxf.dxfn->dxfalc.alc = 3;
else if(dxfObj.m_oAlignment->m_oHorizontal->GetValue()
== SimpleTypes::Spreadsheet::EHorizontalAlignment::horizontalalignmentFill)
dxf.dxfn->dxfalc.alc = 4;
else if(dxfObj.m_oAlignment->m_oHorizontal->GetValue()
== SimpleTypes::Spreadsheet::EHorizontalAlignment::horizontalalignmentJustify)
dxf.dxfn->dxfalc.alc = 5;
else if(dxfObj.m_oAlignment->m_oHorizontal->GetValue()
== SimpleTypes::Spreadsheet::EHorizontalAlignment::horizontalalignmentCenterContinuous)
dxf.dxfn->dxfalc.alc = 6;
else if(dxfObj.m_oAlignment->m_oHorizontal->GetValue()
== SimpleTypes::Spreadsheet::EHorizontalAlignment::horizontalalignmentDistributed)
dxf.dxfn->dxfalc.alc = 7;
}
if(dxfObj.m_oAlignment->m_oWrapText.IsInit())
{
dxf.dxfn->wrapNinch = false;
dxf.dxfn->dxfalc.fWrap = dxfObj.m_oAlignment->m_oWrapText->GetValue();
}
if(dxfObj.m_oAlignment->m_oVertical.IsInit())
{
dxf.dxfn->alcvNinch = false;
if(dxfObj.m_oAlignment->m_oVertical->GetValue()
== SimpleTypes::Spreadsheet::EVerticalAlignment::verticalalignmentTop)
dxf.dxfn->dxfalc.alcv = 0;
else if(dxfObj.m_oAlignment->m_oVertical->GetValue()
== SimpleTypes::Spreadsheet::EVerticalAlignment::verticalalignmentCenter)
dxf.dxfn->dxfalc.alcv = 1;
else if(dxfObj.m_oAlignment->m_oVertical->GetValue()
== SimpleTypes::Spreadsheet::EVerticalAlignment::verticalalignmentBottom)
dxf.dxfn->dxfalc.alcv = 2;
else if(dxfObj.m_oAlignment->m_oVertical->GetValue()
== SimpleTypes::Spreadsheet::EVerticalAlignment::verticalalignmentJustify)
dxf.dxfn->dxfalc.alcv = 3;
else if(dxfObj.m_oAlignment->m_oVertical->GetValue()
== SimpleTypes::Spreadsheet::EVerticalAlignment::verticalalignmentDistributed)
dxf.dxfn->dxfalc.alcv = 4;
}
if(dxfObj.m_oAlignment->m_oJustifyLastLine.IsInit())
{
dxf.dxfn->kintoNinch = false;
dxf.dxfn->dxfalc.fJustLast = dxfObj.m_oAlignment->m_oJustifyLastLine->GetValue();
}
if(dxfObj.m_oAlignment->m_oTextRotation.IsInit())
{
dxf.dxfn->trotNinch = false;
dxf.dxfn->dxfalc.trot = dxfObj.m_oAlignment->m_oTextRotation.get();
}
if(dxfObj.m_oAlignment->m_oIndent.IsInit())
{
dxf.dxfn->cIndentNinch = false;
dxf.dxfn->dxfalc.cIndent = dxfObj.m_oAlignment->m_oIndent.get();
}
if(dxfObj.m_oAlignment->m_oRelativeIndent.IsInit())
{
dxf.dxfn->cIndentNinch = false;
dxf.dxfn->dxfalc.iIndent = dxfObj.m_oAlignment->m_oRelativeIndent.get();
}
if(dxfObj.m_oAlignment->m_oShrinkToFit.IsInit())
{
dxf.dxfn->fShrinkNinch = false;
dxf.dxfn->dxfalc.fShrinkToFit = dxfObj.m_oAlignment->m_oShrinkToFit->GetValue();
}
if(dxfObj.m_oAlignment->m_oReadingOrder.IsInit())
{
dxf.dxfn->iReadingOrderNinch = false;
dxf.dxfn->dxfalc.iReadingOrder = dxfObj.m_oAlignment->m_oReadingOrder.get();
}
}
}
}
}
}
record << dxf;
auto rgce1pos = record.getRdPtr();
auto dxfSize = rgce1pos - ccePos;

View File

@ -72,7 +72,7 @@ public:
CFParsedFormula fmlaActive;
_UINT16 ipriority = 0;
_UINT16 icfTemplate = 0;
_UINT16 icfTemplate = 1;
CFExTemplateParams rgbTemplateParms;
BiffStructurePtr rgbCT;
@ -80,7 +80,7 @@ public:
//-----------------------------
bool fStopIfTrue = 0;
int ipriority_ = 0;
int dxfId_ = 0;
int dxfId_ = -1;
BaseObjectPtr m_CFEx;
BaseObjectPtr m_CF12_2;

View File

@ -54,7 +54,7 @@ public:
_UINT32 colFirst = 0;
_UINT32 colLast = 0;
_UINT32 coldx = 0;
IXFCell ixfe = 0xffff;
IXFCell ixfe = 0;
_UINT32 ixfeXLSB = 0xffffffff;
bool fHidden = false;

View File

@ -120,11 +120,19 @@ void DConRef::readFields(CFRecord& record)
void DConRef::writeFields(CFRecord& record)
{
if(cchFile == 0 && stFile== L"")
{
stFile = L'\x0002' + sheet_name;
cchFile = stFile.size();
}
record << ref << cchFile;
if (cchFile > 0 && cchFile < 0xffff)
{
record << stFile;
record.reserveNunBytes(2);
XLUnicodeStringNoCch file;
file = stFile;
record << file;
//record.reserveNunBytes(2);
}
}

View File

@ -55,8 +55,8 @@ public:
static const ElementType type = typeDConRef;
RefU ref;
unsigned short cchFile;
std::wstring stFile;
unsigned short cchFile = 0;
std::wstring stFile = L"";
std::vector<std::wstring> path;
std::wstring file_name;

View File

@ -56,7 +56,7 @@ public:
bool fWnClosed = 0;
_UINT32 xLeft = 0;
_UINT32 yTop = 0;
_INT32 idObj = 0;
_INT32 idObj = -1;
_UINT32 idvMac = 0;
};

View File

@ -75,9 +75,10 @@ void DXF::writeFields(CFRecord& record)
{
if (record.getGlobalWorkbookInfo()->Version < 0x0800)
{
frtRefHeaderU.rt = 2189;
record << frtRefHeaderU;
_UINT16 flags = 0;
SETBIT(flags, 0, 1)
SETBIT(flags, 1, xfprops.fNewBorder)
record << flags << xfprops;
}

View File

@ -55,6 +55,8 @@ void DataFormat::readFields(CFRecord& record)
unsigned short flags;
record >> xi >> yi >> iss >> flags;
fUnknown = GETBIT(flags, 0);
if(iss > 1000)
iss = 0;
}
void DataFormat::writeFields(CFRecord& record)

View File

@ -56,9 +56,9 @@ public:
std::wstring ref_ = L"";
//-----------------------------
_UINT32 rwMic = 0;
_UINT32 rwMac = 0;
_UINT32 rwMac = 0x00010000;
_UINT16 colMic = 0;
_UINT16 colMac = 0;
_UINT16 colMac = 0x0100;
};

View File

@ -154,8 +154,8 @@ void Dv::writeFields(CFRecord& record)
SETBIT(flags, 18, fShowInputMsg)
SETBIT(flags, 19, fShowErrorMsg)
SETBITS(flags, 20, 23, typOperator)
SETBIT(flags, 24, fDVMinFmla)
SETBIT(flags, 25, fDVMaxFmla)
//SETBIT(flags, 24, fDVMinFmla)
//SETBIT(flags, 25, fDVMaxFmla)
}
else
{

View File

@ -51,7 +51,7 @@ enum _typOperatorDv
operatorDvGreaterThanOrEqual,
operatorDvLessThanOrEqual
};
enum _valTypeDv
enum _valTypeDv
{
typeDvNone = 0,
typeDvWhole = 1,
@ -81,12 +81,12 @@ public:
_valTypeDv valType;
unsigned char errStyle;
bool fStrLookup;
bool fAllowBlank;
bool fSuppressCombo;
unsigned char mdImeMode;
bool fShowInputMsg;
bool fShowErrorMsg;
bool fStrLookup = false;
bool fAllowBlank = false;
bool fSuppressCombo = false;
unsigned char mdImeMode = 0;
bool fShowInputMsg = false;
bool fShowErrorMsg = false;
_typOperatorDv typOperator;
std::wstring PromptTitle;//XLUnicodeString

View File

@ -111,7 +111,7 @@ void ExternSheet::writeFields(CFRecord& record)
}
else if (record.getGlobalWorkbookInfo()->Version < 0x0800)
{
_UINT16 cXTI_2b = cXTI;
_UINT16 cXTI_2b = rgXTI.size();
record << cXTI_2b;
for (int i = 0; i < cXTI_2b; ++i)
{

View File

@ -67,5 +67,15 @@ void FeatHdr11::readFields(CFRecord& record)
record.skipNunBytes(2); // reserved4
}
void FeatHdr11::writeFields(CFRecord& record)
{
frt.rt = 0x0871;
record << frt << isf;
unsigned char reserved1 = 1;
unsigned int reserved2 = 0xFFFFFFFF;
record << reserved1 << reserved2 << reserved2 << idListNext;
record.reserveNunBytes(2);
}
} // namespace XLS

View File

@ -48,12 +48,13 @@ public:
BaseObjectPtr clone();
void readFields(CFRecord& record);
void writeFields(CFRecord& record);
static const ElementType type = typeFeatHdr11;
FrtHeader frt;
_UINT16 isf;
_UINT32 idListNext;
_UINT16 isf = 0x0005;
_UINT32 idListNext = 0;
};

View File

@ -90,5 +90,33 @@ void Feature11::readFields(CFRecord& record)
record >> rgbFeat;
}
void Feature11::writeFields(CFRecord& record)
{
frtRefHeaderU.grbitFrt.fFrtRef = true;
if(!bFeature12)
{
frtRefHeaderU.rt = 0x0872;
}
else
frtRefHeaderU.rt = 0x0878;
record << frtRefHeaderU << isf;
record.reserveNunBytes(5);
cref2 = refs2.size();
record << cref2;
//auto cbFeatDataPos = record.getRdPtr();
record.reserveNunBytes(4); //cbFeatData
record.reserveNunBytes(2);
for(auto i : refs2)
i->save(record);
//auto beginRgb = record.getRdPtr();
rgbFeat.save(record);
//auto endrgb = record.getRdPtr();
//cbFeatData = endrgb - beginRgb;
//record.RollRdPtrBack(endrgb - cbFeatDataPos);
//record << cbFeatData;
//record.skipNunBytes(endrgb - record.getRdPtr());
}
} // namespace XLS

View File

@ -51,19 +51,20 @@ public:
BaseObjectPtr clone();
void readFields(CFRecord& record);
void writeFields(CFRecord& record);
static const ElementType type = typeFeature11;
FrtRefHeaderU frtRefHeaderU;
_UINT16 isf;
_UINT16 cref2;
_UINT32 cbFeatData;
_UINT16 isf = 0x0005;
_UINT16 cref2 = 0;
_UINT32 cbFeatData = 0;
BiffStructurePtrVector refs2;
std::wstring sqref;
TableFeatureType rgbFeat;
bool bFeature12;
bool bFeature12 = false;
};
} // namespace XLS

View File

@ -72,7 +72,7 @@ public:
bool fCondense = false;
bool fExtend = false;
_UINT16 icv = 8;
_UINT16 icv = 0;
_UINT16 bls = 400;
_UINT16 sss = 0;
unsigned char uls = 0;

View File

@ -61,8 +61,9 @@ void HLink::readFields(CFRecord& record)
void HLink::writeFields(CFRecord& record)
{
record << ref8;
_GUID_ guid_num(0, 0, 0, 0);
STR::bstr2guid(hlinkClsid, guid_num);
_GUID_ guid_num;
if(!hlinkClsid.empty())
STR::bstr2guid(hlinkClsid, guid_num);
record << guid_num << hyperlink;
}

View File

@ -58,7 +58,7 @@ public:
//-----------------------------
Ref8U ref8;
std::wstring hlinkClsid;
std::wstring hlinkClsid = L"{79EAC9D0-BAF9-11CE-8C82-00AA004BA90B}";
OSHARED::HyperlinkObject hyperlink;

View File

@ -219,6 +219,8 @@ void Lbl::writeFields(CFRecord& record)
SETBIT(flags, 14, fWorkbookParam)
unsigned char cch = Name_bin.getSize();
if(!cch)
Name_bin = L"";
record << flags << chKey << cch;
auto ccePos = record.getRdPtr();
record.reserveNunBytes(4);
@ -226,7 +228,8 @@ void Lbl::writeFields(CFRecord& record)
_UINT16 itab_2b = itab;
record << itab_2b;
record.reserveNunBytes(4);
record << Name_bin;
if(cch)
record << Name_bin;
auto rgceStart = record.getRdPtr();
rgce.save(record);

View File

@ -74,5 +74,14 @@ void List12::readFields(CFRecord& record)
rgbList12->load(record);
}
void List12::writeFields(CFRecord& record)
{
frtHeader.rt = 0x0877;
record << frtHeader << lsd << idList;
if(rgbList12 != nullptr)
rgbList12->save(record);
}
} // namespace XLS

View File

@ -49,12 +49,13 @@ public:
BaseObjectPtr clone();
void readFields(CFRecord& record);
void writeFields(CFRecord& record);
static const ElementType type = typeList12;
FrtHeader frtHeader;
_UINT16 lsd;
_UINT32 idList;
_UINT16 lsd = 0;
_UINT32 idList = 1;
BiffStructurePtr rgbList12;
};

View File

@ -148,7 +148,7 @@ int MarkerFormat::serialize(std::wostream & _stream, int index, BaseObjectPtr _G
{
CP_XML_NODE(L"a:srgbClr")
{
CP_XML_ATTR(L"val", (false == fAuto || index < 0) ? rgbBack.strRGB : default_marker_color[index]);
CP_XML_ATTR(L"val", (false == fAuto || index < 0 || index > default_marker_color->size()) ? rgbBack.strRGB : default_marker_color[index]);
}
}
}
@ -158,7 +158,7 @@ int MarkerFormat::serialize(std::wostream & _stream, int index, BaseObjectPtr _G
{
CP_XML_NODE(L"a:srgbClr")
{
CP_XML_ATTR(L"val", (false == fAuto || index < 0) ? rgbFore.strRGB : default_marker_color[index]);
CP_XML_ATTR(L"val", (false == fAuto || index < 0 || index > default_marker_color->size()) ? rgbFore.strRGB : default_marker_color[index]);
}
}
CP_XML_NODE(L"a:prstDash") { CP_XML_ATTR(L"val", L"solid"); }

View File

@ -65,6 +65,7 @@ void MergeCells::readFields(CFRecord& record)
void MergeCells::writeFields(CFRecord& record)
{
cmcs = rgref.size();
record << cmcs;
for(auto i : rgref)
record << *i;
}

View File

@ -32,6 +32,11 @@
#include "MsoDrawing.h"
#include "../Biff_structures/ODRAW/OfficeArtRecord.h"
#include "../Biff_structures/ODRAW/OfficeArtFDG.h"
#include "../Biff_structures/ODRAW/OfficeArtFSP.h"
#include "../Biff_structures/ODRAW/OfficeArtFSPGR.h"
#include "../Biff_structures/ODRAW/SimpleOfficeArtContainers.h"
#include "../Biff_structures/ODRAW/OfficeArtFOPT.h"
namespace XLS
{
@ -100,6 +105,12 @@ void MsoDrawing::readFields(CFRecord& record)
}
}
void MsoDrawing::writeFields(CFRecord& record)
{
rgChildRec.save(record);
}
void MsoDrawing::useContinueRecords(CFRecord& record)
{
@ -123,6 +134,50 @@ const bool MsoDrawing::isEndingRecord(CFRecord& record)
return ODRAW::OfficeArtDgContainer::CheckIfContainerSizeOK(record);
}
void MsoDrawing::prepareComment(const unsigned int CommentId)
{
auto spgrContainer = new ODRAW::OfficeArtSpgrContainer(ODRAW::OfficeArtRecord::CA_Sheet);
rgChildRec.m_OfficeArtSpgrContainer = ODRAW::OfficeArtRecordPtr(spgrContainer);
{
auto ShapeGroup = new ODRAW::OfficeArtSpContainer(ODRAW::OfficeArtRecord::CA_Sheet);
auto groupFsp = new ODRAW::OfficeArtFSP;
ShapeGroup->m_OfficeArtFSP = ODRAW::OfficeArtRecordPtr(groupFsp);
groupFsp->shape_id = 0;
groupFsp->fGroup = true;
groupFsp->fPatriarch = true;
groupFsp->spid = CommentId;
auto groupFSPGR = new ODRAW::OfficeArtFSPGR;
ShapeGroup->m_OfficeArtFSPGR = ODRAW::OfficeArtRecordPtr(groupFSPGR);
spgrContainer->m_OfficeArtSpgrContainerFileBlock.push_back(ODRAW::OfficeArtContainerPtr(ShapeGroup));
}
auto TextboxContainer = new ODRAW::OfficeArtSpContainer(ODRAW::OfficeArtRecord::CA_Sheet);
auto fdgPtr = new ODRAW::OfficeArtFDG;
fdgPtr->rh_own.recInstance = CommentId;
fdgPtr->csp = 2;
fdgPtr->spidCur = CommentId+1;
rgChildRec.m_OfficeArtFDG = ODRAW::OfficeArtRecordPtr(fdgPtr);
spgrContainer->m_OfficeArtSpgrContainerFileBlock.push_back(ODRAW::OfficeArtContainerPtr(TextboxContainer));
auto fsprPtr = new ODRAW::OfficeArtFSP;
TextboxContainer->m_OfficeArtFSP = ODRAW::OfficeArtRecordPtr(fsprPtr);
fsprPtr->shape_id = 0xCA;
fsprPtr->spid = CommentId+1;
fsprPtr->fHaveAnchor = true;
fsprPtr->fHaveSpt = true;
{
//todo add mandatory optrions writing
//auto textboxOpt = new ODRAW::OfficeArtFOPT;
}
}
} // namespace XLS

View File

@ -50,6 +50,7 @@ public:
BaseObjectPtr clone();
void readFields (CFRecord& record);
void writeFields (CFRecord& record);
void readFields ();
void resetToBegin ();
@ -60,6 +61,8 @@ public:
virtual const bool isEndingRecord (CFRecord& record);
virtual void useContinueRecords (CFRecord& record);
void prepareComment (const unsigned int CommentId);
//-----------------------------
ODRAW::OfficeArtDgContainer rgChildRec;

View File

@ -332,5 +332,39 @@ void Obj::readFields(CFRecord& record)
}
void Obj::writeFields(CFRecord& record)
{
record << cmo;
if(cmo.ot == 0x08)
record << pictFormat << pictFlags;
else if((cmo.ot >= 0x10 && cmo.ot <= 0x12) || cmo.ot == 0x14)
record << sbs;
else if(cmo.ot == 0x19)
record << nts;
record << macro;
if(cmo.ot == 0x08)
record << pictFmla;
if(cmo.ot== 0x0B || cmo.ot == 0x0C || (cmo.ot >= 0x10 && cmo.ot <= 0x12) || cmo.ot == 0x14)
{
if(cmo.ot== 0x0B || cmo.ot == 0x0C)
linkFmla.ft = 0x0B;
else
linkFmla.ft = 0x0E;
record << linkFmla;
}
if(cmo.ot== 0x0B || cmo.ot == 0x0C)
record << checkBox;
if(cmo.ot == 0x0C)
record << radioButton;
else if(cmo.ot == 0x0D)
record << edit;
else if(cmo.ot == 0x12 || cmo.ot == 0x14)
list.save(record, cmo.ot);
else if(cmo.ot == 0x13)
record << gbo;
if(cmo.ot != 0x12 && cmo.ot != 0x14)
record.reserveNunBytes(4);
}
} // namespace XLS

View File

@ -65,6 +65,7 @@ public:
BaseObjectPtr clone();
void readFields(CFRecord& record);
void writeFields(CFRecord& record);
static const ElementType type = typeObj;

View File

@ -93,7 +93,7 @@ void Palette::writeFields(CFRecord& record)
record << ccv;
for(auto i: rgColor)
if(i != nullptr)
record << i;
i->save(record);
}

View File

@ -55,12 +55,12 @@ public:
static const ElementType type = typePane;
_UINT16 x;
_UINT16 y;
_UINT16 x = 0;
_UINT16 y = 0;
//_UINT16 rwTop;
UncheckedRw rwTop;
UncheckedRw rwTop = 0;
//_UINT16 colLeft;
UncheckedCol colLeft;
UncheckedCol colLeft = 0;
PaneType pnnAcct; //4 byte in biff12
std::wstring topLeftCell;
@ -68,9 +68,9 @@ public:
//biff12
Xnum xnumXSplit;
Xnum xnumYSplit;
bool fFrozen;
bool fFrozenNoSplit;
_UINT32 pnnAcct_xlsb;
bool fFrozen = false;
bool fFrozenNoSplit = false;
_UINT32 pnnAcct_xlsb = 0;
};
} // namespace XLS

View File

@ -54,14 +54,14 @@ public:
static const ElementType type = typeQsiSXTag;
FrtHeaderOld frtHeaderOld;
unsigned short fSx = 0;
unsigned short fSx = 1;
bool fEnableRefresh = false;
bool fEnableRefresh = true;
bool fInvalid = false;
bool fTensorEx = false;
_UINT32 dwQsiFuture = 0;
unsigned char verSxLastUpdated = 0;
unsigned char verSxLastUpdated = 1;
unsigned char verSxUpdatableMin = 0;
unsigned char obCchName = 0x10;

View File

@ -151,6 +151,10 @@ void Row::writeFields(CFRecord& record)
_UINT16 rel_offset = 0xffff, flags1 = 0, flags2 = 0;
record.reserveNunBytes(2);// unused1
if(ixfe_val != 0)
{
ixfe_val += global_info_->cellStyleXfs_count;
}
if (ixfe_val != 0xffff)
ixfe_val_2b = ixfe_val;

View File

@ -46,6 +46,15 @@ void XLUnicodeStringSegmentedSXADDL::load(CFRecord& record)
record >> string;
}
void XLUnicodeStringSegmentedSXADDL::save(CFRecord& record)
{
cchTotal = string.getSize();
record << cchTotal;
record.reserveNunBytes(2);
record << string;
}
//-----------------------------------------
SXAddl::SXAddl() : bEndElement(false), bStartElement(false)
@ -103,6 +112,15 @@ void SXAddl::readFields(CFRecord& record)
}
}
void SXAddl::writeFields(CFRecord& record)
{
record << frtHeaderOld << sxc << sxd;
if(content != nullptr)
content->save(record);
else if(bEndElement)
record.reserveNunBytes(6);
}
BiffStructurePtr SXAddl::createSxcView(CFRecord& record)
{
BiffStructurePtr result;
@ -383,6 +401,11 @@ void SXAddl_SXCView_SXDId::load(CFRecord& record)
{
record >> stName;
}
void SXAddl_SXCView_SXDId::save(CFRecord& record)
{
record << stName;
}
//----------------------------------------------------------------------------
BiffStructurePtr SXAddl_SXCQsi_SXDId::clone()
{
@ -416,6 +439,25 @@ void SXAddl_SXCView_SXDVer10Info::load(CFRecord& record)
fTensorFillCv = GETBIT(flags, 7);
fHideDDData = GETBIT(flags, 8);
}
void SXAddl_SXCView_SXDVer10Info::save(CFRecord& record)
{
unsigned short flags = 0;
SETBIT(flags, 0, fDisplayImmediateItems)
SETBIT(flags, 1, fEnableDataEd)
SETBIT(flags, 2, fDisableFList)
SETBIT(flags, 3, fReenterOnLoadOnce)
SETBIT(flags, 4, fNotViewCalculatedMembers)
SETBIT(flags, 5, fNotVisualTotals)
SETBIT(flags, 6, fPageMultipleItemLabel)
SETBIT(flags, 7, fTensorFillCv)
SETBIT(flags, 8, fHideDDData)
record << bVerSxMacro << flags;
record.reserveNunBytes(3);
}
//----------------------------------------------------------------------------
BiffStructurePtr SXAddl_SXCView_SXDVer12Info::clone()
{
@ -538,6 +580,14 @@ void SXAddl_SXCCache_SXDVer10Info::load(CFRecord& record)
record >> reserved2;
}
void SXAddl_SXCCache_SXDVer10Info::save(CFRecord& record)
{
record.reserveNunBytes(6);
record << citmGhostMax << bVerCacheLastRefresh << bVerCacheRefreshableMin;
for (int i = 0; i < 8; i++)
record << numDateCopy[i];
record.reserveNunBytes(2);
}
//----------------------------------------------------------------------------
BiffStructurePtr SXAddl_SXCCache_SXDVerUpdInv::clone()
{
@ -634,6 +684,20 @@ void SXAddl_SXCView_SXDTableStyleClient::load(CFRecord& record)
fColumnHeaders = GETBIT(flags, 5);
fDefaultStyle = GETBIT(flags, 6);
}
void SXAddl_SXCView_SXDTableStyleClient::save(CFRecord& record)
{
record.reserveNunBytes(6);
unsigned short flags = 0;
SETBIT(flags, 1, fLastColumn)
SETBIT(flags, 2, fRowStrips)
SETBIT(flags, 3, fColumnStrips)
SETBIT(flags, 4, fRowHeaders)
SETBIT(flags, 5, fColumnHeaders)
SETBIT(flags, 6, fDefaultStyle)
record << flags << stName;
}
//----------------------------------------------------------------------------
BiffStructurePtr SXAddl_SXCCacheField_SXDSxrmitmCount::clone()
{

View File

@ -49,10 +49,11 @@ public:
BiffStructurePtr clone();
virtual void load(CFRecord& record);
virtual void save(CFRecord& record);
static const ElementType type = typeStringSegmentedSXADDL;
_UINT32 cchTotal;
_UINT32 cchTotal = 0;
XLUnicodeString string;
};
@ -66,15 +67,16 @@ public:
virtual BaseObjectPtr clone();
virtual void readFields(CFRecord& record);
virtual void writeFields(CFRecord& record);
static const ElementType type = typeSXAddl;
bool bStartElement;
bool bEndElement;
bool bStartElement = false;
bool bEndElement = false;
_UINT32 frtHeaderOld;
unsigned char sxc;
unsigned char sxd;
_UINT32 frtHeaderOld = 0x0864;
unsigned char sxc = 0;
unsigned char sxd = 0;
BiffStructurePtr content;
private:
BiffStructurePtr createSxcView (CFRecord& record);
@ -171,6 +173,7 @@ public:
static const ElementType type = typeSXAddl;
virtual void load(CFRecord& record);
virtual void save(CFRecord& record);
XLUnicodeStringSegmentedSXADDL stName;
};
@ -199,15 +202,16 @@ public:
~SXAddl_SXCView_SXDTableStyleClient(){}
virtual void load(CFRecord& record);
virtual void save(CFRecord& record);
static const ElementType type = typeSXAddl;
bool fLastColumn;
bool fRowStrips;
bool fColumnStrips;
bool fRowHeaders;
bool fColumnHeaders;
bool fDefaultStyle;
bool fLastColumn = false;
bool fRowStrips = false;
bool fColumnStrips = false;
bool fRowHeaders = false;
bool fColumnHeaders = false;
bool fDefaultStyle = false;
LPWideString stName;
};
@ -289,12 +293,13 @@ public:
~SXAddl_SXCCache_SXDVer10Info(){}
virtual void load(CFRecord& record);
virtual void save(CFRecord& record);
static const ElementType type = typeSXAddl;
_INT32 citmGhostMax;
unsigned char bVerCacheLastRefresh;
unsigned char bVerCacheRefreshableMin;
_INT32 citmGhostMax = 0;
unsigned char bVerCacheLastRefresh = 0;
unsigned char bVerCacheRefreshableMin = 0;
unsigned char numDateCopy[8];
};
@ -464,19 +469,20 @@ public:
~SXAddl_SXCView_SXDVer10Info(){}
virtual void load(CFRecord& record);
virtual void save(CFRecord& record);
static const ElementType type = typeSXAddl;
unsigned char bVerSxMacro;
bool fDisplayImmediateItems;
bool fEnableDataEd;
bool fDisableFList;
bool fReenterOnLoadOnce;
bool fNotViewCalculatedMembers;
bool fNotVisualTotals;
bool fPageMultipleItemLabel;
bool fTensorFillCv;
bool fHideDDData;
unsigned char bVerSxMacro = 0;
bool fDisplayImmediateItems = false;
bool fEnableDataEd = false;
bool fDisableFList = false;
bool fReenterOnLoadOnce = false;
bool fNotViewCalculatedMembers = false;
bool fNotVisualTotals = false;
bool fPageMultipleItemLabel = false;
bool fTensorFillCv = false;
bool fHideDDData = false;
};
class SXAddl_SXCView_SXDVer12Info: public BiffStructure
{

View File

@ -67,5 +67,27 @@ void SXDB::readFields(CFRecord& record)
fEnableRefresh = GETBIT(flags, 5);
}
void SXDB::writeFields(CFRecord& record)
{
cchWho = rgb.getSize();
if(!cchWho)
cchWho = 0xFFFF;
unsigned short flags = 0;
SETBIT(flags, 0, fSaveData)
SETBIT(flags, 1, fInvalid)
SETBIT(flags, 2, fRefreshOnLoad)
SETBIT(flags, 3, fOptimizeCache)
SETBIT(flags, 4, fBackgroundQuery)
SETBIT(flags, 5, fEnableRefresh)
record << crdbdb << idstm << flags;
record.reserveNunBytes(2);
record << cfdbdb << cfdbTot << crdbUsed << vsType << cchWho;
if (cchWho > 0 && cchWho < 0xffff)
{
record << rgb;
}
}
} // namespace XLS

View File

@ -48,23 +48,24 @@ public:
BaseObjectPtr clone();
void readFields(CFRecord& record);
void writeFields(CFRecord& record);
static const ElementType type = typeSXDB;
_INT32 crdbdb;
unsigned short idstm;
bool fSaveData;
bool fInvalid;
bool fRefreshOnLoad;
bool fOptimizeCache;
bool fBackgroundQuery;
bool fEnableRefresh;
_INT32 crdbdb = 0;
unsigned short idstm = 0;
bool fSaveData = false;
bool fInvalid = false;
bool fRefreshOnLoad = false;
bool fOptimizeCache = false;
bool fBackgroundQuery = false;
bool fEnableRefresh = false;
short cfdbdb;
short cfdbTot;
unsigned short crdbUsed;
short vsType;
unsigned short cchWho;
short cfdbdb = 0;
short cfdbTot = 0;
unsigned short crdbUsed = 0;
short vsType = 1;
unsigned short cchWho = 0xFFFF;
XLUnicodeStringNoCch rgb;
};

View File

@ -61,5 +61,11 @@ void SXDBB::readFields(CFRecord& record)
record.skipNunBytes(size);
}
void SXDBB::writeFields(CFRecord& record)
{
if(size && blob)
record.appendRawDataToStatic(blob.get(), size);
}
} // namespace XLS

View File

@ -47,11 +47,12 @@ public:
BaseObjectPtr clone();
void readFields(CFRecord& record);
void writeFields(CFRecord& record);
static const ElementType type = typeSXDBB;
boost::shared_array<unsigned char> blob;
unsigned int size;
unsigned int size = 0;
};
} // namespace XLS

View File

@ -54,5 +54,10 @@ void SXDBEx::readFields(CFRecord& record)
record >> numDate >> cSxFormula;
}
void SXDBEx::writeFields(CFRecord& record)
{
record << numDate << cSxFormula;
}
} // namespace XLS

View File

@ -48,11 +48,12 @@ public:
BaseObjectPtr clone();
void readFields(CFRecord& record);
void writeFields(CFRecord& record);
static const ElementType type = typeSXDBEx;
DateAsNum numDate;
_UINT32 cSxFormula; //count formulas
_UINT32 cSxFormula = 0; //count formulas
};

View File

@ -31,6 +31,7 @@
*/
#include "SXDtr.h"
#include "../../../../../OOXML/Binary/Sheets/Reader/CellFormatController/DateReader.h"
namespace XLS
{
@ -52,6 +53,11 @@ void SXDtr::readFields(CFRecord& record)
{
record >> yr >> mon >> dom >> hr >> min >> sec;
}
void SXDtr::writeFields(CFRecord& record)
{
record << yr << mon << dom << hr << min << sec;
}
std::wstring SXDtr::value()
{
@ -67,5 +73,20 @@ std::wstring SXDtr::value()
return s.str();
}
void SXDtr::fromString(const std::wstring &strDate)
{
DateReader reader;
tm dateTime;
if(reader.parseIsoDate(strDate, dateTime))
{
yr = dateTime.tm_year + 1900;
mon = dateTime.tm_mon + 1;
dom = dateTime.tm_mday + 1;
hr = dateTime.tm_hour;
min = dateTime.tm_min;
sec = dateTime.tm_sec;
}
}
} // namespace XLS

View File

@ -47,17 +47,19 @@ public:
BaseObjectPtr clone();
void readFields(CFRecord& record);
void writeFields(CFRecord& record);
static const ElementType type = typeSXDtr;
unsigned short yr;
unsigned short mon;
unsigned char dom;
unsigned char hr;
unsigned char min;
unsigned char sec;
unsigned short yr = 0;
unsigned short mon = 0;
unsigned char dom = 0;
unsigned char hr = 0;
unsigned char min = 0;
unsigned char sec = 0;
std::wstring value();
void fromString(const std::wstring &strDate);
};

View File

@ -108,9 +108,12 @@ void SXEx::readFields(CFRecord& record)
void SXEx::writeFields(CFRecord& record)
{
cchErrorString = stError.getSize();
cchNullString = stDisplayNull.getSize();
cchTag = stTag.getSize();
if(stError.getSize())
cchErrorString = stError.getSize();
if(stDisplayNull.getSize())
cchNullString = stDisplayNull.getSize();
if(stTag.getSize())
cchTag = stTag.getSize();
record << csxformat << cchErrorString << cchNullString << cchTag << csxselect;
_UINT32 flags = 0;
SETBIT(flags, 0, fAcrossPageLay)
@ -124,10 +127,12 @@ void SXEx::writeFields(CFRecord& record)
SETBIT(flags, 22, fDisplayNullString)
SETBIT(flags, 23, fSubtotalHiddenPageItems)
record << crwPage << ccolPage << flags;
cchPageFieldStyle = stPageFieldStyle.getSize();
cchTableStyle = stTableStyle.getSize();
cchVacateStyle = stVacateStyle.getSize();
if(stPageFieldStyle.getSize())
cchPageFieldStyle = stPageFieldStyle.getSize();
if(stTableStyle.getSize())
cchTableStyle = stTableStyle.getSize();
if(stVacateStyle.getSize())
cchVacateStyle = stVacateStyle.getSize();
record << cchPageFieldStyle << cchTableStyle << cchVacateStyle;
if (cchErrorString > 0 && cchErrorString != 0xffff)
{

View File

@ -64,18 +64,18 @@ public:
bool fAcrossPageLay = false;
unsigned char cWrapPage = 0;
bool fEnableWizard = false;
bool fEnableDrilldown = false;
bool fEnableFieldDialog = false;
bool fPreserveFormatting = false;
bool fMergeLabels = false;
bool fDisplayErrorString = false;
bool fDisplayNullString = false;
bool fSubtotalHiddenPageItems = false;
bool fEnableWizard = true;
bool fEnableDrilldown = true;
bool fEnableFieldDialog = true;
bool fPreserveFormatting = true;
bool fMergeLabels = false;
bool fDisplayErrorString = false;
bool fDisplayNullString = true;
bool fSubtotalHiddenPageItems = false;
unsigned short cchPageFieldStyle = 0;
unsigned short cchTableStyle = 0;
unsigned short cchVacateStyle = 0;
unsigned short cchPageFieldStyle = 0xFFFF;
unsigned short cchTableStyle = 0xFFFF;
unsigned short cchVacateStyle = 0xFFFF;
XLUnicodeStringNoCch stError;
XLUnicodeStringNoCch stDisplayNull;

View File

@ -76,5 +76,28 @@ void SXFDB::readFields(CFRecord& record)
global_info->arPivotCacheFields.push_back(fAllAtoms);
}
void SXFDB::writeFields(CFRecord& record)
{
unsigned short flags = 0;
SETBIT(flags, 0, fAllAtoms)
SETBIT(flags, 1, fSomeUnhashed)
SETBIT(flags, 2, fUsed)
SETBIT(flags, 3, fHasParent)
SETBIT(flags, 4, fRangeGroup)
SETBIT(flags, 5, fNumField)
SETBIT(flags, 7, fTextEtcField)
SETBIT(flags, 8, fnumMinMaxValid)
SETBIT(flags, 9, fShortIitms)
SETBIT(flags, 10, fNonDates)
SETBIT(flags, 11, fDateInField)
SETBIT(flags, 13, fServerBased)
SETBIT(flags, 14, fCantGetUniqueItems)
SETBIT(flags, 15, fCalculatedField)
record << flags << ifdbParent << ifdbBase << citmUnq << csxoper << cisxoper << catm;
record << stFieldName;
}
} // namespace XLS

View File

@ -48,29 +48,30 @@ public:
BaseObjectPtr clone();
void readFields(CFRecord& record);
void writeFields(CFRecord& record);
static const ElementType type = typeSXFDB;
bool fAllAtoms;
bool fSomeUnhashed;
bool fUsed;
bool fHasParent;
bool fRangeGroup;
bool fNumField;
bool fTextEtcField;
bool fnumMinMaxValid;
bool fShortIitms;
bool fNonDates;
bool fDateInField;
bool fServerBased;
bool fCantGetUniqueItems;
bool fCalculatedField;
unsigned short ifdbParent;
unsigned short ifdbBase;
unsigned short citmUnq;
unsigned short csxoper;
unsigned short cisxoper;
unsigned short catm;
bool fAllAtoms = false;
bool fSomeUnhashed = false;
bool fUsed = false;
bool fHasParent = false;
bool fRangeGroup = false;
bool fNumField = false;
bool fTextEtcField = false;
bool fnumMinMaxValid = false;
bool fShortIitms = false;
bool fNonDates = false;
bool fDateInField = false;
bool fServerBased = false;
bool fCantGetUniqueItems = false;
bool fCalculatedField = false;
unsigned short ifdbParent = 0;
unsigned short ifdbBase = 0;
unsigned short citmUnq = 0;
unsigned short csxoper = 0;
unsigned short cisxoper = 0;
unsigned short catm = 0;
XLUnicodeString stFieldName;
};

View File

@ -54,5 +54,10 @@ void SXFDBType::readFields(CFRecord& record)
record >> wTypeSql;
}
void SXFDBType::writeFields(CFRecord& record)
{
record << wTypeSql;
}
} // namespace XLS

View File

@ -47,10 +47,11 @@ public:
BaseObjectPtr clone();
void readFields(CFRecord& record);
void writeFields(CFRecord& record);
static const ElementType type = typeSXFDBType;
short wTypeSql; //ODBCType enum
short wTypeSql = 0; //ODBCType enum
};
} // namespace XLS

View File

@ -56,5 +56,11 @@ void SXFormula::readFields(CFRecord& record)
record >> reserved >> ifdb;
}
void SXFormula::writeFields(CFRecord& record)
{
record.reserveNunBytes(2);
record << ifdb;
}
} // namespace XLS

View File

@ -47,10 +47,11 @@ public:
BaseObjectPtr clone();
void readFields(CFRecord& record);
void writeFields(CFRecord& record);
static const ElementType type = typeSXFormula;
short ifdb;
short ifdb = 0;
};
} // namespace XLS

View File

@ -104,7 +104,6 @@ void SXLIItem::save(CFRecord& record)
SETBIT(flags, 10, fBlock)
SETBIT(flags, 11, fGrand)
SETBIT(flags, 12, fMultiDataOnAxis)
cSic = rgisxvi.size();
if (fGrand)
isxviMac = 1;
record << cSic << itmType << isxviMac << flags;

View File

@ -47,7 +47,7 @@ namespace XLS
bool fSbt = 0;
bool fBlock = 0;
bool fGrand = 0;
bool fMultiDataOnAxis = 0;
bool fMultiDataOnAxis = true;
std::vector<short> rgisxvi;
};

View File

@ -53,5 +53,10 @@ void SXNum::readFields(CFRecord& record)
record >> num;
}
void SXNum::writeFields(CFRecord& record)
{
record << num;
}
} // namespace XLS

View File

@ -48,6 +48,7 @@ public:
BaseObjectPtr clone();
void readFields(CFRecord& record);
void writeFields(CFRecord& record);
static const ElementType type = typeSXNum;

View File

@ -60,5 +60,16 @@ void SXPair::readFields(CFRecord& record)
fRelative = GETBIT(flags, 4);
}
void SXPair::writeFields(CFRecord& record)
{
record << isxvd << iCache;
unsigned short flags = 0;
SETBIT(flags, 0, fFormula)
SETBIT(flags, 3, fPhysical)
SETBIT(flags, 4, fRelative)
record.reserveNunBytes(2);
record << flags;
}
} // namespace XLS

View File

@ -48,15 +48,16 @@ public:
BaseObjectPtr clone();
void readFields(CFRecord& record);
void writeFields(CFRecord& record);
static const ElementType type = typeSXPair;
unsigned short isxvd;
short iCache;
unsigned short isxvd = 0;
short iCache = 0;
bool fFormula;
bool fPhysical;
bool fRelative;
bool fFormula = false;
bool fPhysical = false;
bool fRelative = false;
};
} // namespace XLS

View File

@ -60,5 +60,14 @@ void SXRng::readFields(CFRecord& record)
iByType = GETBITS(flags, 2, 4);
}
void SXRng::writeFields(CFRecord& record)
{
unsigned short flags = 0;
SETBIT(flags, 0, fAutoStart)
SETBIT(flags, 1, fAutoEnd)
SETBITS(flags, 2, 4, iByType)
record << flags;
}
} // namespace XLS

View File

@ -48,12 +48,13 @@ public:
BaseObjectPtr clone();
void readFields(CFRecord& record);
void writeFields(CFRecord& record);
static const ElementType type = typeSXRng;
bool fAutoStart;
bool fAutoEnd;
unsigned char iByType;
bool fAutoStart = false;
bool fAutoEnd = false;
unsigned char iByType = 0;
};
} // namespace XLS

View File

@ -51,7 +51,7 @@ public:
static const ElementType type = typeSXStreamID;
short idStm = 0;
short idStm = 1;
};
} // namespace XLS

View File

@ -122,6 +122,12 @@ void SXVDEx::writeFields(CFRecord& record)
record.reserveNunBytes(8);
record << stSubName;
}
else
{
cchSubName = 0xffff;
record << cchSubName;
record.reserveNunBytes(8);
}
}
} // namespace XLS

View File

@ -53,26 +53,26 @@ public:
static const ElementType type = typeSXVDEx;
bool fShowAllItems = false;
bool fDragToRow = false;
bool fDragToColumn = false;
bool fDragToPage = false;
bool fDragToHide = false;
bool fDragToRow = true;
bool fDragToColumn = true;
bool fDragToPage = true;
bool fDragToHide = true;
bool fNotDragToData = false;
bool fServerBased = false;
bool fAutoSort = false;
bool fAscendSort = false;
bool fAutoShow = false;
bool fTopAutoShow = false;
bool fTopAutoShow = true;
bool fCalculatedField = false;
bool fPageBreaksBetweenItems = false;
bool fHideNewItems = false;
bool fOutline = false;
bool fOutline = true;
bool fInsertBlankRow = false;
bool fSubtotalAtTop = false;
bool fSubtotalAtTop = true;
unsigned char citmAutoShow = 0;
short isxdiAutoSort = 0;
short isxdiAutoShow = 0;
unsigned char citmAutoShow = 10;
short isxdiAutoSort = -1;
short isxdiAutoShow = -1;
unsigned short ifmt = 0;
unsigned short cchSubName = 0;
XLUnicodeStringNoCch stSubName;

View File

@ -76,6 +76,8 @@ void SXVI::writeFields(CFRecord& record)
SETBIT(flags, 3, fFormula)
SETBIT(flags, 4, fMissing)
cchName = stName.getSize();
if(cchName == 0)
cchName = 0xFFFF;
record << itmType << flags << iCache << cchName;
if (cchName > 0 && cchName < 0xFFFF)

View File

@ -73,7 +73,7 @@ public:
bool fFormula = false;
bool fMissing = false;
short iCache = 0;
short iCache = -1;
unsigned short cchName = 0;
XLUnicodeStringNoCch stName;

View File

@ -64,5 +64,18 @@ void SXViewEx9::readFields(CFRecord& record)
fRepeatItemsOnEachPrintedPage = GETBIT(flags2, 5);
}
void SXViewEx9::writeFields(CFRecord& record)
{
unsigned short flags = 0;
_UINT32 flags2 = 0;
SETBIT(flags, 1, fFrtAlert)
SETBIT(flags2, 1, fPrintTitles)
SETBIT(flags2, 2, fLineMode)
SETBIT(flags2, 5, fRepeatItemsOnEachPrintedPage)
record << rt << flags;
record.reserveNunBytes(4);
record << flags2 << itblAutoFmt << chGrand;
}
} // namespace XLS

View File

@ -48,15 +48,16 @@ public:
BaseObjectPtr clone();
void readFields(CFRecord& record);
void writeFields(CFRecord& record);
static const ElementType type = typeSXViewEx9;
unsigned short rt;
bool fFrtAlert;
bool fPrintTitles;
bool fLineMode;
bool fRepeatItemsOnEachPrintedPage;
unsigned short itblAutoFmt;
unsigned short rt = 0x0810;
bool fFrtAlert = true;
bool fPrintTitles = false;
bool fLineMode = false;
bool fRepeatItemsOnEachPrintedPage = false;
unsigned short itblAutoFmt = 1;
XLUnicodeString chGrand;
};

Some files were not shown because too many files have changed in this diff Show More