区别

itext5 生成pdf版本:1.4(Acrobat5.x)

itext7 生成pdf版本:1.7(Acrobat8.x)

iText7生成的pdf文件大, itext7 Java库更加系统和完善

iText测试版本和功能描述

itext5

<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>

itext7

<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext7-core</artifactId>
<version>7.1.8</version>
<type>pom</type>
</dependency>

描述: pdf稿件平铺和生成条形码

示例代码

itext5

package com.demo.controller;

import com.itextpdf.text.*;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.*; import java.io.FileOutputStream;
import java.io.IOException; import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfWriter; import java.io.File;
import java.util.ArrayList;
import java.util.List; public class HelloController { public static final String OUTDIR = "results/big/"; private float _PT_CM_RATE = 0.352736F; private static float _PILLOW_HEIGHT = 70F / 0.352736F;
private static float _PILLOW_WIDTH = 47F / 0.352736F; public static void main(String args[]) throws IOException {
File file = new File(OUTDIR);
file.getParentFile().mkdirs();
try {
double random = Math.random();
new HelloController().createCodePdf(OUTDIR+"all"+random+".pdf");
new HelloController().createRowPdf(OUTDIR+"row"+random+".pdf");
}catch (Exception e)
{
System.out.println(e.getMessage());
}
} public void createCodePdf(String dest) throws IOException, DocumentException { List<String> arrayList = new ArrayList<String>();
arrayList.add("results/test_three_01.pdf");
arrayList.add("results/test_three_02.pdf");
arrayList.add("results/test_three_03.pdf");
arrayList.add("results/test_three_04.pdf");
arrayList.add("results/test_three_05.pdf");
arrayList.add("results/test_three_06.pdf");
arrayList.add("results/test_three_07.pdf");
arrayList.add("results/test_three_08.pdf");
arrayList.add("results/test_three_09.pdf");
arrayList.add("results/test_three_10.pdf"); //生成文件的pdfDoc对象
Document document = new Document(new Rectangle(707 / _PT_CM_RATE, 1081 / _PT_CM_RATE));
PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
PdfContentByte canvas = pdfWriter.getDirectContent(); //1.添加两边黑光标
PdfReader pdfBlack = new PdfReader("results/black_47.pdf");
Rectangle pageSize = pdfBlack.getPageSize(1);
final float pdfBlackWidth = pageSize.getWidth(); PdfImportedPage pageBlackCopy = pdfWriter.getImportedPage(pdfBlack, 1); int rowWorkNum = 18;
int rowCodeNum = 5;
//2.遍历稿件list
for (int i = 1; i <= rowWorkNum+rowCodeNum; i++)
{
canvas.addTemplate(pageBlackCopy, 0, _PILLOW_WIDTH*(i-1) );
canvas.addTemplate(pageBlackCopy,_PILLOW_HEIGHT*10+pdfBlackWidth,_PILLOW_WIDTH*(i-1));
}
int j = 0;
PdfImportedPage workPdfPage;
for (String work : arrayList) {
//读取稿件内容
PdfReader workPdf = new PdfReader(work);
workPdfPage = pdfWriter.getImportedPage(workPdf, 1);
for (int i = 1; i <= rowWorkNum; i++) {
canvas.addTemplate(workPdfPage, 0, -1, 1, 0, _PILLOW_HEIGHT * j + pdfBlackWidth, _PILLOW_WIDTH * (i + 5));
}
j++;
} //3.遍历条形码
//遍历条形码底图
PdfReader pdfBlackCode = new PdfReader("results/black_100.pdf");
PdfImportedPage pageBlackCodeCopy = pdfWriter.getImportedPage(pdfBlackCode, 1);
for(int jj=1; jj<=10; jj++){ Barcode128 barcode = new Barcode128();
barcode.setCodeType(Barcode.CODE128);
barcode.setBarHeight(14);
barcode.setX(0.4F);
barcode.setBaseline(23f);
barcode.setCode("1954745454544_3-"+jj);
barcode.setTextAlignment(0);
PdfTemplate templateWithBarcode = barcode.createTemplateWithBarcode(canvas, BaseColor.BLACK, BaseColor.BLACK);
barcode.setFont(BaseFont.createFont("c:/windows/fonts/simkai.ttf", BaseFont.IDENTITY_H,false));
barcode.setAltText("进口量煎熬副科级第三方");
PdfTemplate templateWithBarcodeText = barcode.createTemplateWithBarcode(canvas, BaseColor.BLACK, BaseColor.BLACK);
barcode.setAltText("");
PdfTemplate templateWithBarcodeNone = barcode.createTemplateWithBarcode(canvas, BaseColor.BLACK, BaseColor.BLACK);
for(int i=1; i<=rowCodeNum; i++){
canvas.addTemplate(pageBlackCodeCopy,0,-1,1,0,(jj-1)*_PILLOW_HEIGHT+pdfBlackWidth,(i)*_PILLOW_WIDTH);
canvas.addTemplate(templateWithBarcodeText, 0, -1, 1, 0, 52 + (jj - 1) * _PILLOW_HEIGHT + pdfBlackWidth, (i) * _PILLOW_WIDTH - 25);
canvas.addTemplate(templateWithBarcode, 0, -1, 1, 0, 67 + (jj - 1) * _PILLOW_HEIGHT + pdfBlackWidth, (i) * _PILLOW_WIDTH - 25);
canvas.addTemplate(templateWithBarcodeNone, 0, -1, 1, 0, 82 + (jj - 1) * _PILLOW_HEIGHT + pdfBlackWidth, (i) * _PILLOW_WIDTH - 25);
canvas.addTemplate(templateWithBarcodeNone, 0, -1, 1, 0, 97 + (jj - 1) * _PILLOW_HEIGHT + pdfBlackWidth, (i) * _PILLOW_WIDTH - 25);
}
} //4.关闭资源
document.close();
pdfBlack.close();
pdfBlackCode.close(); } public void createRowPdf(String dest) throws IOException , DocumentException{ List<String> arrayList = new ArrayList<String>();
arrayList.add("results/test_three_01.pdf");
arrayList.add("results/test_three_02.pdf");
arrayList.add("results/test_three_03.pdf");
arrayList.add("results/test_three_04.pdf");
arrayList.add("results/test_three_05.pdf");
arrayList.add("results/test_three_06.pdf");
arrayList.add("results/test_three_07.pdf");
arrayList.add("results/test_three_08.pdf");
arrayList.add("results/test_three_09.pdf");
arrayList.add("results/test_three_10.pdf"); //生成文件的pdfDoc对象
Document document = new Document(new Rectangle(707 / _PT_CM_RATE, 47/ _PT_CM_RATE));
PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
PdfContentByte canvas = pdfWriter.getDirectContent(); //1.添加两边黑光标
PdfReader pdfBlack = new PdfReader("results/black_47.pdf");
Rectangle pageSize = pdfBlack.getPageSize(1);
final float pdfBlackWidth = pageSize.getWidth(); PdfImportedPage pageBlackCopy = pdfWriter.getImportedPage(pdfBlack, 1); int rowWorkNum = 1;
int rowCodeNum = 0;
//2.遍历稿件list
for (int i = 1; i <= rowWorkNum+rowCodeNum; i++)
{
canvas.addTemplate(pageBlackCopy, 0, _PILLOW_WIDTH*(i-1) );
canvas.addTemplate(pageBlackCopy,_PILLOW_HEIGHT*10+pdfBlackWidth,_PILLOW_WIDTH*(i-1));
}
int j = 0;
PdfImportedPage workPdfPage;
for (String work : arrayList) {
//读取稿件内容
PdfReader workPdf = new PdfReader(work);
workPdfPage = pdfWriter.getImportedPage(workPdf, 1);
for (int i = 1; i <= rowWorkNum; i++) {
canvas.addTemplate(workPdfPage, 0, -1, 1, 0, _PILLOW_HEIGHT * j + pdfBlackWidth, _PILLOW_WIDTH * (i));
}
j++;
}
//关闭资源
document.close();
pdfBlack.close(); } }

itext7

package com.demo.controller;
import com.itextpdf.io.font.PdfEncodings;
import com.itextpdf.io.font.constants.StandardFonts;
import com.itextpdf.io.image.ImageDataFactory;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.barcodes.Barcode128;
import com.itextpdf.barcodes.Barcode1D;
import com.itextpdf.io.font.FontConstants;
import com.itextpdf.io.image.ImageData;
import com.itextpdf.io.image.ImageType;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.kernel.pdf.xobject.PdfFormXObject;
import com.itextpdf.kernel.geom.AffineTransform;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.kernel.PdfException;
import com.itextpdf.kernel.colors.Color;
import com.itextpdf.kernel.colors.ColorConstants;
import com.itextpdf.kernel.colors.DeviceRgb; import org.apache.pdfbox.cos.COSBase;
import org.apache.pdfbox.cos.COSDictionary;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import com.itextpdf.layout.element.Text; import static com.itextpdf.svg.SvgConstants.Tags.IMAGE; public class HelloController { public static final String DEST = "results/big/wwww"+Math.random()+".pdf"; private float _PT_CM_RATE = 0.352736F; private static float _PILLOW_HEIGHT = 70F / 0.352736F;
private static float _PILLOW_WIDTH = 47F / 0.352736F; public static void main(String args[]) throws IOException {
File file = new File(DEST);
file.getParentFile().mkdirs();
// new HelloController().createCodePdf(DEST);
new HelloController().createRowPdf(DEST);
} public void createCodePdf(String dest) throws IOException { List<String> arrayList = new ArrayList<String>();
arrayList.add("results/test_three_01.pdf");
arrayList.add("results/test_three_02.pdf");
arrayList.add("results/test_three_03.pdf");
arrayList.add("results/test_three_04.pdf");
arrayList.add("results/test_three_05.pdf");
arrayList.add("results/test_three_06.pdf");
arrayList.add("results/test_three_07.pdf");
arrayList.add("results/test_three_08.pdf");
arrayList.add("results/test_three_09.pdf");
arrayList.add("results/test_three_10.pdf"); //生成文件的pdfDoc对象
PdfWriter dfWriter = new PdfWriter(dest);
dfWriter.setSmartMode(true);
PdfDocument pdf = new PdfDocument(dfWriter); PageSize nUpPageSize = new PageSize(707 / _PT_CM_RATE, 1081 / _PT_CM_RATE);
// PageSize nUpPageSize = new PageSize(707 / _PT_CM_RATE, 510 / _PT_CM_RATE);
PdfPage page = pdf.addNewPage(nUpPageSize); //画布的生成
PdfCanvas canvas = new PdfCanvas(page); //Scale page
AffineTransform transformationMatrix = AffineTransform.getScaleInstance(1, 1);
canvas.concatMatrix(transformationMatrix);//不旋转 //添加右侧黑光标
PdfDocument pdfBlack = new PdfDocument(new PdfReader("results/black_47.pdf"));
PdfPage blackPage = pdfBlack.getPage(1);
Rectangle origBlack = blackPage.getPageSize();
PdfFormXObject pageBlackCopy = blackPage.copyAsFormXObject(pdf); int rowWorkNum = 18;
int rowCodeNum = 5;
//遍历稿件list
for (int i = 1; i <= rowWorkNum; i++)
canvas.addXObject(pageBlackCopy, 0, _PILLOW_WIDTH*(i+4) );
int j = 0;
for (String work : arrayList) {
//System.out.println(work);
//读取稿件内容
PdfDocument workPdf = new PdfDocument(new PdfReader(work));
PdfPage workPdfPage = workPdf.getPage(1);
PdfFormXObject workPdfPageForm = workPdfPage.copyAsFormXObject(pdf);
for (int i = 1; i <= rowWorkNum; i++) { canvas.addXObject(workPdfPageForm, 0, -1, 1, 0, _PILLOW_HEIGHT * j + origBlack.getWidth(), _PILLOW_WIDTH * (i + 5));
}
workPdf.close();
j++;
}
for (int i = 1; i <= rowWorkNum; i++)
canvas.addXObject(pageBlackCopy,_PILLOW_HEIGHT*10+origBlack.getWidth(),_PILLOW_WIDTH*(i+4)); //遍历条形码
//遍历条形码底图
PdfDocument codeBackPdf = new PdfDocument(new PdfReader("results/black_100.pdf"));
PdfPage codeBackPage = codeBackPdf.getPage(1);
Rectangle codeBackPageRectangle = codeBackPage.getPageSize();
PdfFormXObject codeBackPageForm = codeBackPage.copyAsFormXObject(pdf); for(int i=1; i<=rowCodeNum; i++){ canvas.addXObject(pageBlackCopy, 0, _PILLOW_WIDTH*(i-1) );
for(int jj=1; jj<=10; jj++){
canvas.addXObject(codeBackPageForm,0,-1,1,0,(jj-1)*_PILLOW_HEIGHT+origBlack.getWidth(),(i)*_PILLOW_WIDTH); String myString = "1954745454544_3-1";
Barcode128 barcode = new Barcode128(pdf);
barcode.setCode(myString);
barcode.setCodeType(Barcode128.CODE128);
barcode.setBaseline(23f);
barcode.setAltText("进口量煎熬副科级第三方");
barcode.setFont(PdfFontFactory.createFont("c:/windows/fonts/simkai.ttf", PdfEncodings.IDENTITY_H,false));
barcode.setTextAlignment(Barcode1D.ALIGN_LEFT);
barcode.setBarHeight(14);
barcode.setX(0.45F); PdfFormXObject pdfImg = barcode.createFormXObject(pdf);
barcode.setAltText("1954745454544_3-1"); PdfFormXObject pdfImgCode = barcode.createFormXObject(pdf);
barcode.setAltText("");
PdfFormXObject pdfImgOnly = barcode.createFormXObject(pdf);
//canvas.add(p);
canvas.addXObject(pdfImg,0,-1,1,0,52+(jj-1)*_PILLOW_HEIGHT+origBlack.getWidth(),(i)*_PILLOW_WIDTH-25);
canvas.addXObject(pdfImgCode,0,-1,1,0,67+(jj-1)*_PILLOW_HEIGHT+origBlack.getWidth(),(i)*_PILLOW_WIDTH-25);
canvas.addXObject(pdfImgOnly,0,-1,1,0,82+(jj-1)*_PILLOW_HEIGHT+origBlack.getWidth(),(i)*_PILLOW_WIDTH-25);
canvas.addXObject(pdfImgOnly,0,-1,1,0,97+(jj-1)*_PILLOW_HEIGHT+origBlack.getWidth(),(i)*_PILLOW_WIDTH-25); }
canvas.addXObject(pageBlackCopy,_PILLOW_HEIGHT*10+origBlack.getWidth(),_PILLOW_WIDTH*(i-1)); }
pdfBlack.close();
pdf.close(); }
public void createRowPdf(String dest) throws IOException { List<String> arrayList = new ArrayList<String>();
arrayList.add("results/test_three_01.pdf");
arrayList.add("results/test_three_02.pdf");
arrayList.add("results/test_three_03.pdf");
arrayList.add("results/test_three_04.pdf");
arrayList.add("results/test_three_05.pdf");
arrayList.add("results/test_three_06.pdf");
arrayList.add("results/test_three_07.pdf");
arrayList.add("results/test_three_08.pdf");
arrayList.add("results/test_three_09.pdf");
arrayList.add("results/test_three_10.pdf"); //生成文件的pdfDoc对象
PdfDocument pdf = new PdfDocument(new PdfWriter(dest)); System.out.println(pdf.getPdfVersion()); PageSize nUpPageSize = new PageSize(707 / _PT_CM_RATE, 47 / _PT_CM_RATE);
PdfPage page = pdf.addNewPage(nUpPageSize); //画布的生成
PdfCanvas canvas = new PdfCanvas(page); //Scale page
AffineTransform transformationMatrix = AffineTransform.getScaleInstance(1, 1);
canvas.concatMatrix(transformationMatrix);//不旋转 //添加右侧黑光标
PdfDocument pdfBlack = new PdfDocument(new PdfReader("results/black_47.pdf"));
PdfPage blackPage = pdfBlack.getPage(1);
Rectangle origBlack = blackPage.getPageSize();
PdfFormXObject pageBlackCopy = blackPage.copyAsFormXObject(pdf); canvas.addXObject(pageBlackCopy, 0, 0); //遍历稿件list
int j = 0;
for (String work : arrayList) {
//读取稿件内容
PdfDocument workPdf = new PdfDocument(new PdfReader(work));
PdfPage workPdfPage = workPdf.getPage(1);
//pdf转化为图片资源
// byte[] contentBytes = workPdfPage.getContentBytes();
// ImageData image = ImageDataFactory.create(contentBytes);
// canvas.addImage(image, 0,-1,1,0,_PILLOW_HEIGHT*j+origBlack.getWidth(),_PILLOW_WIDTH); //pdf转化为formX
PdfFormXObject workPdfPageForm = workPdfPage.copyAsFormXObject(pdf);
canvas.addXObject(workPdfPageForm, 0,-1,1,0,_PILLOW_HEIGHT*j+origBlack.getWidth(),_PILLOW_WIDTH);
workPdf.close();
j++;
}
canvas.addXObject(pageBlackCopy,_PILLOW_HEIGHT*10+origBlack.getWidth(),0); pdfBlack.close();
pdf.close();
}
}

参考文章

https://itextpdf.com/en/resources/books/itext-7-jump-start-tutorial-java/chapter-6-reusing-existing-pdf-documents

https://itextpdf.com/en/resources/examples/itext-5-legacy/chapter-6-working-existing-pdfs

itext5和itext7操作pdf平铺和图层叠加(tiling, and N-upping)的更多相关文章

  1. Java 设置PDF平铺图片背景(水印)

    一.概述及环境准备 本文介绍使用免费版PDF库-Free Spire.PDF for Java加载图片来设置成PDF平铺图片背景的效果,也可以作为平铺图片水印来使用:编辑代码前,需要先导入jar文件, ...

  2. UIImage图片处理,旋转、截取、平铺、缩放等操作

    来源:iOS_小松哥 链接:http://www.jianshu.com/p/9ab1205f5166 有时候我们需要处理图片,比如改变大小,旋转,截取等等,所以今天说一说图片处理相关的一些操作. 本 ...

  3. 5 分钟掌握 JS 实用窍门技巧,帮你快速撸码--- 删除数组尾部元素、E6对象解构、async/await、 操作平铺嵌套多维数组等

    1. 删除数组尾部元素 一个简单方法就是改变数组的length值: const arr = [11, 22, 33, 44, 55, 66]; arr.length = 3; console.log( ...

  4. JSON平铺功能的实现(JS操作JSON数据)

    一.什么是JSON平铺 JSON平铺分成两种: 平铺的json转树结构的json 例如: { a: 'value', b: 'b1.value' } // 转换成=> { a: 'value', ...

  5. 深度学习原理与框架-递归神经网络-RNN_exmaple(代码) 1.rnn.BasicLSTMCell(构造基本网络) 2.tf.nn.dynamic_rnn(执行rnn网络) 3.tf.expand_dim(增加输入数据的维度) 4.tf.tile(在某个维度上按照倍数进行平铺迭代) 5.tf.squeeze(去除维度上为1的维度)

    1. rnn.BasicLSTMCell(num_hidden) #  构造单层的lstm网络结构 参数说明:num_hidden表示隐藏层的个数 2.tf.nn.dynamic_rnn(cell, ...

  6. 建模:通过ES平铺关系型数据库多表的数据

    问:建模要从一个限界上下文中来建模,是否可以简单的把几张表进行笛卡尔乘积方式的平铺? 答:不能,原因之一,数据量会急剧增长:原因之二,这样的平铺是毫无意义的,必须要定义一个维度,在这个维度上根据需求约 ...

  7. C# 处理PPT水印(三)—— 在PPT中添加多行(平铺)文本水印效果

    在PPT幻灯片中,可通过添加形状的方式,来实现类似水印的效果,可添加单一文本水印效果,即幻灯片中只有一个文本水印:也可以添加多行(平铺)文本水印效果,即幻灯片中以一定方式平铺排列多个文本水印效果.本文 ...

  8. Java使用iText7生成PDF

    前言 我们之前使用js库html2canvas + jspdf实现html转PDF.图片,并下载(详情请戳:html页面转PDF.图片操作记录),大致原理是将页面塞到画布里,以图片的方式放到PDF中, ...

  9. Mac下的平铺式桌面 - Yabai

    Mac下的平铺式桌面 - Yabai 近来无事,凑着周末休息的时间,想折腾一下 Mac.很久之前就有朋友给我推荐过一款名为"Yabai"的平铺式桌面管理软件,今天,就折腾起来了. ...

随机推荐

  1. java框架篇---Struts2 本地化/国际化(i18n)(转)

    源地址:https://www.cnblogs.com/oumyye/p/4368453.html 国际化(i18n)是规划和实施的产品和服务,使他们能很容易地适应特定的本地语言和文化的过程中,这个过 ...

  2. mysql中information_schema.schemata字段说明

    1. 获取所有数据库信息(SCHEMATA) show databases; 查看用户下所有数据库信息:SCHEMATA表:提供了关于数据库中的库的信息.详细表述了某个库的名称,默认编码,排序规则.各 ...

  3. easyUI dataGrid主从表点击展开问题

    昨天在公司写代码遇到了一个问题,就是在用easyUI做主从表的时候在查询之后点击展开的时候不能再次展开了.先说一下主从表我也是第一次用 效果如下图: 然后点击前面的小加号出现以下效果: 然而遇到了一个 ...

  4. vue学习笔记(四)事件处理器

    前言 在上一章vue学习笔记(三)class和style绑定的内容中,我们学习了如何在vue中绑定class和style,介绍了常用的绑定方法,class的数组绑定和对象绑定以及style的数组绑定和 ...

  5. 关于Mac VMFusion Centos7虚拟机网络的配置

    1.环境配置: 创建完快照后启动虚拟机,使用root用户和root密码登录系统 1.1 停止防火墙 #停止防火墙 [root@localhost ~]#systemctl stop firewalld ...

  6. 1073 多选题常见计分法 (20分)C语言

    批改多选题是比较麻烦的事情,有很多不同的计分方法.有一种最常见的计分方法是:如果考生选择了部分正确选项,并且没有选择任何错误选项,则得到 50% 分数:如果考生选择了任何一个错误的选项,则不能得分.本 ...

  7. C Primer Plus(二)

    重读C Primer Plus ,查漏补缺 重读C Primer Plus,记录遗漏的.未掌握的.不清楚的知识点 分支和跳转 1.ctype.h头文件里包含了一些列用于字符判断的函数,包括判断数字.大 ...

  8. Python 愤怒的小鸟代码实现:物理引擎pymunk使用

    游戏介绍 最近比较忙,周末正好有时间写了python版本的愤怒的小鸟,使用了物理引擎pymunk,图片资源是从github上下载的,实现了一个可玩的简单版本. 功能实现如下: 支持小鸟类型:红色小鸟, ...

  9. 端口扫描器--利用python的nmap模块

    安装nmap模块挺麻烦的,搞了半天 不仅要安装pip install nmap 还要sudo apt install nmap 给出代码,没有设多线程,有点慢,注意端口的类型转换,搞了很久 #!/us ...

  10. ASCII、UNICODE、UTF

    在计算机中,一个字节对应8位,每位可以用0或1表示,因此一个字节可以表示256种情况. ascii 美国人用了一个字节中的后7位来表达他们常用的字符,最高位一直是0,这便是ascii码. 因此asci ...