用html+javascript打造公文一键排版系统1:设计界面

news2024/9/28 1:05:56

近日,有同事抱怨收到的文件没有按公文要求进行排版,不得不自已动手帮他们擦PP排版,感慨每天都在做这些无意义的事情,浪费生命!

于是打算用用html+javascript打造公文一键排版系统。

首先是设置界面,主要包括四个部分:


一、实时编辑区。

用<iframe>做一个所见即所得文本编辑框。

二、功能按钮。

暂时提供五个按钮,分别提供“清除格式”、“一键排版”、“显示源码”、设置字体“加粗/正常”和“斜体/正常”功能。

三、公文参数设置区。

公文要求一般是:

1.公文标题:一般用2号小标宋体字。

2.正文:一般用3号仿宋体字,编排于主送机关名称下一行,每个自然段左空二字,回行顶格。
正文中的标题分为四级,文中结构层次序数依次可以用“一、”“(一)”“1.”“(1)”标注;一般第一层用黑体字、第二层用楷体字加粗、第三层和第四层用仿宋体字标注。

3.行间距:一般是28磅。

因此,对于公文标题,提供字体选择框(ListBox, 默认值“方正小标宋简体”)、字号选择框(ListBox,默认值二号)、对齐方式选择框(ListBox,默认值居中对齐)。

对于一级标题,提供字体选择框(ListBox,默认值“黑体”)、字号(ListBox,默认值dg 号)。

对于二级标题,提供字体选择框(ListBox,默认值“楷体_GB2312”)、字号(ListBox,默认值三 号),加粗钩选框(checkbox,默认钩选)。

对于三级标题,提供加粗钩选框(checkbox,默认钩选)。

对于正文,提供了两个选项:行间距文本框(textbox,默认值28)、段落首行行首空格数文本框:(textbox,默认值2)。

四、调试信息区。

用<textarea>显示调试信息。

具体如下:

 相应代码:

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>公文一键排版</title>
<meta name="author" content="purpleendurer" >
<meta name="description" content="公文一键排版">
<script type="text/javascript">
const aFontName = [
	"方正小标宋简体",//0
	"黑体",//1
	"微软雅黑",//2
	"仿宋_GB2312",//3
	"仿宋",//4
	"楷体_GB2312",//5
	"楷体",//6
	"宋体",//7
	"Arial",//8
	"Wingdings 2"//9
];

//sId:select control id, iDefSel:default selected
function showFontNameSel(sId, iDefSel)
{
	document.write('<select id="', sId, '" width="50">');
	for (var i = 0; i < aFontName.length; i++)
	{
		document.write('<option value="', aFontName[i], '"');
		document.write(i==iDefSel ? ' selected>' : '>');
		document.write(aFontName[i],'</option>');
	}
	document.write('</select>');
}
const aFontSize = [
	['初号', 42],//0
	['小初', 36],//1
	['一号', 26],//2
	['小一', 24],//3
	['二号', 22],//4
	['小二', 18],//5
	['三号', 16],//6
	['小三', 15],//7
	['四号', 14],//8
	['小四', 12],//9
	['五号', 10.5], //10
	['小五', 9],//11
	['六号', 7.5],//12
	['小六', 6.5],//13
	['七号', 5.5],//14
	['八号', 5]//15
];


//sId:select control id, iDefSel:default selected
function showFontSizeSel(sId, iDefSel)
{
	document.write('<select id="', sId, '">');
	for (var i = 0; i < aFontSize.length; i++)
	{
		document.write('<option value="',aFontSize[i][1], '"');
		document.write(i==iDefSel ? ' selected>' : '>');
		document.write(aFontSize[i][0],'</option>');
	}
	document.write('</select>');
}


const aAlign = [
	["左对齐","left"],//0
	["居中对齐","center"],//1
	["右对齐","right"],//2
	["两端分散对齐","justify"]//3
];


//sId:select control id, iDefSel:default selected
function showAlignSel(sId, iDefSel)
{
	document.write('<select id="', sId, '">');
	for (var i = 0; i < aAlign.length; i++)
	{
		document.write('<option value="',aAlign[i][1], '"');
		document.write(i==iDefSel ? ' selected>' : '>');
		document.write(aAlign[i][0],'</option>');
	}
	document.write('</select>');
}
</script>
</head>
<body>
<fieldset  style="width: 1100px;">
 <legend>实时编辑区</legend>
<!--
<iframe id="editor" width="600px" height="200px" style="border: solid 1px;" src="http://nyncj.hechi.gov.cn"></iframe>
//-->
<iframe id="editor" width="1200px" height="400px" style="border: solid 1px;"></iframe>
</fieldset>
<p>
	<input type="button" id="btnclearDocFmt" value="清除格式" onclick="clearDocFmt()" />
	<input type="button" id="btnsetDocFmt" value="一键排版" onclick="setDocFmt()" />
	<input type="button" id="btnShowSrc" value="显示源码" onclick="showSrc()" style="background:yellow; border-radius: 25px;" />
	<input type="button" id="btnB" value="B" title="加粗/正常"  style="font-weight:bolder" onclick="execCmd('bold',false,null)" />
	<input type="button" id="btnItalic" value="I" title="斜体/正常"  style="font-weight:bolder;font-style:italic" onclick="execCmd('italic',false,null)" />
</p>
<fieldset style="width: 1200px;">
  <legend>参数设置</legend>
	<p>文件标题:
	<script>
		showFontNameSel("selDocTitleFontName", 0);
		document.write(' ');
		showFontSizeSel("selDocTitleFontSize", 4);
		document.write(' ');
		showAlignSel("selDocTitleAlign", 1);
	</script>
	<p>一级标题:
	<script>
		showFontNameSel("selPrimaryTitleFontName", 1);
		document.write(' ');
		showFontSizeSel("selPrimaryTitleFontSize", 6);
	</script>
	</p>
 	<p>二级标题:
	<script>
		showFontNameSel("selSecondaryTitleFontName", 5);
		document.write(' ');
		showFontSizeSel("selSecondaryTitleFontSize", 6);
	</script>
		<input type="checkbox" checked id="cbSecondaryTitleString">粗体
	</p>
 	<p>三级标题:
		<input type="checkbox" checked id="cbThirdTitleString">粗体
	</p>
 	<p>行距(行间距):<input type="text" id="tbRowSp" value="28" size="2"><!--  row spacing//-->  段落首行行首空格数:<input type="text" id="tbLeadSpNum" value="2" size="2">
	</P>
 </fieldset>
<p>调试信息</p>
<textarea id="taDbg" style="width: 1225px; height: 200px">调试信息</textarea>
<script type="text/javascript">
const edRich = document.getElementById("editor");
const taDbg = document.getElementById("taDbg");
const btnShowSrc =  document.getElementById("btnShowSrc");
//一级标题字号 font name
var pt1fn = document.getElementById('selPrimaryTitleFontName').value;
//一级标题字号 font size
var pt1fs =  document.getElementById('selPrimaryTitleFontSize').value;
//alert(fs);
//行距 row spacing
 var rs  =  document.getElementById('tbRowSp').value;
//首行行首空格数
 var sn  =  document.getElementById('tbLeadSpNum').value;
// (iframe.contentDocument||iframe.contentWindow.document).body.innerHTML
var edRichDoc;
var edRichBody;
if (typeof(edRich) !="undefined")
 {
	edRichDoc = edRich.contentWindow.document;
	edRichDoc.designMode = "on";
	edRichDoc.contentEditable = true;
	edRichBody = 	edRichDoc.body;
	edRichBody.innerHTML = '<a href="http://blog.csdn.net/purpleendurer">http://blog.csdn.net/purpleendurer</a>';
}
else
{
	window.alert("undefined");
}
</script>
</body>
</html>


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/737790.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

优化成本,探索WhatsApp API发送更经济的OTP验证信息

在现代的数字化世界中&#xff0c;安全性和使用者验证变得至关重要。随着移动应用程序和在线服务的普及&#xff0c;一次性密码&#xff08;OTP&#xff09;验证已经成为确保使用者身份验证的主要手段之一。然而&#xff0c;对于许多企业来说&#xff0c;发送OTP验证信息可能会…

fileinclude

看题目提示&#xff0c;应该是一道文件包含的题目&#xff0c;打开环境后直接告诉我flag在flag.php里 但是因为不知道绝对路径&#xff0c;不能直接利用file读取 查看源码后&#xff0c;发现里面嵌入了一段php代码 代码审计 首先&#xff0c;通过if( !ini_get(display_errors) …

springboot中banner.txt文件说明

springboot中banner.txt文件说明 通常在启动springboot项目的时候&#xff0c;&#xff0c;控制台会打印一些东西 比如&#xff1a; 如何自定义控制台输出的图形化符号 只需要在项目resources目录下创建一个banner.txt文件即可&#xff0c;因为启动的时候系统会自己检查该…

7.10作业

闹钟 mainWindow.ccp TCP服务器 #include "mainwindow.h" #include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this);server new QTcpServer(this);}MainWindow::~MainWi…

PDF文件转换成CAD图纸怎么做?简单好用的转换方法分享

CAD文件可以进行更加复杂的编辑&#xff0c;例如添加图层、修改线条颜色和粗细等&#xff0c;而PDF文件则只能进行简单的编辑操作。CAD软件中还可以添加文字注释、标注、尺寸和符号&#xff0c;这些功能大大提高了设计的灵活性和精度。下面给大家分享几种能够将PDF文件转换成CA…

交流充电桩通信方式和模块设计介绍

交流充电桩是新能源汽车充电系统的主要设备之一&#xff0c;可分为即插即用、刷卡取电和联网对接云端三种。即插即用&#xff0c;用户直接将充电枪连接到车辆上&#xff0c;就可以开始充电&#xff1b;刷卡取电&#xff0c;用户可以使用刷卡等方式取得充电权限&#xff0c;并根…

打印机一直重复打印不停止

打印一张纸&#xff0c;打印机一直重复打印不停止这个问题其实很简单&#xff0c;一般情况下是因为双向打印不兼容的问题&#xff1b; 选中打印机&#xff0c;点击右键&#xff0c;在弹出的菜单中选择“打印机属性” 在弹出的窗口中点“端口”&#xff0c;将“启用双向支持”前…

实现流程编排设计器的心路历程

接上回《「AntV」使用AntV X6实现流程编排设计器》一文说到&#xff0c;流程编排设计器的实现方案是将低代码引擎和AntV X6作为画布相结合。 为什么会有这样的想法&#xff1f; 可行性 起因是业务中有用到低代码引擎的场景&#xff0c;它的交互形式、页面结构正好符合流程编…

超级实用~低生物量的样本如何进行污染控制

上次小编主要介绍了低生物量比如口腔、阴道等样本的常见微生物和污染物&#xff0c;但是测序技术的高灵敏度也放大了样本中DNA污染的影响&#xff0c;那么对于低生物量的样本如何进行污染控制就至关重要了~ 2019年在《Contamination in Low Microbial Biomass Microbiome Studi…

vue + el-table点击表头改变其当前样式

废话不多说&#xff0c;先看效果&#xff1a; 网上找了一大圈没有符合的&#xff0c;只能自己看着搞&#xff1a; 直接贴代码&#xff1a; <el-tableref"table":data"tableData"borderstripesort-change"changeColumn"><el-table-colu…

vue语法详解

以下页面就是用vue开发的 模板语法 注意 模板语法不能在标签属性中用 文本插值 {{ msg }} 使用JavaScript表达式 {{ number 1 }} {{ ok ? YES : NO }} {{ message.split().reverse().join() }} 使用HTML 双大括号将会将数据插值为纯文本&#xff0c;而不是HTML&…

Apikit 自学日记:测试数据集

测试数据集 添加数据集的变量 在测试用例详情页面中&#xff0c;您可以点击上方的 测试数据 标签&#xff0c;进入用例的数据管理页面。在这里您可以添加多组测试数据&#xff0c;以及每组测试数据的变量。 在添加数据集前&#xff0c;我们需要设置数据集中存在什么变量。可以…

Qt:记录一下好看的配色

qss代码 窗体背景色 background-color: #ED6927; border-top-left-radius:35px;border-top-right-radius:35px;border-bottom-right-radius:0px; border-bottom-left-radius:0px;background-color: #203A32; border-radius:35px; border-top-left-radius:0px;border-top-righ…

如何用一部手机进行人体全身三维扫描

人体建模的应用真的是涵盖到了我们生活中的方方面面&#xff0c;真人潮玩、服饰定制、医疗康复、3D数字人等等领域&#xff0c;都离不开人体建模。 提到给人体建模&#xff0c;大家脑海里第一个浮现的画面&#xff0c;大多会是坐在电脑屏幕前&#xff0c;打开某个熟悉的建模的…

从本地目录和S3目录生成Classpath字符串的最佳实践

从一个目录生成Classpath字符串是一个非常常见的问题&#xff0c;在使用命令提交一个Java、Spark作业时会经常遇到。通常遇到的遇到情况是&#xff1a;将本地目录下的Jar文件拼接成一个Classpath字符串&#xff0c;这时&#xff0c;通常我们可以使用这样的命令&#xff1a; sp…

《八角笼中》电影我表达不出的好

昨天看完王宝强主演的《八角笼中》内心久久不能平静&#xff0c;里面有很多触动我的点&#xff0c;如果是写作高手&#xff0c;一定能从这部影片中捕捉到很多可写的话题。其实我也有&#xff0c;只是一直在思索要如何定主题&#xff0c;把内心深处那些想法表达出来&#xff0c;…

【HDC.Cloud 2023】华为云区块链分论坛内容值得再读!

Web3是全新的互联网世界&#xff0c;它不仅仅是一个技术革新&#xff0c;更是一种新的生态系统。在这个新的生态系统中&#xff0c;区块链技术、去中心化应用、智能合约等技术被广泛应用&#xff0c;为人们带来了更加安全、透明、去中心化的互联网体验。 然而&#xff0c;Web3的…

底层的出路,就在突破多重“八角笼”

底层的出路&#xff0c;就是突破“八角笼” “八角笼”隐喻是&#xff1a;出生地域&#xff0c;出生家庭&#xff0c;教育机会限制&#xff0c;权力网络&#xff0c;知识和技能的限制&#xff0c;资源的网络&#xff0c;机会…… 趣讲大白话&#xff1a;突破困局&#xff0c;精…

VoxPose:零样本训练机器人听你的话

VoxPoser是一种从大型语言模型&#xff08;LLMs&#xff09;中提取机器人操纵的可供性和约束的方法&#xff0c;它不需要额外的训练&#xff0c;并且可以泛化到开放集的指令。 地址&#xff1a;VoxPoser 它利用LLMs的编码能力&#xff0c;与视觉语言模型&#xff08;VLMs&…

快使用双截棍 | 低码之连接器 元服务开发的奇门武器

AppGallery Connect&#xff08;以下简称AGC&#xff09;低代码服务是一个基于Serverless的低代码开发平台&#xff0c;可通过拖拽式开发&#xff0c;可视化配置构建元服务。打通HarmonyOS云侧与端侧能力&#xff0c;轻松实现HMS Core和AGC Serverless能力的调用&#xff0c;宛…