优化结构 去掉JQ脚本 内置水印脚本

This commit is contained in:
高雄
2026-04-25 08:45:22 +08:00
parent 3abf864184
commit 4cf19d1dbe
3 changed files with 101 additions and 90 deletions

View File

@@ -1,69 +0,0 @@
function isNotEmpty(value) {
return value !== null && value !== undefined && value !== '' && value !== 'false' ;
}
function watermarkObj(watermarkContainer,watermarkTxt) {
try {
if (!isNotEmpty(watermarkTxt)) {
return ;
}
var watermarkSettings = {
watermark_txt: watermarkTxt,
watermark_start_x:80,//水印起始位置x轴坐标
watermark_start_y:80,//水印起始位置Y轴坐标
watermark_x_space:80,//水印x轴间隔
watermark_y_space:80,//水印y轴间隔
watermark_color:'black',//水印字体颜色
watermark_alpha:0.2,//水印透明度
watermark_fontsize:'18px',//水印字体大小
watermark_font:'微软雅黑',//水印字体
watermark_width:200,//水印宽度
watermark_height:80,//水印高度
watermark_angle:30//水印倾斜度数
};
// console.log(watermarkContainer);
var page_width = $(watermarkContainer).width() - watermarkSettings.watermark_width;
var page_height = $(watermarkContainer).height() - watermarkSettings.watermark_height;
page_width = (page_width < 250) ? 250 : page_width;
page_height = (page_height < 250) ? 250 : page_height;
var oTemp = document.createDocumentFragment();
for (var x = watermarkSettings.watermark_start_x; x < page_width; x+= watermarkSettings.watermark_x_space) {
for (var y = watermarkSettings.watermark_start_y; y < page_height; y+= watermarkSettings.watermark_y_space) {
var mask_div = document.createElement('div');
// mask_div.id = 'mask_div' + x + y;
mask_div.className = 'mask_div';
mask_div.appendChild(document.createTextNode(watermarkTxt));
// 设置水印div倾斜显示
mask_div.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity="+(watermarkSettings.watermark_alpha*100)+")";
mask_div.style.webkitTransform = "rotate(-" + watermarkSettings.watermark_angle + "deg)";
mask_div.style.MozTransform = "rotate(-" + watermarkSettings.watermark_angle + "deg)";
mask_div.style.msTransform = "rotate(-" + watermarkSettings.watermark_angle + "deg)";
mask_div.style.OTransform = "rotate(-" + watermarkSettings.watermark_angle + "deg)";
mask_div.style.transform = "rotate(-" + watermarkSettings.watermark_angle + "deg)";
mask_div.style.visibility = "";
mask_div.style.position = "absolute";
mask_div.style.left = x + 'px';
mask_div.style.top = y + 'px';
mask_div.style.overflow = "hidden";
mask_div.style.zIndex = "100";
mask_div.style.pointerEvents='none';//pointer-events:none 让水印不遮挡页面的点击事件
//mask_div.style.border="solid #eee 1px";
mask_div.style.opacity = watermarkSettings.watermark_alpha;
mask_div.style.fontSize = watermarkSettings.watermark_fontsize;
mask_div.style.fontFamily = watermarkSettings.watermark_font;
mask_div.style.color = watermarkSettings.watermark_color;
mask_div.style.textAlign = "center";
mask_div.style.width = watermarkSettings.watermark_width + 'px';
mask_div.style.height = watermarkSettings.watermark_height + 'px';
mask_div.style.display = "block";
oTemp.appendChild(mask_div);
}
}
$(watermarkContainer).append(oTemp);
} catch (e) {
console.log(e);
}
}

View File

@@ -1221,8 +1221,6 @@ See https://github.com/adobe-type-tools/cmap-resources
<!-- editorUndoBar --> <!-- editorUndoBar -->
</div> </div>
<!-- outerContainer --> <!-- outerContainer -->
<script type="text/javascript" src="../../js/jquery-3.6.1.min.js"></script>
<script type="text/javascript" src="../../js/pdfwatermark.js"></script>
<div id="printContainer"></div> <div id="printContainer"></div>
</body> </body>
</html> </html>

View File

@@ -9,6 +9,83 @@ if (kkpdfAutoFetch == "true") {
} else { } else {
kkpdfAutoFetch = false kkpdfAutoFetch = false
} }
function isNotEmpty(value) {
return value !== null && value !== undefined && value !== '' && value !== 'false' ;
}
/**
* 通用水印生成函数
* @param {HTMLElement} container - 水印容器(相对定位的父元素)
* @param {string} watermarkTxt - 水印文字
* @param {number} [explicitWidth] - 可选显式指定容器宽度px不传则自动获取
* @param {number} [explicitHeight] - 可选显式指定容器高度px不传则自动获取
*/
function addWatermark(container, watermarkTxt, explicitWidth = null, explicitHeight = null) {
if (!isNotEmpty(watermarkTxt)) return;
// 公共配置
const settings = {
start_x: 80,
start_y: 80,
x_space: 80,
y_space: 80,
color: 'black',
alpha: 0.2,
fontsize: '18px',
font: '微软雅黑',
width: 200,
height: 80,
angle: 30
};
// 确定实际使用的宽高
let pageWidth, pageHeight;
if (explicitWidth !== null && explicitHeight !== null) {
pageWidth = explicitWidth;
pageHeight = explicitHeight;
} else {
const rect = container.getBoundingClientRect();
pageWidth = rect.width;
pageHeight = rect.height;
}
let maxX = pageWidth - settings.width;
let maxY = pageHeight - settings.height;
maxX = Math.max(maxX, 250);
maxY = Math.max(maxY, 250);
const fragment = document.createDocumentFragment();
for (let x = settings.start_x; x < maxX; x += settings.x_space) {
for (let y = settings.start_y; y < maxY; y += settings.y_space) {
const div = document.createElement('div');
div.className = 'mask_div';
div.appendChild(document.createTextNode(watermarkTxt));
div.style.cssText = `
filter: progid:DXImageTransform.Microsoft.Alpha(opacity=${settings.alpha * 100});
transform: rotate(-${settings.angle}deg);
visibility: visible;
position: absolute;
left: ${x}px;
top: ${y}px;
overflow: hidden;
z-index: 100;
pointer-events: none;
opacity: ${settings.alpha};
font-size: ${settings.fontsize};
font-family: ${settings.font};
color: ${settings.color};
text-align: center;
width: ${settings.width}px;
height: ${settings.height}px;
display: block;
`;
fragment.appendChild(div);
}
}
container.appendChild(fragment);
}
/******/ var __webpack_modules__ = ({ /******/ var __webpack_modules__ = ({
/***/ 34: /***/ 34:
@@ -13877,32 +13954,37 @@ class PDFPrintService {
useRenderedPage() { useRenderedPage() {
this.throwIfInactive(); this.throwIfInactive();
const img = document.createElement("img"); const img = document.createElement("img");
this.scratchCanvas.toBlob(blob => {
img.src = URL.createObjectURL(blob);
});
const wrapper = document.createElement("div"); const wrapper = document.createElement("div");
wrapper.className = "printedPage"; wrapper.className = "printedPage";
wrapper.style.position = "relative";
// 获取当前页面的尺寸单位1pt=1/72英寸
const pageSizePt = this.pagesOverview[0];
// 转换为 CSS 像素1pt = 96/72 px
const pageWidthPx = pageSizePt.width * 96 / 72;
const pageHeightPx = pageSizePt.height * 96 / 72;
// 设置 wrapper 尺寸CSS 像素)
wrapper.style.width = `${pageWidthPx}px`;
wrapper.style.height = `${pageHeightPx}px`;
wrapper.style.backgroundColor = "white";
this.scratchCanvas.toBlob(blob => {
img.src = URL.createObjectURL(blob);
});
wrapper.append(img); wrapper.append(img);
// 关键:定义 pageSize 和 pageCount
const pageSize = this.pagesOverview[0];
const pageCount = this.pagesOverview.length;
var printWatermarkDiv = document.createElement('div');
printWatermarkDiv.style.position = 'absolute';
printWatermarkDiv.style.left = '0px';
printWatermarkDiv.style.top = '0px';
printWatermarkDiv.style.width = '1024px';
printWatermarkDiv.style.height = pageSize.height * pageCount + "px";
watermarkObj(printWatermarkDiv, watermarkTxt);
wrapper.appendChild(printWatermarkDiv);
this.printContainer.append(wrapper); this.printContainer.append(wrapper);
const { promise, resolve, reject } = Promise.withResolvers(); const { promise, resolve, reject } = Promise.withResolvers();
img.onload = resolve; img.onload = () => {
// 使用专用函数生成水印,直接传入页面像素尺寸
addWatermark(wrapper, watermarkTxt, pageWidthPx, pageHeightPx);
resolve();
};
img.onerror = reject; img.onerror = reject;
promise.catch(() => {}).then(() => { promise.catch(() => {}).then(() => {
URL.revokeObjectURL(img.src); URL.revokeObjectURL(img.src);
}); });
return promise; return promise;
} }
@@ -17613,7 +17695,7 @@ class PDFPageView extends BasePDFPageView {
} }
}); });
} }
watermarkObj(div,watermarkTxt); addWatermark(div,watermarkTxt);
if (!this.annotationLayer && this.#annotationMode !== AnnotationMode.DISABLE) { if (!this.annotationLayer && this.#annotationMode !== AnnotationMode.DISABLE) {
const { const {
annotationStorage, annotationStorage,