基于C#实现PDF文件合并工具

2025-01-20 16:50

本文主要是介绍基于C#实现PDF文件合并工具,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《基于C#实现PDF文件合并工具》这篇文章主要为大家详细介绍了如何基于C#实现一个简单的PDF文件合并工具,文中的示例代码简洁易懂,有需要的小伙伴可以跟随小编一起学习一下...

界面

基于C#实现PDF文件合并工具

主要用于发票PDF文件的合并。经常出差要报销的很有用。

代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using iTextSharp.text;
using iTextSharp.text.pdf;
//using PdfSharp.Pdf;
//using PdfSharp.Pdf.IO;
 
namespace PdfMergeApp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            btnOpenDir.Enabled = false;
        }
 
        private List<string> pdfList;
        private string outputPdfDir;
 
        private void bntSelectDir_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();
            DialogResult dialogResult = folderBrowserDialog.ShowDialog();
 
            if (dialogResult == DialogResult.OK)
            {
                string selectedFolderPath = folderBrowserDialog.SelectedPath;
                //Console.WriteLine("选择的目录是: " + selectedFolderPath);
                txtFileDir.Text = selectedFolderPath;
 
                pdfList = Directory.GetFiles(selectedFolderPath, "*.pdf").ToList();
 
                if (pdfList != null && pdfList.Count > 0)
                {
                    pdfList = pdfList.OrderBy(t => t).ToList();
                }
 
                addPdfList();
            }
        }
 
        private void addPdfList()
        {
            this.listViewWorkLogs.Items.Clear();
            int no = 1;
            foreach (var item in pdfList)
            {
                ListViewItem lvItem = new ListViewItem();
 
                lvItem.ForeColor = Color.Blue;
                lvItem.Text = no.ToString();
                lvItem.StateImageIndex = 0;
                lvItem.Tag = no - 1;
                lvItem.SubItems.Add(item);
 
                this.listViewWorkLogs.Items.Add(lvItem);
                no++;
            }
        }China编程
 
        /// <summary>
        /// 合并多个PDF文件为一个PDF文件
        /// </summary>
        /// <param name="inputFolderPath"></param>
        /// <param name="outputFolderPath"></param>
        /// <param name="outputPdfName"></param>
        public void MergePDFs(string outputFilePath, params string[] inputFilePaths)
        {
            // 获取输入文件夹中所有的PDF文件  
            //string[] inputFiles = Directory.GetFiles(inputFolderPath, "*.pdf");
 
            // 创建输出PDF文件路径  
            //string outputPdfPath = Path.Combine(outputFolderPath, outputPdfName);
 
            // 检查新输出文件是否已存在  
            if (File.Exists(outputFilePath))
            {
                // 如果已存在,则删除旧文件并创建新文件  
                Fhttp://www.chinasem.cnile.Delete(outputFilePath);
            }
 
            // 创建输出PDF文件  
            using (FileStream stream = new FileStream(outputFilePath, FileMode.Create))
            {
                Document pdfDoc = new Document();
                PdfCopy pdf = new PdfCopy(pdfDoc, stream);
                pdfDoc.Open();
 
                foreach (string file in inputFilePaths)
                {
                    // 读取每个PDF文件并将其页面添加到输出PDF中  
                    PdfReader reader = new PdfReader(file);
                    int n = reader.NumberOfPages;
                    for (int i = 1; i <= n; i++)
                    {
                        pdf.AddPage(pdf.GetImportedPage(reader, i));
                    }
                    reader.Close();
                }
 
                if (pdfDoc != null) pdfDoc.Close();
                stream.Close();
            }
        }
 
        /// <summary>
        /// 合并多个PDF文件为一个PDF文件
        /// </summary>
        /// <param name="inputFolderPath"></param>
        /// <param name="outputFolderPath"></param>
        /// <param name="outputPdfName"></param>
        public void MergePDFs(string inputFolderPath, string outputFolderPath, string outputPdfName)
        {
            // 获取输入文件夹中所有的PDF文件  
            string[] inputFiles = Directory.GetFiles(inputFolderPath, "*.pdf");
 
            // 创建输出PDF文件路径  
            string outputPdfPath = Path.Combine(outputFolderPath, outputPdfName);
 
            outputPdfPath.CreateDirectoryByPath();
 
            // 创建输出PDF文件  
            using (FileStream stream = new FileStream(outputPdfPath, FileMode.Create))
            {
                Document pdfDoc = new Document();
                PdfCopy pdf = new PdfCopy(pdfDoc, stream);
                pdfDoc.Open();
 
                foreach (string file in inputFiles)
                {
                    // 读取每个PDF文件并将其页面添加到输出PDF中  
                    PdfReader reader = new PdfReader(file);
                    int n = reader.NumberOfPages;
                    for (int i = 1; i <= n; i++)
                    {
                        pdf.AddPage(pdf.GetImportedPage(reader, i));
                    }
                    reader.Close();
                }
 
                if (pdfDoc != null) pdfDoc.Close();
                stream.Close();
            }
 
            string newOutputPdfPath = Path.Combine(outputFolderPath, "AllPDF_Merged.pdf");
            //string newOutputPdfPath = Path.Combine(outputFolderPath, outputPdfName);
 
            // 检查新输出文件是否已存在  
            if (File.Exists(newOutputPdfPath))
            {
                // 如果已存在,则删除旧文件并创建新文件  
                File.Delete(newOutputPdfPath);
            }
 
            // 重命名输出PDF文件  
            File.Move(outputPdfPath, newOutputPdfPath);
        }
 
        /// <summary>
        /// 合并多个PDF文件为一个PDF文件
        /// </summary>
        /// <param name="inputFolderPath"></param>
        /// <param name="outputFolderPath"></param>
        /// <param name="outputPdfName"></param>
        public bool MergePDFs(string outputFolderPath, string outputPdfName)
        {
            var isOk = false;
            try
            {
                // 获取输入文件夹中所有的PDF文件  
                //string[] inputFiles = Directory.GetFiles(inputFolderPath, "*.pdf");
 
                // 创建输出PDF文件路径  
                string outputPdfPath = Path.Combine(outputFolderPath, outputPdfName);
 
                outputPdfPath.CreateDirectoryByPath();
 
                // 创建输出PDF文件  
                using (FileStream stream = new FileStream(outputPdfPath, FileMode.Create))
                {
                    Document pdfDoc = new Document();
                    PdfCopy pdf = new PdfCopy(pdfDoc, stream);
                    pdfDoc.Open();
 
                    foreach (string file in pdfList)
                    {
                        // 读取每个PDF文件并将其页面添加到输出PDF中  
                        PdfReader reader = new PdfReader(file);
                        int n = reader.NumberOfPages;
                        for (int i = 1; i <= n; i++)
                        {
                            pdf.AddPage(pdf.GetImportedPage(reader, i));
                        }
                        reader.Close();
                    }
 
                    if (pdfDoc != null) pdfDoc.Close();
                    stream.Close();
                }
 
                string newOutputPdfPath = Path.Combine(outputFolderPath, "AllPDF_Merged.pdf");
                //string newOutputPdfPath = Path.Combine(outputFolderPath, outputPdfName);
 
                // 检查新输出文件是否已存在  
                if (File.Exists(newOutputPdfPath))
                {
                    // 如果已存在,则删除旧文件并创建新文件  
                    File.Delete(newOutputPdfPath);
                }
 
                // 重命名输出PDF文件  
                File.Move(outputPdfPath, newOutputPdfPath);
                isOk = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show("合并异常:" + ex.Message);
            }
            return isOk;
        }
 
        private void btnMergePDF_Click(object sender, EventArgs e)
        {
            if (pdfList != null && pdfList.Count > 0)
            {
                var outputFilePath = txtFileDir.Text + "\\MergePDF_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".pdf";
                //MergePDFs(outputFilePath, pdfList.ToArray());
 
                var outputPdfName = "MergePDF_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".pdf";
                var outputPdfNameAll = txtFileDir.Text + "\\MergePDF\\" + outputPdfName;
                outputPdfDir = txtFileDir.Text + "\\MergePDF";
                //MergePDFs(txtFileDir.Text, txtFileDir.Text+ "\\MergePDF", outputPdfName);
                var isOk = MergePDFs(outputPdfDir, outputPdfName);
                if (isOk)
                {
                    lblResult.Text = "合并完成。输出文件目录:" + outputPdfNameAll;
                    btnOpenDir.Enabled = true;
                    MessageBox.Show("合并完成");
                }                
            }
            else
            {
                MessageBox.Show("你没有要合并的PDF文件");
            }
        }
 
        private void btnOpenDir_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(outputPdfDir))
            {
                OpenDirectory(outputPdfDir);
            }
            else
            {
                MessageBox.Show("合并文件没有生成");
            }
        }
 
        static void OpenDirectory(string path)
        {
            ProcessStartInfo startInfo = new ProcessStartInfo
            {
                Arguments = path,
                FileName = "explorer.exe"
            };
 
            Process.Start(startInfo);
        }
 
        private void listViewWorkLogs_ItemCheck(object sender, ItemChecwww.chinasem.cnkEventArgs e)
        {
            var listViewItem = sender as ListViewItem;
            var index = listViewItem.Tag;
            var a = 0;
        }
 
        private int selectIndex;
        private int newIndex;
        //private string selectFileName;
 
        private void listViewWorkLogs_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (listViewWorkLogs.SelectedItems.Count > 0)
            {
                var listViewItem = listViewWorkLogs.SelectedItems[0];
                selectIndex = (int)listViewItem.Tag;
                newIndex = selectIndex;
            }
        }
 
        
        private void btnMoveUp_Click(object sender, EventArgs e)
        {
            if (pdfList != null && pdfList.Count > 0)
            {
                newIndex--;
                if (newIndex >= 0 && newIndex < pdfList.Count)
                {
                    var selectFileName = pdfList[selectIndex];
                    pdfList[selectIndex] = pdfList[newIndex];
                    pdfList[newIndex] = selectFileName;
                    selectIndex = newIndex;
 
                    addPdfList();
                }
                else
                {
                    newIndex = 0;
                }
            }
        }
 
        private void btnMoveDown_Click(object sender, EventArgs e)
        {
            if (pdfList != null && pdfList.Count > 0)
            {
                newIndex++;
                if (newIndex < pdfList.Count)
                {
                    var selectFileName = pdfList[selectIndex];
                    pdfList[selectIndex] = pdfList[newIndex];
                    pdfList[newIndex] = selectFileName;
                    selectIndex = newIndex;
 
                    addPdfList();
                }
              hSFiPr  else
                {
                    newIndex = pdfList.Count - 1;
                }
            }
        }
    }
}

UI代码

 
namespace PdfMergeApp
{
    partial class Form1
    {
        /// <summary>
        /// 必需的设计器变量。
        /// </summary>
        private System.ComponentModel.IContainer components = null;
 
        /// <summary>
        /// 清理所有正在使用的资源。
        /// </summary>
        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
 
        #region Windows 窗体设计器生成的代码
 
        /// <summary>
        /// 设计器支持所需的方法 - 不要修改
        /// 使用代码编辑器修改此方法的内容。
        /// </summary>
        private void InitializeComponent()
        {
            this.label1 = new System.Windows.Forms.Label();
            this.txtFileDir = new System.Windows.Forms.TextBox();
            this.button1 = new System.Windows.Forms.Button();
            this.bntSelectDir = new System.Windows.Forms.Button();
            this.btnMergePDF = new System.Windows.Forms.Button();
            this.groupBox1 = new System.Windows.Forms.GroupBox();
            this.listViewWorkLogs = new System.Windows.Forms.ListView();
            this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
            this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
            this.groupBox2 = new System.Windows.Forms.GroupBox();
            this.lblResult = new System.Windows.Forms.Label();
            this.btnOpenDir = new System.Windows.Forms.Button();
            this.btnMoveUp = new System.Windows.Forms.Button();
            this.btnMoveDown = new System.Windows.Forms.Button();
            this.groupBox1.SuspendLayout();
            this.groupBox2.SuspendLayout();
            this.SuspendLayout();
            // 
            // label1
            // 
            this.label1.AutoSize = true;
            this.label1.Location = new System.Drawing.Point(12, 9);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(75, 15);
            this.label1.TabIndex = 0;
            this.label1.Text = "选择目录:";
            // 
            // txtFileDir
            // 
            this.txtFileDir.Location = new System.Drawing.Point(90, 6);
            this.txtFileDir.Name = "txtFileDir";
            this.txtFileDir.ReadOnly = true;
            this.txtFileDir.Size = new System.Drawing.Size(491, 25);
            this.txtFileDir.TabIndex = 1;
            // 
            // button1
            // 
            this.button1.Location = new System.Drawing.Point(120, 141);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(8, 8);
            this.button1.TabIndex = 2;
            this.button1.Text = "button1";
            this.button1.UseVisualStyleBackColor = true;
            // 
            // bntSelectDir
            // 
            this.bntSelectDir.Location = new System.Drawing.Point(600, 6);
            this.bntSelectDir.Name = "bntSelectDir";
            this.bntSelectDir.Size = new System.Drawing.Size(118, 35);
            this.bntSelectDir.TabIndex = 3;
            this.bntSelectDir.Text = "选择目录";
            this.bntSelectDir.UseVisualStyleBackColor = true;
            this.bntSelectDir.Click += new System.EventHandler(this.bntSelectDir_Click);
            // 
            // btnMergePDF
            // 
China编程            this.btnMergePDF.Location = new System.Drawing.Point(724, 7);
            this.btnMergePDF.Name = "btnMergePDF";
            this.btnMergePDF.Size = new System.Drawing.Size(94, 32);
            this.btnMergePDF.TabIndex = 3;
            this.btnMergePDF.Text = "合并PDF";
            this.btnMergePDF.UseVisualStyleBackColor = true;
            this.btnMergePDF.Click += new System.EventHandler(this.btnMergePDF_Click);
            // 
            // groupBox1
            // 
            this.groupBox1.Controls.Add(this.listViewWorkLogs);
            this.groupBox1.Location = new System.Drawing.Point(15, 49);
            this.groupBox1.Name = "groupBox1";
            this.groupBox1.Size = new System.Drawing.Size(764, 589);
            this.groupBox1.TabIndex = 4;
            this.groupBox1.TabStop = false;
            this.groupBox1.Text = "文件列表";
            // 
            // listViewWorkLogs
            // 
            this.listViewWorkLogs.BackColor = System.Drawing.SystemColors.InactiveCaption;
            this.listViewWorkLogs.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
            this.columnHeader1,
            this.columnHeader2});
            this.listViewWorkLogs.Dock = System.Windows.Forms.DockStyle.Fill;
            this.listViewWorkLogs.FullRowSelect = true;
            this.listViewWorkLogs.GridLines = true;
            this.listViewWorkLogs.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
            this.listViewWorkLogs.HideSelection = false;
            this.listViewWorkLogs.ImeMode = System.Windows.Forms.ImeMode.NoControl;
            this.listViewWorkLogs.LabelWrap = false;
            this.listViewWorkLogs.Location = new System.Drawing.Point(3, 21);
            this.listViewWorkLogs.MultiSelect = false;
            this.listViewWorkLogs.Name = "listViewWorkLogs";
            this.listViewWorkLogs.Size = new System.Drawing.Size(758, 565);
            this.listViewWorkLogs.TabIndex = 2;
            this.listViewWorkLogs.UseCompatibleStateImageBehavior = false;
            this.listViewWorkLogs.View = System.Windows.Forms.View.Details;
            this.listViewWorkLogs.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.listViewWorkLogs_ItemCheck);
            this.listViewWorkLogs.SelectedIndexChanged += new System.EventHandler(this.listViewWorkLogs_SelectedIndexChanged);
            // 
            // columnHeader1
            // 
            this.columnHeader1.Text = "序号";
            this.columnHeader1.Width = 50;
            // 
            // columnHeader2
            // 
            this.columnHeader2.Text = "文件名";
            this.columnHeader2.Width = 580;
            // 
            // groupBox2
            // 
            this.groupBox2.Controls.Add(this.lblResult);
            this.groupBox2.Controls.Add(this.btnOpenDir);
            this.groupBox2.Location = new System.Drawing.Point(15, 644);
            this.groupBox2.Name = "groupBox2";
            this.groupBox2.Size = new System.Drawing.Size(809, 68);
            this.groupBox2.TabIndex = 5;
            this.groupBox2.TabStop = false;
            this.groupBox2.Text = "合并结果";
            // 
            // lblResult
            // 
            this.lblResult.AutoSize = true;
            this.lblResult.Location = new System.Drawing.Point(17, 34);
            this.lblResult.Name = "lblResult";
            this.lblResult.Size = new System.Drawing.Size(55, 15);
            this.lblResult.TabIndex = 0;
            this.lblResult.Text = "label2";
            // 
            // btnOpenDir
            // 
            this.btnOpenDir.Location = new System.Drawing.Point(709, 24);
            this.btnOpenDir.Name = "btnOpenDir";
            this.btnOpenDir.Size = new System.Drawing.Size(94, 32);
            this.btnOpenDir.TabIndex = 3;
            this.btnOpenDir.Text = "查看文件";
            this.btnOpenDir.UseVisualStyleBackColor = true;
            this.btnOpenDir.Click += new System.EventHandler(this.btnOpenDir_Click);
            // 
            // btnMoveUp
            // 
            this.btnMoveUp.Location = new System.Drawing.Point(785, 141);
            this.btnMoveUp.Name = "btnMoveUp";
            this.btnMoveUp.Size = new System.Drawing.Size(33, 42);
            this.btnMoveUp.TabIndex = 6;
            this.btnMoveUp.Text = "上移";
            this.btnMoveUp.UseVisualStyleBackColor = true;
            this.btnMoveUp.Click += new System.EventHandler(this.btnMoveUp_Click);
            // 
            // btnMoveDown
            // 
            this.btnMoveDown.Location = new System.Drawing.Point(785, 224);
            this.btnMoveDown.Name = "btnMoveDown";
            this.btnMoveDown.Size = new System.Drawing.Size(33, 42);
            this.btnMoveDown.TabIndex = 6;
            this.btnMoveDown.Text = "下移";
            this.btnMoveDown.UseVisualStyleBackColor = true;
            this.btnMoveDown.Click += new System.EventHandler(this.btnMoveDown_Click);
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(836, 724);
            this.Controls.Add(this.btnMoveDown);
            this.Controls.Add(this.btnMoveUp);
            this.Controls.Add(this.groupBox2);
            this.Controls.Add(this.groupBox1);
            this.Controls.Add(this.btnMergePDF);
            this.Controls.Add(this.bntSelectDir);
            this.Controls.Add(this.button1);
            this.Controls.Add(this.txtFileDir);
            this.Controls.Add(this.label1);
            this.Name = "Form1";
            this.Text = "PDF文件合并";
            this.groupBox1.ResumeLayout(false);
            this.groupBox2.ResumeLayout(false);
            this.groupBox2.PerformLayout();
            this.ResumeLayout(false);
            this.PerformLayout();
 
        }
 
        #endregion
 
        private System.Windows.Forms.Label label1;
        private System.Windows.Forms.TextBox txtFileDir;
        private System.Windows.Forms.Button button1;
        private System.Windows.Forms.Button bntSelectDir;
        private System.Windows.Forms.Button btnMergePDF;
        private System.Windows.Forms.GroupBox groupBox1;
        private System.Windows.Forms.ListView listViewWorkLogs;
        private System.Windows.Forms.ColumnHeader columnHeader1;
        private System.Windows.Forms.ColumnHeader columnHeader2;
        private System.Windows.Forms.GroupBox groupBox2;
        private System.Windows.Forms.Label lblResult;
        private System.Windows.Forms.Button btnOpenDir;
        private System.Windows.Forms.Button btnMoveUp;
        private System.Windows.Forms.Button btnMoveDown;
    }
}

到此这篇关于基于C#实现PDF文件合并工具的文章就介绍到这了,更多相关C# PDF文件合并内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于基于C#实现PDF文件合并工具的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

C#实现将XML数据自动化地写入Excel文件

《C#实现将XML数据自动化地写入Excel文件》在现代企业级应用中,数据处理与报表生成是核心环节,本文将深入探讨如何利用C#和一款优秀的库,将XML数据自动化地写入Excel文件,有需要的小伙伴可以... 目录理解XML数据结构与Excel的对应关系引入高效工具:使用Spire.XLS for .NETC

Nginx更新SSL证书的实现步骤

《Nginx更新SSL证书的实现步骤》本文主要介绍了Nginx更新SSL证书的实现步骤,包括下载新证书、备份旧证书、配置新证书、验证配置及遇到问题时的解决方法,感兴趣的了解一下... 目录1 下载最新的SSL证书文件2 备份旧的SSL证书文件3 配置新证书4 验证配置5 遇到的http://www.cppc

python版本切换工具pyenv的安装及用法

《python版本切换工具pyenv的安装及用法》Pyenv是管理Python版本的最佳工具之一,特别适合开发者和需要切换多个Python版本的用户,:本文主要介绍python版本切换工具pyen... 目录Pyenv 是什么?安装 Pyenv(MACOS)使用 Homebrew:配置 shell(zsh

Nginx之https证书配置实现

《Nginx之https证书配置实现》本文主要介绍了Nginx之https证书配置的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起... 目录背景介绍为什么不能部署在 IIS 或 NAT 设备上?具体实现证书获取nginx配置扩展结果验证

C#如何在Excel文档中获取分页信息

《C#如何在Excel文档中获取分页信息》在日常工作中,我们经常需要处理大量的Excel数据,本文将深入探讨如何利用Spire.XLSfor.NET,高效准确地获取Excel文档中的分页信息,包括水平... 目录理解Excel中的分页机制借助 Spire.XLS for .NET 获取分页信息为什么选择 S

SpringBoot整合 Quartz实现定时推送实战指南

《SpringBoot整合Quartz实现定时推送实战指南》文章介绍了SpringBoot中使用Quartz动态定时任务和任务持久化实现多条不确定结束时间并提前N分钟推送的方案,本文结合实例代码给大... 目录前言一、Quartz 是什么?1、核心定位:解决什么问题?2、Quartz 核心组件二、使用步骤1

使用Redis实现会话管理的示例代码

《使用Redis实现会话管理的示例代码》文章介绍了如何使用Redis实现会话管理,包括会话的创建、读取、更新和删除操作,通过设置会话超时时间并重置,可以确保会话在用户持续活动期间不会过期,此外,展示了... 目录1. 会话管理的基本概念2. 使用Redis实现会话管理2.1 引入依赖2.2 会话管理基本操作

mybatis-plus分表实现案例(附示例代码)

《mybatis-plus分表实现案例(附示例代码)》MyBatis-Plus是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生,:本文主要介绍my... 目录文档说明数据库水平分表思路1. 为什么要水平分表2. 核心设计要点3.基于数据库水平分表注意事项示例

C#高效实现在Word文档中自动化创建图表的可视化方案

《C#高效实现在Word文档中自动化创建图表的可视化方案》本文将深入探讨如何利用C#,结合一款功能强大的第三方库,实现在Word文档中自动化创建图表,为你的数据呈现和报告生成提供一套实用且高效的解决方... 目录Word文档图表自动化:为什么选择C#?从零开始:C#实现Word文档图表的基本步骤深度优化:C

nginx跨域访问配置的几种方法实现

《nginx跨域访问配置的几种方法实现》本文详细介绍了Nginx跨域配置方法,包括基本配置、只允许指定域名、携带Cookie的跨域、动态设置允许的Origin、支持不同路径的跨域控制、静态资源跨域以及... 目录一、基本跨域配置二、只允许指定域名跨域三、完整示例四、配置后重载 nginx五、注意事项六、支持