Browse Source

pdf选项修改

刘洋 2 năm trước cách đây
mục cha
commit
e04559de5d

+ 1 - 0
package.json

@@ -21,6 +21,7 @@
     "axios-retry": "^3.1.9",
     "core-js": "^3.6.5",
     "gm": "^1.23.1",
+    "gm-base64": "^1.1.1",
     "image-size": "^0.6.3",
     "jquery": "^3.3.1",
     "jspdf": "^2.5.1",

+ 3 - 1
src/features/ImageDownload/ImageDownload.vue

@@ -201,6 +201,7 @@ onMounted(async () => {
               // console.log(imageRes.data);
               // console.log(await imageRes.data.arrayBuffer());
               // console.log(new Uint8Array(await imageRes.data.arrayBuffer()));
+              let onlyUsePdf = config.pdf == "2";
               let fileLocation = await window.electron.addWatermark(
                 storePassedToNodeJs,
                 arrayBuffer,
@@ -212,7 +213,8 @@ onMounted(async () => {
                 config.trackMode,
                 config.x,
                 config.y,
-                colorMap
+                colorMap,
+                onlyUsePdf
               );
               resultImgList.push(fileLocation);
             } catch (error) {

+ 50 - 25
src/lib/watermark.ts

@@ -5,6 +5,11 @@ import mkdirp from "mkdirp";
 import { Store, Student } from "@/types";
 import gmType from "gm";
 
+const arrayBufferToBase64Img = (buffer: ArrayBuffer) => {
+  const str = String.fromCharCode(...new Uint8Array(buffer));
+  return `data:image/jpg;base64,${window.btoa(str)}`;
+};
+
 let gm = null as unknown as typeof gmType;
 
 export async function addWatermark(
@@ -18,14 +23,15 @@ export async function addWatermark(
   trackMode: string,
   x = 0.01,
   y = 0.03,
-  colorMap: any = {}
+  colorMap: any = {},
+  onlyUsePdf = false
 ): Promise<boolean | string> {
   const file = path.join(...filePath);
   if (
     index !== 1 &&
     (student.tags == undefined || student.tags[index] == undefined)
   ) {
-    return await saveImage(store, imageData, filePath);
+    return await saveImage(store, imageData, filePath, onlyUsePdf);
   }
 
   if (store.pageInputs["/image-download"].append && fs.existsSync(file)) {
@@ -48,6 +54,7 @@ export async function addWatermark(
           });
     // console.log(path.join(__dirname, "../../imagemagick/"));
     // console.log(path.join(__dirname, store.config.imagemagickDev));
+    require("gm-base64");
   }
   const fontFile = store.config.watermark.fontFile;
   const color = store.config.watermark.color;
@@ -258,25 +265,36 @@ export async function addWatermark(
   }
 
   return new Promise((resolve, reject) => {
-    mkdirp.sync(path.dirname(file));
-    imgData.write(file, (error) => {
-      if (error) {
-        // logger.error("add watermark error: " + file);
-        // logger.error(error);
-        reject(error);
-      } else {
-        // resolve(true);
-        resolve(file);
-      }
-    });
+    if (onlyUsePdf) {
+      imgData.toBase64("jpg", true, function (err: any, base64: any) {
+        if (err) {
+          reject(err);
+        } else {
+          resolve(base64);
+        }
+      });
+    } else {
+      mkdirp.sync(path.dirname(file));
+      imgData.write(file, (error) => {
+        if (error) {
+          // logger.error("add watermark error: " + file);
+          // logger.error(error);
+          reject(error);
+        } else {
+          // resolve(true);
+          resolve(file);
+        }
+      });
+    }
   });
 }
 
 export async function saveImage(
   store: Store,
   imageData: ArrayBuffer,
-  filePath: string[]
-): Promise<boolean> {
+  filePath: string[],
+  onlyUsePdf = false
+): Promise<any> {
   const file = path.join(...filePath);
   // console.log("saveImage file:", file);
   if (store.pageInputs["/image-download"].append && fs.existsSync(file)) {
@@ -285,16 +303,23 @@ export async function saveImage(
   }
 
   return new Promise((resolve, reject) => {
-    const image = Buffer.from(imageData);
-    mkdirp.sync(path.dirname(file));
-    fs.writeFile(file, image, (error) => {
-      if (error) {
-        reject(error);
-      } else {
-        // resolve(true);
-        resolve(file);
-      }
-    });
+    if (onlyUsePdf) {
+      // const buffer = Buffer.from(imageData, "base64");
+      // const base64Str = "data:image/jpeg;base64," + buffer.toString("base64");
+      const base64Str = arrayBufferToBase64Img(imageData);
+      resolve(base64Str);
+    } else {
+      const image = Buffer.from(imageData);
+      mkdirp.sync(path.dirname(file));
+      fs.writeFile(file, image, (error) => {
+        if (error) {
+          reject(error);
+        } else {
+          // resolve(true);
+          resolve(file);
+        }
+      });
+    }
   });
 }
 

+ 0 - 1
src/plugins/axiosApp.ts

@@ -1,7 +1,6 @@
 // import Vue from "vue";
 // import Store from "@/store";
 import axios from "axios";
-// @ts-ignore
 import { loadProgressBar } from "axios-progress-bar";
 import { notifyInvalidTokenThrottled } from "./axiosNotice";
 import axiosRetry from "axios-retry";

+ 5 - 0
src/types/axiosProgressBar.d.ts

@@ -0,0 +1,5 @@
+declare module "axios-progress-bar" {
+  export const loadProgressBar: any;
+  const axiosProgressBar: any;
+  export default axiosProgressBar;
+}

+ 5 - 0
yarn.lock

@@ -5485,6 +5485,11 @@ globby@^9.2.0:
     pify "^4.0.1"
     slash "^2.0.0"
 
+gm-base64@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.npmmirror.com/gm-base64/-/gm-base64-1.1.1.tgz#9321c07be569e2d9c6373acb83330524ce091bca"
+  integrity sha512-hFetCUrH+GQ4RAIVLpZnZt2CRXBWaQvL7gCXG4Up3K08Xo/MyhUoqL/Ps4KQrkQxCaDcjU1Ax8r4MNp5+swUGw==
+
 gm@^1.23.1:
   version "1.23.1"
   resolved "https://registry.npm.taobao.org/gm/download/gm-1.23.1.tgz"