Skip to content

Commit 2b789e2

Browse files
authored
Merge pull request #389 from viest/dev
Feat: paper,margins
2 parents e95a68a + 862d1fc commit 2b789e2

File tree

7 files changed

+212
-10
lines changed

7 files changed

+212
-10
lines changed

include/xlswriter.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,13 +307,15 @@ void comment_show(xls_resource_write_t *res);
307307
void hide_worksheet(xls_resource_write_t *res);
308308
void first_worksheet(xls_resource_write_t *res);
309309
void zoom(xls_resource_write_t *res, zend_long zoom);
310+
void paper(xls_resource_write_t *res, zend_long type);
310311
void gridlines(xls_resource_write_t *res, zend_long option);
311312
void auto_filter(zend_string *range, xls_resource_write_t *res);
312313
void protection(xls_resource_write_t *res, zend_string *password);
313314
void format_copy(lxw_format *new_format, lxw_format *other_format);
314315
void printed_direction(xls_resource_write_t *res, unsigned int direction);
315316
void xls_file_path(zend_string *file_name, zval *dir_path, zval *file_path);
316317
void freeze_panes(xls_resource_write_t *res, zend_long row, zend_long column);
318+
void margins(xls_resource_write_t *res, double left, double right, double top, double bottom);
317319
void set_row(zend_string *range, double height, xls_resource_write_t *res, lxw_format *format);
318320
void validation(xls_resource_write_t *res, zend_string *range, lxw_data_validation *validation);
319321
void set_column(zend_string *range, double width, xls_resource_write_t *res, lxw_format *format);

kernel/excel.c

Lines changed: 101 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,17 @@ ZEND_BEGIN_ARG_INFO_EX(xls_set_row_arginfo, 0, 0, 3)
186186
ZEND_ARG_INFO(0, height)
187187
ZEND_END_ARG_INFO()
188188

189+
ZEND_BEGIN_ARG_INFO_EX(xls_set_paper_arginfo, 0, 0, 1)
190+
ZEND_ARG_INFO(0, paper)
191+
ZEND_END_ARG_INFO()
192+
193+
ZEND_BEGIN_ARG_INFO_EX(xls_set_margins_arginfo, 0, 0, 4)
194+
ZEND_ARG_INFO(0, left)
195+
ZEND_ARG_INFO(0, right)
196+
ZEND_ARG_INFO(0, top)
197+
ZEND_ARG_INFO(0, bottom)
198+
ZEND_END_ARG_INFO()
199+
189200
ZEND_BEGIN_ARG_INFO_EX(xls_set_global_format, 0, 0, 1)
190201
ZEND_ARG_INFO(0, format_handle)
191202
ZEND_END_ARG_INFO()
@@ -972,6 +983,47 @@ PHP_METHOD(vtiful_xls, setRow)
972983
}
973984
/* }}} */
974985

986+
/** {{{ \Vtiful\Kernel\Excel::setPaper(int $paper)
987+
*/
988+
PHP_METHOD(vtiful_xls, setPaper)
989+
{
990+
zend_long type = 0;
991+
992+
ZEND_PARSE_PARAMETERS_START(1, 1)
993+
Z_PARAM_LONG(type)
994+
ZEND_PARSE_PARAMETERS_END();
995+
996+
ZVAL_COPY(return_value, getThis());
997+
998+
xls_object *obj = Z_XLS_P(getThis());
999+
1000+
paper(&obj->write_ptr, type);
1001+
}
1002+
/* }}} */
1003+
1004+
/** {{{ \Vtiful\Kernel\Excel::setMargins(double|null $left, double|null $right, double|null $top, double|null $bottom)
1005+
*/
1006+
PHP_METHOD(vtiful_xls, setMargins)
1007+
{
1008+
double left = 0.7, right = 0.7, top = 0.75, bottom = 0.75;
1009+
1010+
ZEND_PARSE_PARAMETERS_START(0, 4)
1011+
Z_PARAM_OPTIONAL
1012+
Z_PARAM_DOUBLE_OR_NULL(left, _dummy)
1013+
Z_PARAM_DOUBLE_OR_NULL(right, _dummy)
1014+
Z_PARAM_DOUBLE_OR_NULL(top, _dummy)
1015+
Z_PARAM_DOUBLE_OR_NULL(bottom, _dummy)
1016+
ZEND_PARSE_PARAMETERS_END();
1017+
1018+
ZVAL_COPY(return_value, getThis());
1019+
1020+
xls_object *obj = Z_XLS_P(getThis());
1021+
1022+
// units: inches to cm
1023+
margins(&obj->write_ptr, left / 2.54, right / 2.54, top / 2.54, bottom / 2.54);
1024+
}
1025+
/* }}} */
1026+
9751027
/** {{{ \Vtiful\Kernel\Excel::defaultFormat(resource $format)
9761028
*/
9771029
PHP_METHOD(vtiful_xls, defaultFormat)
@@ -1149,10 +1201,9 @@ PHP_METHOD(vtiful_xls, protection)
11491201
}
11501202
/* }}} */
11511203

1152-
1153-
/** {{{ \Vtiful\Kernel\Excel::setPrintedPortrait()
1204+
/** {{{ \Vtiful\Kernel\Excel::setPortrait()
11541205
*/
1155-
PHP_METHOD(vtiful_xls, setPrintedPortrait)
1206+
PHP_METHOD(vtiful_xls, setPortrait)
11561207
{
11571208
ZVAL_COPY(return_value, getThis());
11581209

@@ -1165,9 +1216,9 @@ PHP_METHOD(vtiful_xls, setPrintedPortrait)
11651216
/* }}} */
11661217

11671218

1168-
/** {{{ \Vtiful\Kernel\Excel::setPrintedLandscape()
1219+
/** {{{ \Vtiful\Kernel\Excel::setLandscape()
11691220
*/
1170-
PHP_METHOD(vtiful_xls, setPrintedLandscape)
1221+
PHP_METHOD(vtiful_xls, setLandscape)
11711222
{
11721223
ZVAL_COPY(return_value, getThis());
11731224

@@ -1561,8 +1612,10 @@ zend_function_entry xls_methods[] = {
15611612
PHP_ME(vtiful_xls, zoom, xls_sheet_zoom_arginfo, ZEND_ACC_PUBLIC)
15621613
PHP_ME(vtiful_xls, gridline, xls_sheet_gridline_arginfo, ZEND_ACC_PUBLIC)
15631614

1564-
PHP_ME(vtiful_xls, setPrintedPortrait, xls_set_printed_portrait_arginfo, ZEND_ACC_PUBLIC)
1565-
PHP_ME(vtiful_xls, setPrintedLandscape, xls_set_printed_landscape_arginfo, ZEND_ACC_PUBLIC)
1615+
PHP_ME(vtiful_xls, setPaper, xls_set_paper_arginfo, ZEND_ACC_PUBLIC)
1616+
PHP_ME(vtiful_xls, setMargins, xls_set_margins_arginfo, ZEND_ACC_PUBLIC)
1617+
PHP_ME(vtiful_xls, setPortrait, xls_set_printed_portrait_arginfo, ZEND_ACC_PUBLIC)
1618+
PHP_ME(vtiful_xls, setLandscape, xls_set_printed_landscape_arginfo, ZEND_ACC_PUBLIC)
15661619

15671620
PHP_ME(vtiful_xls, setCurrentSheetHide, xls_hide_sheet_arginfo, ZEND_ACC_PUBLIC)
15681621
PHP_ME(vtiful_xls, setCurrentSheetIsFirst, xls_first_sheet_arginfo, ZEND_ACC_PUBLIC)
@@ -1619,6 +1672,47 @@ VTIFUL_STARTUP_FUNCTION(excel) {
16191672
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "GRIDLINES_SHOW_PRINT", LXW_SHOW_PRINT_GRIDLINES)
16201673
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "GRIDLINES_SHOW_SCREEN", LXW_SHOW_SCREEN_GRIDLINES)
16211674

1675+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_DEFAULT", 0)
1676+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_LETTER", 1)
1677+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_LETTER_SMALL", 2)
1678+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_TABLOID", 3)
1679+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_LEDGER", 4)
1680+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_LEGAL", 5)
1681+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_STATEMENT", 6)
1682+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_EXECUTIVE", 7)
1683+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_A3", 8)
1684+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_A4", 9)
1685+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_A4_SMALL", 10)
1686+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_A5", 11)
1687+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_B4", 12)
1688+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_B5", 13)
1689+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_FOLIO", 14)
1690+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_QUARTO", 15)
1691+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_NOTE", 18)
1692+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_ENVELOPE_9", 19)
1693+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_ENVELOPE_10", 20)
1694+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_ENVELOPE_11", 21)
1695+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_ENVELOPE_12", 22)
1696+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_ENVELOPE_14", 23)
1697+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_C_SIZE_SHEET", 24)
1698+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_D_SIZE_SHEET", 25)
1699+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_E_SIZE_SHEET", 26)
1700+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_ENVELOPE_DL", 27)
1701+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_ENVELOPE_C3", 28)
1702+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_ENVELOPE_C4", 29)
1703+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_ENVELOPE_C5", 30)
1704+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_ENVELOPE_C6", 31)
1705+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_ENVELOPE_C65", 32)
1706+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_ENVELOPE_B4", 33)
1707+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_ENVELOPE_B5", 34)
1708+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_ENVELOPE_B6", 35)
1709+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_ENVELOPE_1", 36)
1710+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_MONARCH", 37)
1711+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_ENVELOPE_2", 38)
1712+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_FANFOLD", 39)
1713+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_GERMAN_STD_FANFOLD", 40)
1714+
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, "PAPER_GERMAN_LEGAL_FANFOLD", 41)
1715+
16221716
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, V_XLS_CONST_READ_TYPE_INT, READ_TYPE_INT);
16231717
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, V_XLS_CONST_READ_TYPE_DOUBLE, READ_TYPE_DOUBLE);
16241718
REGISTER_CLASS_CONST_LONG(vtiful_xls_ce, V_XLS_CONST_READ_TYPE_STRING, READ_TYPE_STRING);

kernel/write.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,22 @@ void first_worksheet(xls_resource_write_t *res)
392392
worksheet_set_first_sheet(res->worksheet);
393393
}
394394

395+
/*
396+
* Paper format
397+
*/
398+
void paper(xls_resource_write_t *res, zend_long type)
399+
{
400+
worksheet_set_paper(res->worksheet, type);
401+
}
402+
403+
/*
404+
* Set margins
405+
*/
406+
void margins(xls_resource_write_t *res, double left, double right, double top, double bottom)
407+
{
408+
worksheet_set_margins(res->worksheet, left, right, top, bottom);
409+
}
410+
395411
/*
396412
* Call finalization code and close file.
397413
*/

tests/margins.phpt

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
--TEST--
2+
Check for vtiful presence
3+
--SKIPIF--
4+
<?php if (!extension_loaded("xlswriter")) print "skip"; ?>
5+
--FILE--
6+
<?php
7+
$config = [
8+
'path' => './tests'
9+
];
10+
11+
$fileObject = new \Vtiful\Kernel\Excel($config);
12+
$fileObject = $fileObject->fileName('tutorial.xlsx');
13+
14+
$filePath = $fileObject->header(['name', 'age'])
15+
->data([
16+
['viest', 21],
17+
['wjx', 21]
18+
])
19+
->setPaper(\Vtiful\Kernel\Excel::PAPER_A3)
20+
->setLandscape()
21+
->setMargins(1, 1, 2, 2)
22+
->output();
23+
24+
var_dump($filePath);
25+
?>
26+
--CLEAN--
27+
<?php
28+
@unlink(__DIR__ . '/tutorial.xlsx');
29+
?>
30+
--EXPECT--
31+
string(21) "./tests/tutorial.xlsx"

tests/paper.phpt

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
--TEST--
2+
Check for vtiful presence
3+
--SKIPIF--
4+
<?php if (!extension_loaded("xlswriter")) print "skip"; ?>
5+
--FILE--
6+
<?php
7+
$config = [
8+
'path' => './tests'
9+
];
10+
11+
$fileObject = new \Vtiful\Kernel\Excel($config);
12+
$fileObject = $fileObject->fileName('tutorial.xlsx');
13+
14+
$filePath = $fileObject->header(['name', 'age'])
15+
->data([
16+
['viest', 21],
17+
['wjx', 21]
18+
])
19+
->setPaper(\Vtiful\Kernel\Excel::PAPER_A3)
20+
->setLandscape()
21+
->output();
22+
23+
var_dump($filePath);
24+
?>
25+
--CLEAN--
26+
<?php
27+
@unlink(__DIR__ . '/tutorial.xlsx');
28+
?>
29+
--EXPECT--
30+
string(21) "./tests/tutorial.xlsx"

tests/printed.phpt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ try {
88
$config = ['path' => './tests'];
99
$excel = new \Vtiful\Kernel\Excel($config);
1010

11-
$excel->setPrintedPortrait();
11+
$excel->setPortrait();
1212
} catch (\Exception $exception) {
1313
var_dump($exception->getCode());
1414
var_dump($exception->getMessage());
@@ -18,7 +18,7 @@ $config = ['path' => './tests'];
1818
$excel = new \Vtiful\Kernel\Excel($config);
1919

2020
$excel->fileName('printed_portrait.xlsx', 'sheet1')
21-
->setPrintedPortrait()
21+
->setPortrait()
2222
->output();
2323

2424
var_dump($excel);
@@ -27,7 +27,7 @@ $config = ['path' => './tests'];
2727
$excel = new \Vtiful\Kernel\Excel($config);
2828

2929
$excel->fileName('printed_landscape.xlsx', 'sheet1')
30-
->setPrintedLandscape()
30+
->setLandscape()
3131
->output();
3232

3333
var_dump($excel);

tests/protection_password.phpt

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
--TEST--
2+
Check for vtiful presence
3+
--SKIPIF--
4+
<?php if (!extension_loaded("xlswriter")) print "skip"; ?>
5+
--FILE--
6+
<?php
7+
$config = [
8+
'path' => './tests'
9+
];
10+
11+
$fileObject = new \Vtiful\Kernel\Excel($config);
12+
$fileObject = $fileObject->fileName('tutorial.xlsx');
13+
14+
$filePath = $fileObject->header(['name', 'age'])
15+
->data([
16+
['viest', 21],
17+
['wjx', 21]
18+
])
19+
->protection('password')
20+
->output();
21+
22+
var_dump($filePath);
23+
?>
24+
--CLEAN--
25+
<?php
26+
@unlink(__DIR__ . '/tutorial.xlsx');
27+
?>
28+
--EXPECT--
29+
string(21) "./tests/tutorial.xlsx"

0 commit comments

Comments
 (0)