UI优化:改名文档扫描王、去掉质量选项、预览放大、智能文件名

- 软件名称改为"文档扫描王"
- 去掉JPEG质量选项,改用PNG无损写入PDF
- 预览区域从685x190放大到710x440
- 窗口高度从600增到820
- 输出文件名:图片输入→时间戳.pdf,PDF输入→modify_原名.pdf
- 删除GetJpegCodec等不再需要的代码

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-19 23:50:12 +08:00
parent 38ce8627a5
commit 9a7a367a4f

View File

@@ -548,7 +548,7 @@ public static class PdfHelper
/// <summary>
/// 将多张图像保存为单个PDF
/// </summary>
public static void SaveImagesToPdf(List<Bitmap> images, string outputPath, int jpegQuality)
public static void SaveImagesToPdf(List<Bitmap> images, string outputPath)
{
Document doc = null;
PdfWriter writer = null;
@@ -573,11 +573,7 @@ public static class PdfHelper
byte[] imgBytes;
using (MemoryStream ms = new MemoryStream())
{
EncoderParameters ep = new EncoderParameters(1);
ep.Param[0] = new EncoderParameter(
System.Drawing.Imaging.Encoder.Quality, (long)jpegQuality);
ImageCodecInfo codec = GetJpegCodec();
bmp.Save(ms, codec, ep);
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
imgBytes = ms.ToArray();
}
@@ -595,15 +591,6 @@ public static class PdfHelper
}
}
private static ImageCodecInfo GetJpegCodec()
{
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();
for (int i = 0; i < codecs.Length; i++)
{
if (codecs[i].FormatID == ImageFormat.Jpeg.Guid) return codecs[i];
}
return null;
}
}
/// <summary>
@@ -614,7 +601,6 @@ public class ScannerForm : Form
private ListBox lstFiles;
private Button btnAddImages, btnAddPdf, btnRemove, btnClear;
private Button btnMoveUp, btnMoveDown, btnProcess;
private NumericUpDown nudQuality;
private ProgressBar progressBar;
private Label lblStatus;
private PictureBox picPreview;
@@ -629,8 +615,8 @@ public class ScannerForm : Form
private void InitUI()
{
this.Text = "文档扫描增强工具 v2";
this.Size = new System.Drawing.Size(720, 600);
this.Text = "文档扫描";
this.Size = new System.Drawing.Size(750, 820);
this.StartPosition = FormStartPosition.CenterScreen;
this.FormBorderStyle = FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
@@ -731,47 +717,26 @@ public class ScannerForm : Form
};
this.Controls.Add(btnMoveDown);
// JPEG质量
GroupBox grp = new GroupBox();
grp.Text = "输出设置";
grp.Location = new System.Drawing.Point(15, 222);
grp.Size = new System.Drawing.Size(685, 55);
grp.Font = new System.Drawing.Font("微软雅黑", 9f);
this.Controls.Add(grp);
// 提示
Label lblHint = new Label();
lblHint.Text = "(自动执行:透视矫正 → 倾斜校正 → 增强美化,一步到位)";
lblHint.Location = new System.Drawing.Point(15, 225);
lblHint.AutoSize = true;
lblHint.ForeColor = System.Drawing.Color.FromArgb(100, 100, 100);
lblHint.Font = new System.Drawing.Font("微软雅黑", 8f);
this.Controls.Add(lblHint);
Label lblQ = new Label();
lblQ.Text = "PDF图像质量";
lblQ.Location = new System.Drawing.Point(15, 23);
lblQ.AutoSize = true;
grp.Controls.Add(lblQ);
nudQuality = new NumericUpDown();
nudQuality.Location = new System.Drawing.Point(110, 20);
nudQuality.Size = new System.Drawing.Size(60, 25);
nudQuality.Minimum = 50;
nudQuality.Maximum = 100;
nudQuality.Value = 92;
grp.Controls.Add(nudQuality);
Label lblQH = new Label();
lblQH.Text = "(自动执行:透视矫正 → 倾斜校正 → 增强美化,一步到位)";
lblQH.Location = new System.Drawing.Point(180, 23);
lblQH.AutoSize = true;
lblQH.ForeColor = System.Drawing.Color.FromArgb(100, 100, 100);
lblQH.Font = new System.Drawing.Font("微软雅黑", 8f);
grp.Controls.Add(lblQH);
// 预览
// 预览(正方形)
Label lblPrev = new Label();
lblPrev.Text = "预览:";
lblPrev.Location = new System.Drawing.Point(15, 285);
lblPrev.Location = new System.Drawing.Point(15, 248);
lblPrev.AutoSize = true;
lblPrev.Font = new System.Drawing.Font("微软雅黑", 9f, System.Drawing.FontStyle.Bold);
this.Controls.Add(lblPrev);
picPreview = new PictureBox();
picPreview.Location = new System.Drawing.Point(15, 308);
picPreview.Size = new System.Drawing.Size(685, 190);
picPreview.Location = new System.Drawing.Point(15, 270);
picPreview.Size = new System.Drawing.Size(710, 440);
picPreview.SizeMode = PictureBoxSizeMode.Zoom;
picPreview.BorderStyle = BorderStyle.FixedSingle;
picPreview.BackColor = System.Drawing.Color.White;
@@ -779,20 +744,20 @@ public class ScannerForm : Form
// 底部
progressBar = new ProgressBar();
progressBar.Location = new System.Drawing.Point(15, 510);
progressBar.Size = new System.Drawing.Size(480, 25);
progressBar.Location = new System.Drawing.Point(15, 722);
progressBar.Size = new System.Drawing.Size(510, 25);
this.Controls.Add(progressBar);
lblStatus = new Label();
lblStatus.Text = "就绪 - 添加文件后点击处理";
lblStatus.Location = new System.Drawing.Point(15, 538);
lblStatus.Size = new System.Drawing.Size(480, 20);
lblStatus.Location = new System.Drawing.Point(15, 752);
lblStatus.Size = new System.Drawing.Size(510, 20);
lblStatus.ForeColor = System.Drawing.Color.DarkGray;
this.Controls.Add(lblStatus);
btnProcess = new Button();
btnProcess.Text = "一键处理并导出PDF";
btnProcess.Location = new System.Drawing.Point(510, 508);
btnProcess.Location = new System.Drawing.Point(540, 720);
btnProcess.Size = new System.Drawing.Size(190, 35);
btnProcess.Font = new System.Drawing.Font("微软雅黑", 10f, System.Drawing.FontStyle.Bold);
btnProcess.BackColor = System.Drawing.Color.FromArgb(0, 120, 215);
@@ -867,14 +832,24 @@ public class ScannerForm : Form
return;
}
// 默认输出文件名
string defaultName;
if (isPdfInput)
{
defaultName = "modify_" + Path.GetFileName(inputFiles[0]);
}
else
{
defaultName = DateTime.Now.ToString("yyyyMMddHHmmss") + ".pdf";
}
SaveFileDialog sfd = new SaveFileDialog();
sfd.Title = "保存处理后的PDF";
sfd.Filter = "PDF|*.pdf";
sfd.FileName = "scanned_output.pdf";
sfd.FileName = defaultName;
if (sfd.ShowDialog() != DialogResult.OK) return;
string outputPath = sfd.FileName;
int quality = (int)nudQuality.Value;
SetUI(false);
try
@@ -927,7 +902,7 @@ public class ScannerForm : Form
// 生成PDF
lblStatus.Text = "正在生成PDF...";
Application.DoEvents();
PdfHelper.SaveImagesToPdf(results, outputPath, quality);
PdfHelper.SaveImagesToPdf(results, outputPath);
// 清理
foreach (Bitmap b in sourceImages) b.Dispose();