DOC转PDF

liberoffice

libreoffice --convert-to pdf:writer_pdf_Export --outdir <保存的目录> a.docx

会生成一个a.pdf在设置的保存下的目录下。

pdftk 安装
pdftk file1.pdf file2.pdf file3.pdf cat output merged.pdf

file1.pdf file2.pdf file3.pdf 全部合并成一个 merged.pdf 文件


pdftk 的PDF处理

pdftk 是一个功能强大的命令行工具,用于处理 PDF 文件。以下是一些常用的 pdftk 命令参数:

  1. 合并 PDF 文件:bashpdftk file1.pdf file2.pdf cat output merged.pdf这将把 file1.pdffile2.pdf 合并成一个名为 merged.pdf 的新文件。
  2. 拆分 PDF 文件:bashpdftk input.pdf burst output output%03d.pdf这将把 input.pdf 拆分成多个名为 output001.pdfoutput002.pdf 等的文件。
  3. 旋转 PDF 页面:bashpdftk input.pdf cat 1-2east 3-end output output.pdf这将把 input.pdf 的第1和第2页顺时针旋转90度,其他页面保持不变。
  4. 加密 PDF 文件:bashpdftk input.pdf output output.pdf owner_pw password这将对 input.pdf 进行加密,设置所有者密码为 password
  5. 解密 PDF 文件:bashpdftk secured.pdf input_pw password output unsecured.pdf这将移除 secured.pdf 的所有者密码,生成一个无需密码即可打开的 unsecured.pdf
  6. 添加水印到 PDF 文件:bashpdftk input.pdf background watermark.pdf output output.pdf这将把 watermark.pdf 作为水印添加到 input.pdf 中。
  7. 压缩 PDF 文件:bashpdftk input.pdf output output.pdf compress这将压缩 input.pdf 以减小文件大小。
  8. 修复损坏的 PDF 文件:bashpdftk input.pdf output output.pdf repair这将尝试修复损坏的 input.pdf 文件。
  9. 提取 PDF 文件的特定页面:bashpdftk input.pdf cat 1-3 5-10 output selected_pages.pdf这将从 input.pdf 中提取第1到第3页和第5到第10页,生成一个名为 selected_pages.pdf 的新文件。
  10. 删除 PDF 文件中的特定页面:bashpdftk input.pdf cat 1-2 4-end output output.pdf这将从 input.pdf 中删除第3页,生成一个名为 output.pdf 的新文件。

这些是 pdftk 的一些基本命令参数,可以帮助你执行日常的 PDF 文件操作。更多高级功能和详细用法,可以参考 pdftk 的官方文档或使用 pdftk --help 命令查看帮助信息。

NGINX 反向代理

server {
    listen 80;
    server_name b.example.com;

    location / {
        # 代理到A网站,确保使用http://来指定协议
        proxy_pass http://a.example.com/;
        
        # 传递客户端的HTTP_REFERER头部
        proxy_set_header Referer $http_referer;
        
        # 传递客户端的真实IP地址
        proxy_set_header X-Real-IP $remote_addr;
        
        # 传递X-Forwarded-For头部,包含原始客户端IP地址
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        
        # 传递Cookie头部,确保Session信息能够传递
        proxy_set_header Cookie $http_cookie;
        
        # 如果A网站使用HTTPS,你可能还需要配置SSL证书
        # ssl_certificate /path/to/cert.pem;
        # ssl_certificate_key /path/to/key.pem;
    }
}

上面保留 了HTTP_REFERER头部,IP,cookie

并使用HTTPS配置

保证了原网站的鉴权的存在的情况下实现反向代理。

 proxy_cache_path /data/cache/nginx levels=1:2 keys_zone=cache:10m max_size=10g inactive=60m use_temp_path=off;
#上面的在server外面

#下面的在server中
 # 启用缓存

            proxy_cache cache;

            # 设置缓存的有效时间
            proxy_cache_valid 200 302 10m;
            proxy_cache_valid 404 1m;

以上

JS 中 数组转CSV保存

function downloadArrayAsCSV(array, filename) {
  // 检查输入是否为数组
  if (!Array.isArray(array)) {
    console.error('The provided data is not an array.');
    return;
  }

  // 如果数组为空,返回错误
  if (array.length === 0) {
    console.error('The array is empty.');
    return;
  }

  let headers = Object.keys(array[0]).map(header => `"${header}"`).join(',');

  const csv = [headers].concat(
    array.map(row => {
      return Object.values(row)
        .map(text => {
          // 替换字段中的双引号,并包裹在双引号中
          if (text instanceof Date) {
            return `"${text.toLocaleString()}"`;
          }
          if (typeof text === 'string') {
            return `"${text.replace(/"/g, '""')}"`;
          }
          return text;
        }).join(',');
    })
  ).join('\n');

  // 创建Blob对象
  const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });

  // 创建下载链接
  const link = document.createElement('a');
  link.href = URL.createObjectURL(blob);
  link.download = filename || 'data.csv';
  document.body.appendChild(link); // 将链接添加到页面中

  // 触发下载
  link.click();

  // 清理
  document.body.removeChild(link); // 移除链接
  URL.revokeObjectURL(link.href); // 释放URL
}

// 示例数组
const dataArray = [
  { name: 'Kimi', age: 30, city: 'Shanghai' },
  { name: 'Alice', age: 24, city: 'Beijing' }
];

// 调用函数
downloadArrayAsCSV(dataArray, 'myData.csv');

输入数组 和csv文件名即可完成