号外!论文查重必杀技之图文混编,快编不下去了。。

2023-11-22 03:38

本文主要是介绍号外!论文查重必杀技之图文混编,快编不下去了。。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

最近作者去图文上自习,忙着写论文,像我这么渣渣的还面临着写毕业论文的困扰的时候,别人已经都论文查重了,跟我一起上自习的基友,在那捣鼓,捣鼓啥呢? 把论文中的字截图,然后粘进原文,做到鱼龙混珠。他说这样做是为了减少查重率。纳尼?窝草,这样!也行??重复率降低先不说,但是一个字一个字用QQ截图再插入论文方法太土了吧,这样做的效率太低了吧。程序员的第一反应就是我能用java来实现, 一个 idea ocurred on me 。

缕一缕

先需求分析一下,输入一段文字,让其自动的转换成图文混编的形式,看上去就好像都是一句话,其实实际上里边惨杂着好多字的图片形式。
如果使用java来实现的话需要用到文字转换图片的技术,还有就是写入doc的技术。

原理

大概已经知道了什么情况,使用两个手段就能实现这个小小的需求。
1.验证码生成技术
2.java操作doc技术
验证码笔者了解,而且会做,java操作doc技术还是第一玩,于是查了一下,感觉实现不是很难。

效果

这里写图片描述

这里写图片描述

实现

文字转成图片

将文字转换成图片的图片生成代码
使用了Graphics2D 生成图片,代码很简单。

public ByteArrayOutputStream makeOne(String word,Params param) throws Exception {//创建内存图像image = new BufferedImage(params.getWidth(), height, BufferedImage.SCALE_SMOOTH) ;Graphics2D g = image.createGraphics() ;g.setColor(Color.white);g.drawRect(0,0, width, height); //画边框g.fillRect(0,0, width, height); //填充背景颜色g.setColor(param.getTextColor()); //设置字体颜色Font font = new Font("simsun",0,20) ;g.setFont(font);// 设置字体g.drawString(word,0,18);ByteArrayOutputStream bos = new ByteArrayOutputStream() ;ImageIO.write(image, "png", bos) ; //将图片格式转换成 bos数组return  bos ;}

有人问为什么要将图片BufferedImage对象转换为ByteArrayOutputStream 流呢? 因为在doc生成中要用到bos流的构造所以需要转换一下。

写入DOC

java操作doc有很多优秀的开源框架,其中有名的一个就是使用itext ,itext提供强大的java操控数据库,包括表格,图片,段落等等。这里我们只需要如何把图片和文字写进去就行了。
创建一个WoldHelper 类负责插入文字和图片

导入Itextjar包

IText 2.1.7 jar 包,可以利用此包来导出word文档
http://download.csdn.net/detail/ap0906230/6821411

WoldHelper.java


public class WordHelper {private Document document  ;private BaseFont bfChinese ; private Paragraph context ;public WordHelper(Document document,Paragraph context) {this.document  = document ;this.context = context ;}public void openDocument(String filePath) throws DocumentException,  IOException {  
//       建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中  RtfWriter2.getInstance(this.document, new FileOutputStream(filePath));  this.document.open();  
//       设置中文字体  
/*        this.bfChinese = BaseFont.createFont("STSongStd-Light",  "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);*/}/** * @param contextStr 内容 * @param fontsize 字体大小 * @param fontStyle 字体样式 * @param elementAlign 对齐方式 * @throws com.lowagie.text.DocumentException*/  public void insertContext(String contextStr,int fontsize) throws DocumentException{  // 正文字体风格  Font contextFont = new Font(fontsize);  //  context = new Paragraph(contextStr) ;//设置行距  context.setLeading(3f);// 正文格式左对齐  //  context.setAlignment(elementAlign);context.setFont(contextFont);  // 离上一段落(标题)空的行数  //   context.setSpacingBefore(1);// 设置第一行空的列数  //  context.setFirstLineIndent(20);  context.add(contextStr) ;}/*** * @param os 图片os流* @param param 格式参数*/public  void insertPhoto(ByteArrayOutputStream os,Params param){       byte [] b = os.toByteArray() ;Image img = null;try {img = Image.getInstance(b);// img.setAbsolutePosition(0, 0);//设置图片的绝对位置img.setAlignment(Image.MIDDLE);// 设置图片显示位置//  img.scaleAbsolute(param.getWidth(), param.getHeight());// 直接设定显示尺寸//  img.scalePercent(70);// 表示显示的大小为原尺寸的20%} catch (BadElementException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (MalformedURLException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {context.add(img) ; //加上图片} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

控制写入

有了生成图片,有了写入图片和文字的方法。如何控制哪些字体是文字哪些字体是图片,这里我使用了将字符串分割,使用随机方法的方式去挑选一些文字作为图片。组织有规律的写入doc。

public class Converter {private Document document  ;private BaseFont bfChinese ; private WordHelper wordHelper ;private String contnet ; private Params param  ;private Paragraph context ;//组织转换方法。public int convert(List<StringBuilder> sbList,Params param) throws Exception{int flag = 0 ;StringBuilder sb = new StringBuilder() ;Document document = new Document() ;Paragraph context = new Paragraph();wordHelper = new WordHelper(document,context) ;wordHelper.openDocument("E:\\shaoduo_paper.doc"); //存到的路径if(sbList!=null||sbList.toString().length()!=0){for(int i = 0 ;i<sbList.size(); i++){Random r = new Random() ;String detail[] = sbList.get(i).toString().split(""); int position = r.nextInt(detail.length) ;for(int j = 0 ; j<detail.length ;j++){if(position==j){PhotoMaker maker = new PhotoMaker(param);ByteArrayOutputStream os =maker.makeOne(detail[position], param) ;wordHelper.insertPhoto(os, param);}else{wordHelper.insertContext(detail[j], 20);}}}document.add(context);  document.close(); //更改文档完成flag = 1 ;}return flag ;}// 通过,分割语句public List<StringBuilder> splitWordsToArry(String str){  String strArry[]  = str.split("") ;StringBuilder sb = new StringBuilder() ;List<StringBuilder> sbList =new ArrayList<StringBuilder>();for(int i=0 ;i<strArry.length;i++){if(!strArry[i].equals(",")&&!strArry[i].equals("。")&&i!=strArry.length-1){sb.append(strArry[i]) ;}else{sb.append(strArry[i]) ; // 只为把逗号加上不然就落下了sbList.add(sb);sb = new StringBuilder() ;}}return sbList;}}

总结

以上代码只是核心代码,源代码附上。
http://pan.baidu.com/s/1slk8Rq1


版权声明
author :shaoduo
原文来自:http://blog.csdn.net/shaoduo/article/details/72829724
其他出处均为转载,原创作品,欢迎读者批评指正。

这篇关于号外!论文查重必杀技之图文混编,快编不下去了。。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/407230

相关文章

PLsql Oracle 下载安装图文过程详解

《PLsqlOracle下载安装图文过程详解》PL/SQLDeveloper是一款用于开发Oracle数据库的集成开发环境,可以通过官网下载安装配置,并通过配置tnsnames.ora文件及环境变... 目录一、PL/SQL Developer 简介二、PL/SQL Developer 安装及配置详解1.下

VScode连接远程Linux服务器环境配置图文教程

《VScode连接远程Linux服务器环境配置图文教程》:本文主要介绍如何安装和配置VSCode,包括安装步骤、环境配置(如汉化包、远程SSH连接)、语言包安装(如C/C++插件)等,文中给出了详... 目录一、安装vscode二、环境配置1.中文汉化包2.安装remote-ssh,用于远程连接2.1安装2

vscode保存代码时自动eslint格式化图文教程

《vscode保存代码时自动eslint格式化图文教程》:本文主要介绍vscode保存代码时自动eslint格式化的相关资料,包括打开设置文件并复制特定内容,文中通过代码介绍的非常详细,需要的朋友... 目录1、点击设置2、选择远程--->点击右上角打开设置3、会弹出settings.json文件,将以下内

Window Server创建2台服务器的故障转移群集的图文教程

《WindowServer创建2台服务器的故障转移群集的图文教程》本文主要介绍了在WindowsServer系统上创建一个包含两台成员服务器的故障转移群集,文中通过图文示例介绍的非常详细,对大家的... 目录一、 准备条件二、在ServerB安装故障转移群集三、在ServerC安装故障转移群集,操作与Ser

windos server2022的配置故障转移服务的图文教程

《windosserver2022的配置故障转移服务的图文教程》本文主要介绍了windosserver2022的配置故障转移服务的图文教程,以确保服务和应用程序的连续性和可用性,文中通过图文介绍的非... 目录准备环境:步骤故障转移群集是 Windows Server 2022 中提供的一种功能,用于在多个

LinuxMint怎么安装? Linux Mint22下载安装图文教程

《LinuxMint怎么安装?LinuxMint22下载安装图文教程》LinuxMint22发布以后,有很多新功能,很多朋友想要下载并安装,该怎么操作呢?下面我们就来看看详细安装指南... linux Mint 是一款基于 Ubuntu 的流行发行版,凭借其现代、精致、易于使用的特性,深受小伙伴们所喜爱。对

手把手教你idea中创建一个javaweb(webapp)项目详细图文教程

《手把手教你idea中创建一个javaweb(webapp)项目详细图文教程》:本文主要介绍如何使用IntelliJIDEA创建一个Maven项目,并配置Tomcat服务器进行运行,过程包括创建... 1.启动idea2.创建项目模板点击项目-新建项目-选择maven,显示如下页面输入项目名称,选择

AI hospital 论文Idea

一、Benchmarking Large Language Models on Communicative Medical Coaching: A Dataset and a Novel System论文地址含代码 大多数现有模型和工具主要迎合以患者为中心的服务。这项工作深入探讨了LLMs在提高医疗专业人员的沟通能力。目标是构建一个模拟实践环境,人类医生(即医学学习者)可以在其中与患者代理进行医学

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear