最近打印电子发票时,由于公司打印机都是A4纸,打印一张发票用一张A4,太浪费了。
想到找一个合并多张发票打印在一张A4的小工具,网上找到的要么需要授权,要么到处弹广告。
作为程序员,那就自己弄一个吧。
于是实现了如下功能:
- 选择需要打印的多张发票pdf文件,合并成一个pdf文件。
- 用pdf阅读器工具打开pdf文件,打印时选择4合1打印,横版。刚好把4张发票打印到一张A4上。
主要代码:
引用dll:using Spire.Pdf;
/// <summary>
/// 选择文件操作
/// </summary>
private void SelectPdfFile()
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "pdf文件(*.pdf)|*.pdf";
openFileDialog.Multiselect = true;
if(openFileDialog.ShowDialog()==DialogResult.OK)
{
foreach (string fileName in openFileDialog.FileNames)
{
if (!this.listBox1.Items.Contains(fileName))
{
this.listBox1.Items.Add(fileName);
}
}
}
}
/// <summary>
/// 拖放pdf文件进入
/// </summary>
private void DragEnterPdf(DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.None;
}
}
private void DragDropPdf(DragEventArgs e)
{
String[] files = e.Data.GetData(DataFormats.FileDrop, false) as String[];
foreach (string fileName in files)
{
string extName = fileName.Substring(fileName.Length - 4, 4);
if (extName.ToUpper() == ".PDF")
{
if (!this.listBox1.Items.Contains(fileName))
{
this.listBox1.Items.Add(fileName);
}
}
}
}
/// <summary>
/// 合并文件操作
/// </summary>
private void mergePdf()
{
try
{
if (this.listBox1.Items.Count > 0)
{
string[] files = new string[this.listBox1.Items.Count];
for (int i = 0; i < this.listBox1.Items.Count; i++)
{
files[i] = this.listBox1.Items[i].ToString();
}
string outputFile = string.Format("{0}\\电子发票合并_{1}.pdf",
this.txtOutputPath.Text,
System.DateTime.Now.ToString("yyyyMMddHHmmss"));
PdfDocumentBase doc = PdfDocument.MergeFiles(files);
doc.Save(outputFile);
//doc.Save(outputFile, FileFormat.PDF);
//doc.SaveToDoc("test.doc");
System.Diagnostics.Process.Start(outputFile);
}
}
catch (Exception ex)
{
MessageBox.Show("合并操作错误:" + ex.Message, "pdf合并操作");
}
}
编译好的可执行文件下载
百度网盘:https://pan.baidu.com/s/1fkpS3NlPsKmmlGKQ8i0y_Q
提取码:asdc