引流技术-通过文件中增加联系方式并传播

news2024/11/24 17:17:46

文章目录

    • 前言
    • 文档增加联系方式
    • 扩散
      • 网盘扩散
      • 自建网站
      • 借力
    • 注意

前言

很多人在找资料的时候可能都遇到过下图情况:
1、文档最后面留一个自己的联系方式;
2、找的一堆文件中都有相同的情况;
3、一段时间全网搜到的很多相同文件也有这个联系方式。

那么这个怎么做的?今天我们来亲自试验一下。

file

文档增加联系方式

我们看到的文档可能有PDF、word,首先我们来看看word当怎么处理,word一般会有两种后缀名:doc、docx,docx比较好处理,是基于XML的,而doc格式的文档是一个较老的、二进制格式的文件。所以我们需要把doc转换成docx文档后再批量添加图片。

还有一个问题就是我电脑是MAC,一般我们会用到win32com来处理doc文档转换,但是mac不支持,所以我们要用到另外一个工具LibreOffice
需要下载安装后配置环境变量。

下载官网:https://www.libreoffice.org/

安装后正常配置环境变量哦

下面我们来看看具体代码:

import os
import subprocess
from docx import Document
from docx.shared import Inches
from docx.enum.text import WD_ALIGN_PARAGRAPH

def convert_doc_to_docx(doc_path):
    """使用LibreOffice将DOC文件转换为DOCX文件"""
    docx_path = doc_path + 'x'
    subprocess.run(["/Applications/LibreOffice.app/Contents/MacOS/soffice", "--headless", "--convert-to", "docx", doc_path, "--outdir", os.path.dirname(doc_path)])
    return docx_path

def add_image_to_docx(docx_path, image_path):
    """在DOCX文档末尾添加居中的图片"""
    doc = Document(docx_path)
    p = doc.add_paragraph()
    run = p.add_run()
    run.add_picture(image_path, width=Inches(2.0))  # 图片大小可以根据需要调整
    paragraph_format = p.paragraph_format
    paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER
    doc.save(docx_path)

def convert_docx_to_pdf(docx_path):
    """使用LibreOffice将DOCX文件转换为PDF"""
    subprocess.run(["/Applications/LibreOffice.app/Contents/MacOS/soffice", "--headless", "--convert-to", "pdf", docx_path, "--outdir", os.path.dirname(docx_path)])

def process_folder(folder_path, image_path):
    """处理文件夹中的所有DOC和DOCX文件"""
    for filename in os.listdir(folder_path):
        file_path = os.path.join(folder_path, filename)
        if filename.endswith('.doc'):
            docx_path = convert_doc_to_docx(file_path)
            add_image_to_docx(docx_path, image_path)
            convert_docx_to_pdf(docx_path)
            os.remove(docx_path)  # 删除转换后的DOCX文件
            print(f"Processed {filename}")
        elif filename.endswith('.docx'):
            add_image_to_docx(file_path, image_path)
            convert_docx_to_pdf(file_path)
            print(f"Processed {filename}")

# 调用函数
folder_path = 'path/to/your/documents'  # 替换为你的文档所在的目录
image_path = 'path/to/your/image.jpg'   # 替换为你要添加的图片的路径
process_folder(folder_path, image_path)

接下来我们看一下PDF怎么处理,PDF比较特殊的就是加密的文件了,这种文件没办法直接写,需要创建新文件把内容copy进去后在最后面增加图片。
具体代码如下:

import os
import fitz  # PyMuPDF

def add_image_to_pdf_centered(pdf_path, image_path):
    """在PDF文档的最后添加一个新页面,并在其中居中插入一张图片"""
    # 打开原始PDF
    pdf_doc = fitz.open(pdf_path)

    # 获取PDF的尺寸以适配新页面
    if pdf_doc.page_count > 0:
        page = pdf_doc[0]
        page_width, page_height = page.rect.width, page.rect.height
    else:
        # 如果PDF为空,使用默认的A4尺寸
        page_width, page_height = fitz.paper_rect('a4').size

    # 添加新页面
    pdf_doc.new_page(width=page_width, height=page_height)

    # 计算图片的位置以使其居中
    img = fitz.open(image_path)
    img_width, img_height = img[0].rect.width, img[0].rect.height
    scale = min(page_width / img_width, page_height / img_height)
    new_width, new_height = img_width * scale, img_height * scale
    x1 = (page_width - new_width) / 2
    y1 = (page_height - new_height) / 2
    rect = fitz.Rect(x1, y1, x1 + new_width, y1 + new_height)

    # 在新页面上插入居中的图像
    last_page = pdf_doc[-1]
    last_page.insert_image(rect, filename=image_path)

    # 保存修改后的PDF,重写整个文件
    new_pdf_path = pdf_path.replace('.pdf', '_new.pdf')  # 创建新文件以避免覆盖原文件
    pdf_doc.save(new_pdf_path)
    pdf_doc.close()

# 调用函数
folder_path = 'path/to/your/documents'  # 替换为你的文档所在的目录
image_path = 'path/to/your/image.jpg'   # 替换为你要添加的图片的路径

for filename in os.listdir(folder_path):
    if filename.endswith('.pdf'):
        pdf_path = os.path.join(folder_path, filename)
        add_image_to_pdf_centered(pdf_path, image_path)
        print(f"Image added to {filename}")

当然我们也可以把两个脚本合并,直接一把梭。

import os
import fitz  # PyMuPDF
import subprocess
from docx import Document
from docx.shared import Inches
from docx.enum.text import WD_ALIGN_PARAGRAPH

# 处理PDF的函数
def add_image_to_pdf_centered(pdf_path, image_path):
    pdf_doc = fitz.open(pdf_path)
    if pdf_doc.page_count > 0:
        page = pdf_doc[0]
        page_width, page_height = page.rect.width, page.rect.height
    else:
        # 使用默认的A4尺寸
        page_width, page_height = fitz.paper_rect('a4').size

    pdf_doc.new_page(width=page_width, height=page_height)
    img = fitz.open(image_path)
    img_width, img_height = img[0].rect.width, img[0].rect.height
    scale = min(page_width / img_width, page_height / img_height)
    new_width, new_height = img_width * scale, img_height * scale
    x1 = (page_width - new_width) / 2
    y1 = (page_height - new_height) / 2
    last_page = pdf_doc[-1]
    last_page.insert_image(fitz.Rect(x1, y1, x1 + new_width, y1 + new_height), filename=image_path)
    new_pdf_path = pdf_path.replace('.pdf', '_new.pdf')
    pdf_doc.save(new_pdf_path)
    pdf_doc.close()

# 处理Word的函数
def convert_doc_to_docx(doc_path):
    docx_path = doc_path + 'x'
    subprocess.run(["/Applications/LibreOffice.app/Contents/MacOS/soffice", "--headless", "--convert-to", "docx", doc_path, "--outdir", os.path.dirname(doc_path)])
    return docx_path

def add_image_to_docx(docx_path, image_path):
    doc = Document(docx_path)
    p = doc.add_paragraph()
    run = p.add_run()
    run.add_picture(image_path, width=Inches(2.0))
    paragraph_format = p.paragraph_format
    paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER
    doc.save(docx_path)

def convert_docx_to_pdf(docx_path):
    subprocess.run(["/Applications/LibreOffice.app/Contents/MacOS/soffice", "--headless", "--convert-to", "pdf", docx_path, "--outdir", os.path.dirname(docx_path)])

# 综合处理函数
def process_files(folder_path, image_path):
    for filename in os.listdir(folder_path):
        file_path = os.path.join(folder_path, filename)
        if filename.endswith('.pdf'):
            add_image_to_pdf_centered(file_path, image_path)
            print(f"Image added to {filename}")
        elif filename.endswith('.doc'):
            docx_path = convert_doc_to_docx(file_path)
            add_image_to_docx(docx_path, image_path)
            convert_docx_to_pdf(docx_path)
            os.remove(docx_path)  # 删除转换后的DOCX文件
            print(f"Processed {filename}")
        elif filename.endswith('.docx'):
            add_image_to_docx(file_path, image_path)
            convert_docx_to_pdf(file_path)
            print(f"Processed {filename}")

# 设置文件夹和图片路径
folder_path = 'path/to/your/documents'  # 替换为你的文档所在的目录
image_path = 'path/to/your/image.jpg'   # 替换为你要添加的图片的路径

# 调用处理函数
process_files(folder_path, image_path)

至此,我们就可以把我们的文档全部添加自己的联系方式。
file

扩散

有了文档,我们就可以进行扩散了,介绍几个我了解的方式:

网盘扩散

通过网盘,把自己文件放在网盘中,然后再通过文章等传播即可。

这种可能很多人要看电影的时候也会遇到,你搜到的电影文档内没有内容,只有一个联系方式,让你加联系方式进群后再把相关的视频发你,达到引流作用。

自建网站

可以自己建一个网站,把所有文档放在服务器,然后让大家去下载。

当然很多人说这样子的话我直接在网站首页留联系方式不是更直接,这个有其他可能,就是有些人在你网站下载了文件,给了他的朋友看,这是不是间接传播了。

借力

我们可以找一些类似于百度文库、还有其他的学习论坛有收集文档的情况,我们把自己的文档上传,借助这些平台的流量,扩大文档被检索的可能。

注意

很多文档可能有版权,这个要注意。

很多平台会检测文档中是否有联系方式等违规的内容。

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

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

相关文章

springboot156基于SpringBoot+Vue的常规应急物资管理系统

基于SpringBootVue的常规应急物资管理系统的设计与实现 摘 要 1 ABSTRACT 2 第一章 绪论 3 1.1研究背景 3 1.2研究意义 3 1.3国内外研究现状 4 1.3.1国外研究现状 4 1.3.2国内研究现状 4 1.4研究内容与方法 5 1.4.1研究内容 5 1.4.2研究方法 5 1.5论文的组织结构 5…

3D力导向树插件-3d-force-graph学习002

一、实现效果:节点文字同时展示 节点显示不同颜色节点盒label文字并存节点上添加点击事件 二、利用插件:CSS2DRenderer 提示:以下引入文件均可在安装完3d-force-graph的安装包里找到 三、关键代码 提示:模拟数据可按如下格式填…

年终奖,还得是腾讯。。。

腾讯年终奖 什么是真正的好公司? 一年到头,出不了几次裁员等劳务纠纷的吃瓜新闻。 只有到年底了,才因为年终奖远高于行业水平,实在没法低调了,"被迫"上热搜。 最近网友爆料了腾讯头牌部门的年终奖&#xff1…

GPT用来润色论文\生成完整长篇论文\进行AI绘图,真的太香了!

详情点击公众号:技术科研吧 链接:GPT用来润色论文\生成完整长篇论文\进行AI绘图,真的太香了! 一:AI领域最新技术 1.OpenAI新模型-GPT-5 2.谷歌新模型-Gemini Ultra 3.Meta新模型-LLama3 4.科大讯飞-星火认知 5.百…

C# CAD界面-自定义工具栏(二)

运行环境 vs2022 c# cad2016 调试成功 一、引用 acdbmgd.dllacmgd.dllaccoremgd.dllAutodesk.AutoCAD.Interop.Common.dllAutodesk.AutoCAD.Interop.dll using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.T…

CICD注册和使用gitlab-runner常见问题

1、现象 fatal: unable to access https://github.com/homebrew/brew/: 2、解决 git config --global --unset http.proxy git config --global --unset https.proxy 查看gitlab-runner是否成功: userusers-MacBook-Pro ~ % gitlab-runner -h 查看gitlab-run…

C# .Net学习笔记—— 异步和多线程(异常处理)

一、异常处理 1、下面for循环20个线程&#xff0c;到11&#xff0c;12号的时候执行失败&#xff0c;这里我也用了try catch来捕获异常。 private void button11_Click(object sender, EventArgs e){TaskFactory taskFactory new TaskFactory();List<Task> taskList ne…

c语言:贪吃蛇的实现

目录 贪吃蛇实现的技术前提&#xff1a; Win32 API介绍 控制台程序&#xff08;console&#xff09; 控制台屏幕上的坐标 GetStdHandle GetConsoleCursorInfo CONSOLE_CURSOR_INFO SetConsoleCursorInfo SetConsoleCursorPosition GetAsyncKeyState 宽字符的打印 …

企业级大数据安全架构(九)FreeIPA管理员密码忘记后如何修改

作者&#xff1a;楼高 1重置Directory Server管理员密码 1.1停止directory server服务 [rootipa schema]# start-dirsrv HDP-HADOOP 如果你不知道你的实例名&#xff0c;可以通过如下方式获取 1.2生成一个新的HASH密码 停止服务后使用pwdhash命令生成一个新的HASH密码 [r…

计算机毕业设计 | springboot 高校新生报到系统(附源码)

1&#xff0c;绪论 1.1 开发背景 学校新生报到仅仅靠原始的手工管理&#xff0c;面对大量的新生信息&#xff0c;无法有效率地将其中的重要部分提取出来&#xff0c;并做出相应的判断和处理。学校的决策只能依据报表数据&#xff0c;在浪费大量人力、物力的同时无法做到实时监…

WorkPlus构建安全高效的内网通讯平台,助力企业内部协作

在现代企业中&#xff0c;高效的内部沟通和协作是团队成功的关键。而内网通讯软件成为了实现内部沟通和协作的首选工具。作为一款领先的内网通讯软件&#xff0c;WorkPlus以其卓越的性能和安全的特性&#xff0c;助力企业打造高效内部沟通与协作的新时代。 为何选择WorkPlus作为…

【51单片机】开发板和单片机的介绍(2)

前言 大家好吖&#xff0c;欢迎来到 YY 滴单片机系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过单片机的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…

Pandoc+Typora文件格式转换

前言 上一期写了一篇名为体验PicGoGitHubjsDelivr搭建免费图床的文章&#xff0c;介绍了如何用Github作为图床&#xff0c;并使用了jsDelivr提供的免费CDN加速&#xff0c;配合markdown来写文章本地使用起来还不错&#xff0c;但是在把.md格式文章上传其他平台的时候遇到了问题…

Apache POI与easyExcel:Excel文件导入导出的技术深度分析

在处理Excel文件时&#xff0c;Java开发者经常会面临多种选择&#xff0c;其中Apache POI和easyExcel是两个非常受欢迎的选择。这两个库都提供了强大的Excel文件处理功能&#xff0c;但在性能、内存使用、API设计以及扩展性方面有所不同。本文将深入分析Apache POI和easyExcel在…

【NTN 卫星通信】基于NTN的多3GPP连接应用场景

1 概述 同时聚合两条3GPP接入链路&#xff0c;其中一条为非地面网络&#xff0c;可以提供以下5G业务使能&#xff0c;尤其适用于带宽有限或接入链路不可靠的服务不足地区:   -扩展流动宽频   -超可靠的服务通信 如技术报告38.821所述&#xff0c;若干服务场景(例如在偏远地…

Spring AOP 常见错误(下)

上一章, 我们介绍了 Spring AOP 常遇到的几个问题&#xff0c;通过具体的源码解析&#xff0c;相信你对 Spring AOP 的基本原理已经有所了解了。不过&#xff0c;AOP 毕竟是 Spring 的核心功能之一&#xff0c;不可能规避那零散的两三个问题就一劳永逸了。所以这一章&#xff0…

OJ刷题:《剑指offer》之单身狗1、2 !(巧用位操作符,超详细讲解!)

目录 1.单身狗1 1.1 题目描述 1.2排序寻找 1.3巧用位操作符 2.单身狗2 1.1 题目描述 1.2排序寻找 1.3巧用位操作符 不是每个人都能做自己想做的事&#xff0c;成为自己想成为的人。 克心守己&#xff0c;律己则安&#xff01; 创作不易&#xff0c;宝子们&#xff01;如…

「悬浮捷径SoftCircle」安卓平台的hao123,一键打开万物

罗老师的onestep一步发布之前, 终端的打开形式还拘泥于桌面和负一屏 这种方式够简洁,但缺点明显: 1.入口单一性:只能在app首页和各种扫一扫之间选择和切换 2.操作复杂:入口切换需要频繁的进入退出桌面,步骤过于繁杂 以下是悬浮捷径SoftCircle的解决方式 1.入口的丰富性: 安卓平…

代码随想录算法训练营Day24 | 回溯理论基础、77.组合

回溯理论基础 回溯和递归是相辅相成的&#xff0c;只要有递归就有回溯&#xff08;执行完一次递归就自动回溯到上一层&#xff09; 回溯的效率 回溯不是一个高效的算法&#xff0c;而是一个纯暴力的过程 有些问题没有更好的解法&#xff0c;只能使用暴力搜索&#xff0c;这时…

okhttp 的 拦截器

拦截器有很多作用&#xff0c;实现就是责任链模式&#xff0c;细节&#xff0c;等我有时间补上。 后面有时间更新一下。 OkHttp最核心的工作是在 getResponseWithInterceptorChain() 中进行&#xff0c;在进入这个方法分析之前&#xff0c;我们先来了 解什么是责任链模式&…