C# QR코드를 생성하여 Excel에 QR코드 이미지 넣기
13927 단어 Excel
/// <summary>
/// excel
/// </summary>
/// <param name="excelFilePath"> Excel</param>
/// <param name="imageFilePath"> </param>
/// <param name="width"> </param>
/// <param name="height"> </param>
/// <param name="col">Excel </param>
/// <param name="row">Excel </param>
public static void InsertImgToExcel(string excelFilePath, string imageFilePath,int width,int height,int col,int row)
{
try
{
FileStream fs = new FileStream(excelFilePath, FileMode.Open, FileAccess.ReadWrite);
HSSFWorkbook hssfworkbook = new HSSFWorkbook(fs);
ISheet sheet1 = hssfworkbook.GetSheetAt(0);
//map the path to the img folder
string imagesPath = imageFilePath;
//create an image from the path
System.Drawing.Image image = System.Drawing.Image.FromFile(imagesPath);
MemoryStream ms = new MemoryStream();
//pull the memory stream from the image (I need this for the byte array later)
image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
//the drawing patriarch will hold the anchor and the master information
IDrawing patriarch = sheet1.CreateDrawingPatriarch();
//store the coordinates of which cell and where in the cell the image goes
HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 100, 100, col, row, col+3, row+3);
//types are 0, 2, and 3. 0 resizes within the cell, 2 doesn't
anchor.AnchorType = 2;
//add the byte array and encode it for the excel file
int index = hssfworkbook.AddPicture(ms.ToArray(), PictureType.JPEG);
IPicture pict = patriarch.CreatePicture(anchor, LoadImage(imagesPath, hssfworkbook));
pict.Resize();//
FileStream fs3 = new FileStream(excelFilePath, FileMode.OpenOrCreate);
hssfworkbook.Write(fs3);
fs3.Close();
fs.Close();
}
QR코드 생성
/// <summary>
///
/// </summary>
/// <param name="codeNumber"> </param>
/// <param name="size"> </param>
/// <returns> </returns>
public Bitmap Create_ImgCode(string codeNumber, int size)
{
//
QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
//
qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
//
qrCodeEncoder.QRCodeScale = size;
//
qrCodeEncoder.QRCodeVersion = 0;
//
qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
//
System.Drawing.Bitmap image = qrCodeEncoder.Encode(codeNumber);
return image;
}
위의 방법으로 QR코드를 생성하는 데 문제가 있는데 데이터의 양이 매우 많을 때 생성할 수 없다.뒤에 zxing을 바꿔서 QR코드를 만들었는데 데이터가 좀 많아요.
1 public static Bitmap Create(string str)
2 {
3 EncodingOptions options = null;
4 BarcodeWriter writer = null;
5
6 options = new QrCodeEncodingOptions
7 {
8 DisableECI = true,
9 CharacterSet = "UTF-8",
10 Margin = 0,
11 Width = 125,
12 Height = 125
13 };
14 writer = new BarcodeWriter();
15 writer.Format = BarcodeFormat.QR_CODE;
16 writer.Options = options;
17 return writer.Write(str);
18 }
생성된 QR코드는 주위의 공백이 약간 많을 수 있다. 초보적인 테스트는 정보량이 너무 많기 때문에 QR코드가 원시 블록 간격에 따라 생성되면 고정된 크기를 초과할 수 있기 때문에 자동으로 블록 간격을 줄여서 생성된 것이 고정되지 않고 공백이 남는다
계기를 이용하여 한 장의 사진에 어떤 부분에 QR코드가 함유되어 있음을 스캔했다. 만약에 사진이 너무 크면 저는 3000*2400 정도의 크기를 만났기 때문에 QR코드로 해석하면 도저히 해석할 수 없다. QR코드의 위치에 따라 잘라서 재단한 후에 QR코드를 해석하면 실현할 수 있다.
/// <summary>
/// -- GDI+
/// </summary>
/// <param name="b"> Bitmap</param>
/// <returns> Bitmap</returns>
public static Bitmap Cut(Bitmap b)
{
if (b == null)
{
return null;
}
int startX = b.Width * 3 / 4;
int startY = 0;
int width = b.Width / 4;
int height = b.Height / 4;
try
{
Bitmap bmpOut = new Bitmap(width, height, PixelFormat.Format24bppRgb);
Graphics g = Graphics.FromImage(bmpOut);
g.DrawImage(b, new Rectangle(0, 0, width, height), new Rectangle(startX, startY, width, height), GraphicsUnit.Pixel);
g.Dispose();
return bmpOut;
}
catch
{
return null;
}
}
/// <summary>
/// -- GDI+
/// </summary>
/// <param name="b"> Bitmap</param>
/// <param name="StartX"> X</param>
/// <param name="StartY"> Y</param>
/// <param name="iWidth"> </param>
/// <param name="iHeight"> </param>
/// <returns> Bitmap</returns>
public static Bitmap Cut(Bitmap b, int StartX, int StartY, int iWidth, int iHeight)
{
if (b == null)
{
return null;
}
int w = b.Width;
int h = b.Height;
if (StartX >= w || StartY >= h)
{
return null;
}
if (StartX + iWidth > w)
{
iWidth = w - StartX;
}
if (StartY + iHeight > h)
{
iHeight = h - StartY;
}
try
{
Bitmap bmpOut = new Bitmap(iWidth, iHeight, PixelFormat.Format24bppRgb);
Graphics g = Graphics.FromImage(bmpOut);
g.DrawImage(b, new Rectangle(0, 0, iWidth, iHeight), new Rectangle(StartX, StartY, iWidth, iHeight), GraphicsUnit.Pixel);
g.Dispose();
return bmpOut;
}
catch
{
return null;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Excel Grep toolExcel Grep tool ■히나가타 ■ 시트 구성 ExcelGrep.cls...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.