diff --git "a/end/example/\350\256\242\345\215\225.cr" "b/end/example/\350\256\242\345\215\225.cr"
index e65b203..948e66d 100644
--- "a/end/example/\350\256\242\345\215\225.cr"
+++ "b/end/example/\350\256\242\345\215\225.cr"
@@ -1,56 +1,124 @@
-SELECT [订单明细].[订单ID], [订单明细].[产品ID], [产品].[产品名称], [订单明细].[单价], [订单明细].[数量], [订单明细].[折扣], ([订单明细].[单价]*[数量]*(1-[折扣])/100)*100 AS 总价
-FROM 产品 INNER JOIN 订单明细 ON [产品].[产品ID]=[订单明细].[产品ID]
-where 1=1
-$if(false==isEmpty(param.dindan)){$
- and [订单明细].[订单ID]='$dindan$'
-$}$
-
-$if(false==isEmpty(param.chanping)){$
-and [订单明细].[产品ID]='$chanping$'
-$}$
-ORDER BY [订单明细].[订单ID]|
|
|
|
| | | | | | | | | | | | | | test:/4.cr[
- {
- "x": 0,
- "y": 0,
- "w": 24,
- "h": 15,
- "i": 0,
- "element": {
- "type": "layout_div",
- "label": "div布局",
- "span": 24,
- "icon": "icon-group",
- "display": true,
- "style": {
- "height": "100%"
- },
- "component": "widget-form-group",
- "prop": "_random_",
- "children": {
- "column": [
- {
- "type": "luckySheetProxy",
- "label": "main",
- "display": true,
- "style": {
- "height": "100%"
- },
- "no_use_parent_css": false,
- "fit": true,
- "page_size": 20,
- "page_sizes": "[20, 50, 100, 200]",
- "gridName": "main",
- "span": 24,
- "component": "luckySheetProxy",
- "prop": "1638165806230_44736",
- "fresh_ds": [],
- "fresh_params": [],
- "conditionformat_save": "[]",
- "alternateformat_save": "[]"
- }
- ]
- }
- },
- "moved": false
- }
-]Dsn=testDbtestsqlite1main1106微软雅黑11blackgray 1px dotted
\ No newline at end of file
+
+
+SELECT [订单明细].[订单ID], [订单明细].[产品ID], [产品].[产品名称], [订单明细].[单价], [订单明细].[数量], [订单明细].[折扣], ([订单明细].[单价]*[数量]*(1-[折扣])/100)*100 AS 总价
FROM 产品 INNER JOIN 订单明细 ON [产品].[产品ID]=[订单明细].[产品ID]
where 1=1
$if(false==isEmpty(param.dindan)){$
and [订单明细].[订单ID]='$dindan$'
$}$
$if(false==isEmpty(param.chanping)){$
and [订单明细].[产品ID]='$chanping$'
$}$
ORDER BY [订单明细].[订单ID]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+
+0
+{"pageSize_name":"A4","pageSize_Width":595,"pageSize_Height":842,"orientation":"portrait","fitToPage":true,"scale":100,"fitToWidth":1,"fitToHeight":1222,"margin_top":36,"margin_bottom":36,"margin_left":36,"margin_right":36,"page_header":10,"page_footer":10,"horizontalCentered":false,"verticalCentered":false,"page_header_left":"","page_header_center":"","page_header_right":"","page_footer_left":"","page_footer_center":"","page_footer_right":"","print_template_background":"","header_left":"第&[页码]页 共&[总页数]页&[日期] &[人员]"}
+
+
+example:/订单.cr
+
+#ffffff
+#000000
+微软雅黑
+11
+div
+
+true
+20
+24
+10
+100%
+10
+
+0
+1920
+1080
+
+#83bff6
+#00CED1
+
+
+[
{
"x": 0,
"y": 0,
"w": 24,
"h": 15,
"i": 0,
"element": {
"type": "layout_div",
"label": "div布局",
"span": 24,
"icon": "icon-group",
"display": true,
"style": {
"height": "100%"
},
"component": "widget-form-group",
"prop": "_random_",
"children": {
"column": [
{
"type": "luckySheetProxy",
"label": "main",
"display": true,
"style": {
"height": "100%"
},
"no_use_parent_css": false,
"fit": true,
"page_size": 20,
"page_sizes": "[20, 50, 100, 200]",
"gridName": "main",
"span": 24,
"component": "luckySheetProxy",
"prop": "1638165806230_44736",
"fresh_ds": [],
"fresh_params": [],
"conditionformat_save": "[]",
"alternateformat_save": "[]",
"icon": "img/m_pm.png",
"paperSetting": "{\"pageSize_name\":\"A4\",\"pageSize_Width\":595,\"pageSize_Height\":842,\"orientation\":\"portrait\",\"fitToPage\":true,\"scale\":100,\"fitToWidth\":1,\"fitToHeight\":1222,\"margin_top\":36,\"margin_bottom\":36,\"margin_left\":36,\"margin_right\":36,\"page_header\":10,\"page_footer\":10,\"horizontalCentered\":false,\"verticalCentered\":false,\"page_header_left\":\"\",\"page_header_center\":\"\",\"page_header_right\":\"\",\"page_footer_left\":\"\",\"page_footer_center\":\"\",\"page_footer_right\":\"\",\"print_template_background\":\"\",\"header_left\":\"第&[页码]页 共&[总页数]页&[日期] &[人员]\"}"
}
]
}
},
"moved": false,
"show": true,
"bg": {
"backgroundImage": "",
"BACKGROUND-COLOR": "",
"border_box": "div",
"border_option": {
"color": [
"#83bff6",
"#00CED1"
]
}
}
}
]
+
+
+Dsn=testDb
+
+
+
+
+
+
+0
+1920
+1080
+
+#83bff6
+#00CED1
+
+
+_zb_var_.人员='人员xxxx';
+
+
+testsqlite
+
+1
+main
+1
+1
+0
+6
+
+
+
+
+
+
+#ffffff
+#000000
+微软雅黑
+11
+div
+
+true
+20
+24
+10
+100%
+10
+
+0
+1920
+1080
+
+[]
+
\ No newline at end of file
diff --git a/end/reportWeb/Controllers/PdfController.cs b/end/reportWeb/Controllers/PdfController.cs
index f8e5073..487f427 100644
--- a/end/reportWeb/Controllers/PdfController.cs
+++ b/end/reportWeb/Controllers/PdfController.cs
@@ -22,6 +22,7 @@
using iText.Kernel.Pdf.Canvas;
using iText.Layout.Layout;
using iText.Kernel.Pdf.Xobject;
+using System.Text.RegularExpressions;
namespace reportWeb.Controllers
{
@@ -92,8 +93,7 @@ public byte[] buildPdf(string report_str, PageSetup ps)
var rg = new ReportGridJSON(item.Value, ps);
rg.output(pdf_doc,ref is_first, addTable);
}
- json_root.GetProperty("_zb_var_").TryGetProperty("watermark", out var watermark);
- add_header_footer(ps, pdfDocument, pdf_doc, watermark);
+ add_header_footer(ps, pdfDocument, pdf_doc,json_root.GetProperty("_zb_var_"));
//*/
pdf_doc.Flush();
@@ -121,21 +121,28 @@ private static Paragraph convert_html_to_paragraph(string html)
}
return retpp;
}
- private static Paragraph replace_var_to_Paragraph(string str, int page_no, int page_all)
+ private static Regex r = new(@"&\[(.*?)\]"); //[^\\]#.*#
+ private static Paragraph replace_var_to_Paragraph(string str,Dictionary mark_dict=null)
{//&[页码]&[总页数]&[日期]&[时间]
- var t = str.Replace("&[页码]", page_no.ToString())
- .Replace("&[总页数]", page_all.ToString())
- .Replace("&[日期]", DateTime.Today.ToString("yyyy-MM-dd"))
- .Replace("&[时间]", DateTime.Today.ToString("hh:ss:mm"))
- ;
- return convert_html_to_paragraph(t);
+ MatchCollection mc = r.Matches(str);//替换#xxx#为 ?,同时记录位置
+ foreach (Match a in mc)
+ {
+ str = str.Replace( a.Value ,mark_dict.GetValueOrDefault(a.Groups[1].Value).ToString());
+ }
+
+ return convert_html_to_paragraph(str);
}
- private void add_header_footer(PageSetup ps, PdfDocument pdf, Document pdf_doc,JsonElement watermark)
+ private void add_header_footer(PageSetup ps, PdfDocument pdf, Document pdf_doc,JsonElement zb_var)
{
+ zb_var.TryGetProperty("watermark", out var watermark);
+
+
var pp = new Paragraph();
int n = pdf.GetNumberOfPages();
Dictionary mark_dict = new Dictionary()
{
+ {"日期", DateTime.Now.ToString("yyyy-MM-dd")},
+ {"时间", DateTime.Now.ToString("hh:ss:mm")},
{"watermark_txt", ""},
{"watermark_x", 20}, //水印起始位置x轴坐标
{"watermark_y", 20}, //水印起始位置Y轴坐标
@@ -151,6 +158,10 @@ private void add_header_footer(PageSetup ps, PdfDocument pdf, Document pdf_doc,
{"watermark_height", 40}, //水印长度
{"watermark_angle", 20 }//水印倾斜度数
};
+ foreach (var item in zb_var.EnumerateObject())
+ {
+ mark_dict[item.Name] = item.Value.GetString();
+ }
if (watermark.ValueKind == JsonValueKind.Object)
{
foreach(var one in watermark.EnumerateObject())
@@ -187,8 +198,11 @@ private void add_header_footer(PageSetup ps, PdfDocument pdf, Document pdf_doc,
var water_mark = new Paragraph(watermark_txt)
.SetFontColor(watermark_color)//.SetFontFamily(watermark_font)
.SetFontSize(watermark_fontsize).SetOpacity(watermark_alpha);
+
+ mark_dict["总页数"] = n;
for (int page_idx = 1; page_idx <= n; page_idx++)
{
+ mark_dict["页码"] = page_idx;
for (float x = watermark_x; x < ps.pageSize_Width; x += watermark_x_space)
{
for (float y = watermark_y; y < ps.pageSize_Height; y += watermark_y_space)
@@ -199,42 +213,42 @@ private void add_header_footer(PageSetup ps, PdfDocument pdf, Document pdf_doc,
if (!String.IsNullOrEmpty(ps.footer_left))
{
- pp = replace_var_to_Paragraph(ps.footer_left, page_idx, n);
+ pp = replace_var_to_Paragraph(ps.footer_left, mark_dict);
pdf_doc.ShowTextAligned(pp, ps.margin_footer, ps.margin_footer, page_idx, TextAlignment.LEFT,
VerticalAlignment.BOTTOM, 0);//footer left BOTTOM
}
if (!String.IsNullOrEmpty(ps.footer_right))
{
- pp = replace_var_to_Paragraph(ps.footer_right, page_idx, n);
+ pp = replace_var_to_Paragraph(ps.footer_right, mark_dict);
pdf_doc.ShowTextAligned(pp,
ps.pageSize_Width - ps.margin_footer, ps.margin_footer, page_idx, TextAlignment.RIGHT,
VerticalAlignment.BOTTOM, 0);//footer RIGHT BOTTOM
}
if (!String.IsNullOrEmpty(ps.header_left))
{
- pp = replace_var_to_Paragraph(ps.header_left, page_idx, n);
+ pp = replace_var_to_Paragraph(ps.header_left, mark_dict);
pdf_doc.ShowTextAligned(pp,
ps.margin_footer, ps.pageSize_Height - ps.margin_footer, page_idx, TextAlignment.LEFT,
VerticalAlignment.TOP, 0);//header left top
}
if (!String.IsNullOrEmpty(ps.header_right))
{
- pp = replace_var_to_Paragraph(ps.header_right, page_idx, n);
+ pp = replace_var_to_Paragraph(ps.header_right, mark_dict);
pdf_doc.ShowTextAligned(pp,
ps.pageSize_Width - ps.margin_footer, ps.pageSize_Height - ps.margin_footer, page_idx, TextAlignment.RIGHT,
VerticalAlignment.TOP, 0);//header right TOP
}
if (!String.IsNullOrEmpty(ps.header_center))
{
- pp = replace_var_to_Paragraph(ps.header_center, page_idx, n);
+ pp = replace_var_to_Paragraph(ps.header_center, mark_dict);
pdf_doc.ShowTextAligned(pp,
ps.pageSize_Width / 2, ps.pageSize_Height - ps.margin_footer, page_idx, TextAlignment.CENTER,
VerticalAlignment.TOP, 0); //header CENTER
}
if (!String.IsNullOrEmpty(ps.footer_center))
{
- pp = replace_var_to_Paragraph(ps.footer_center, page_idx, n);
+ pp = replace_var_to_Paragraph(ps.footer_center, mark_dict);
pdf_doc.ShowTextAligned(pp,
ps.pageSize_Width / 2, ps.margin_footer, page_idx, TextAlignment.CENTER,
VerticalAlignment.BOTTOM, 0);//footer CENTER
diff --git a/end/reportWeb/reportWeb.csproj b/end/reportWeb/reportWeb.csproj
index cf99483..b469c82 100644
--- a/end/reportWeb/reportWeb.csproj
+++ b/end/reportWeb/reportWeb.csproj
@@ -26,9 +26,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
@@ -61,9 +61,6 @@
-
- Never
-
Always