Shankrayya R Ответов: 1

Вертите PDF документ в несколько документов и переименовывайте их в зависимости от содержимого в PDF файле


Я хочу разделить PDF-документы на несколько PDF-документов, но не могу переименовать или сохранить как отдельный PDF-файл с содержимым внутри PDF, можно ли переименовать разделенные PDF-файлы на основе содержимого, доступного, в частности, в этих PDF-файлах ?

Что я уже пробовал:

Я создал форму windows и попробовал ниже код.
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;

namespace Gios.Pdf.SplitMerge
{
	public class ProjectForm : System.Windows.Forms.Form
	{
		private System.Windows.Forms.ListView listView1;
        private IContainer components;
        private System.Windows.Forms.Button buttonUp;
		private System.Windows.Forms.Button button1;
		private System.Windows.Forms.ColumnHeader columnHeader1;
		private System.Windows.Forms.ColumnHeader columnHeader2;
		private System.Windows.Forms.ColumnHeader columnHeader3;
        private System.Windows.Forms.GroupBox groupBox1;
        private System.Windows.Forms.SaveFileDialog saveFileDialog1;
        private System.Windows.Forms.Button buttonExecute;
        private ProgressBar progressBar1;
        private Label labelStatus;
        private Button buttonRemove;
        private Button buttonSplit;
        private FolderBrowserDialog folderBrowserDialog1;
        private OpenFileDialog openFileDialog1;
		private System.Windows.Forms.MainMenu mainMenu1;
		private System.Windows.Forms.MenuItem menuItem1;
		private System.Windows.Forms.MenuItem menuItemAddFiles;
		private System.Windows.Forms.MenuItem menuItem2;
		private System.Windows.Forms.LinkLabel linkLabel1;
		private Project Project;
		public ProjectForm(Project Project)
		{
			InitializeComponent();
			this.Project=Project;
			this.Text=this.Project.Name;
			//this.linkLabel1.Links.Add(0,this.linkLabel1.Text.Length,"http://www.paologios.com");
           
		}
     


		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if(components != null)
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}
		

		#region Windows Form Designer generated code
		/// <summary>
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// </summary>
		private void InitializeComponent()
		{
            this.components = new System.ComponentModel.Container();
            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ProjectForm));
            this.listView1 = new System.Windows.Forms.ListView();
            this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
            this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
            this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
            this.buttonUp = new System.Windows.Forms.Button();
            this.button1 = new System.Windows.Forms.Button();
            this.groupBox1 = new System.Windows.Forms.GroupBox();
            this.buttonRemove = new System.Windows.Forms.Button();
            this.buttonExecute = new System.Windows.Forms.Button();
            this.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog();
            this.progressBar1 = new System.Windows.Forms.ProgressBar();
            this.labelStatus = new System.Windows.Forms.Label();
            this.buttonSplit = new System.Windows.Forms.Button();
            this.folderBrowserDialog1 = new System.Windows.Forms.FolderBrowserDialog();
            this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
            this.mainMenu1 = new System.Windows.Forms.MainMenu(this.components);
            this.menuItem1 = new System.Windows.Forms.MenuItem();
            this.menuItemAddFiles = new System.Windows.Forms.MenuItem();
            this.menuItem2 = new System.Windows.Forms.MenuItem();
            this.linkLabel1 = new System.Windows.Forms.LinkLabel();
            this.groupBox1.SuspendLayout();
            this.SuspendLayout();
            // 
            // listView1
            // 
            this.listView1.AllowDrop = true;
            this.listView1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
            | System.Windows.Forms.AnchorStyles.Left) 
            | System.Windows.Forms.AnchorStyles.Right)));
            this.listView1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
            this.columnHeader3,
            this.columnHeader2,
            this.columnHeader1});
            this.listView1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.listView1.FullRowSelect = true;
            this.listView1.GridLines = true;
            this.listView1.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
            this.listView1.LabelEdit = true;
            this.listView1.Location = new System.Drawing.Point(8, 19);
            this.listView1.MultiSelect = false;
            this.listView1.Name = "listView1";
            this.listView1.Size = new System.Drawing.Size(599, 357);
            this.listView1.TabIndex = 0;
            this.listView1.UseCompatibleStateImageBehavior = false;
            this.listView1.View = System.Windows.Forms.View.Details;
            this.listView1.AfterLabelEdit += new System.Windows.Forms.LabelEditEventHandler(this.listView1_AfterLabelEdit);
            this.listView1.SelectedIndexChanged += new System.EventHandler(this.ListView1_SelectedIndexChanged);
            this.listView1.DragDrop += new System.Windows.Forms.DragEventHandler(this.listView1_DragDrop);
            this.listView1.DragOver += new System.Windows.Forms.DragEventHandler(this.listView1_DragOver);
            this.listView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.listView1_KeyDown);
            // 
            // columnHeader3
            // 
            this.columnHeader3.Text = "Name";
            this.columnHeader3.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
            this.columnHeader3.Width = 195;
            // 
            // columnHeader2
            // 
            this.columnHeader2.Text = "Page Count";
            this.columnHeader2.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
            this.columnHeader2.Width = 85;
            // 
            // columnHeader1
            // 
            this.columnHeader1.Text = "Path";
            this.columnHeader1.Width = 286;
            // 
            // buttonUp
            // 
            this.buttonUp.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
            this.buttonUp.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("buttonUp.BackgroundImage")));
            this.buttonUp.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
            this.buttonUp.Location = new System.Drawing.Point(615, 16);
            this.buttonUp.Name = "buttonUp";
            this.buttonUp.Size = new System.Drawing.Size(40, 40);
            this.buttonUp.TabIndex = 1;
            this.buttonUp.Click += new System.EventHandler(this.buttonUp_Click);
            // 
            // button1
            // 
            this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
            this.button1.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("button1.BackgroundImage")));
            this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
            this.button1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.button1.Location = new System.Drawing.Point(615, 64);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(40, 40);
            this.button1.TabIndex = 1;
            this.button1.Click += new System.EventHandler(this.button1_Click);
            // 
            // groupBox1
            // 
            this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
            | System.Windows.Forms.AnchorStyles.Left) 
            | System.Windows.Forms.AnchorStyles.Right)));
            this.groupBox1.Controls.Add(this.listView1);
            this.groupBox1.Controls.Add(this.buttonUp);
            this.groupBox1.Controls.Add(this.buttonRemove);
            this.groupBox1.Controls.Add(this.button1);
            this.groupBox1.Location = new System.Drawing.Point(8, 32);
            this.groupBox1.Name = "groupBox1";
            this.groupBox1.Size = new System.Drawing.Size(663, 384);
            this.groupBox1.TabIndex = 2;
            this.groupBox1.TabStop = false;
            this.groupBox1.Text = "PDF File List - You Can Use Drag and Drop to Add the Documents";
            // 
            // buttonRemove
            // 
            this.buttonRemove.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
            this.buttonRemove.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("buttonRemove.BackgroundImage")));
            this.buttonRemove.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
            this.buttonRemove.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.buttonRemove.Location = new System.Drawing.Point(615, 139);
            this.buttonRemove.Name = "buttonRemove";
            this.buttonRemove.Size = new System.Drawing.Size(40, 40);
            this.buttonRemove.TabIndex = 1;
            this.buttonRemove.Click += new System.EventHandler(this.buttonRemove_Click);
            // 
            // buttonExecute
            // 
            this.buttonExecute.Enabled = false;
            this.buttonExecute.Location = new System.Drawing.Point(346, 0);
            this.buttonExecute.Name = "buttonExecute";
            this.buttonExecute.Size = new System.Drawing.Size(145, 24);
            this.buttonExecute.TabIndex = 2;
            this.buttonExecute.Text = "Merge Documents";
            this.buttonExecute.Visible = false;
            this.buttonExecute.Click += new System.EventHandler(this.buttonExecute_Click);
            // 
            // saveFileDialog1
            // 
            this.saveFileDialog1.DefaultExt = "pdf";
            this.saveFileDialog1.Filter = "PDF Documents (*.pdf)|*.pdf";
            this.saveFileDialog1.Title = "Choose the PDF Destination File";
            // 
            // progressBar1
            // 
            this.progressBar1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) 
            | System.Windows.Forms.AnchorStyles.Right)));
            this.progressBar1.Location = new System.Drawing.Point(88, 425);
            this.progressBar1.Name = "progressBar1";
            this.progressBar1.Size = new System.Drawing.Size(576, 21);
            this.progressBar1.Step = 1;
            this.progressBar1.TabIndex = 3;
            // 
            // labelStatus
            // 
            this.labelStatus.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
            this.labelStatus.AutoSize = true;
            this.labelStatus.Location = new System.Drawing.Point(5, 427);
            this.labelStatus.Name = "labelStatus";
            this.labelStatus.Size = new System.Drawing.Size(38, 13);
            this.labelStatus.TabIndex = 4;
            this.labelStatus.Text = "Ready";
            // 
            // buttonSplit
            // 
            this.buttonSplit.Enabled = false;
            this.buttonSplit.Location = new System.Drawing.Point(8, 2);
            this.buttonSplit.Name = "buttonSplit";
            this.buttonSplit.Size = new System.Drawing.Size(172, 24);
            this.buttonSplit.TabIndex = 2;
            this.buttonSplit.Text = "Split into Single Page Files";
            this.buttonSplit.Click += new System.EventHandler(this.buttonSplit_Click);
            // 
            // folderBrowserDialog1
            // 
            this.folderBrowserDialog1.Description = "Choose the Location for Splitting the Documents";
            // 
            // openFileDialog1
            // 
            this.openFileDialog1.DefaultExt = "pdf";
            this.openFileDialog1.Filter = "PDF Documents (*.pdf)|*.pdf";
            this.openFileDialog1.Multiselect = true;
            this.openFileDialog1.ShowReadOnly = true;
            this.openFileDialog1.Title = "Add PDF Files ...";
            // 
            // mainMenu1
            // 
            this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
            this.menuItem1,
            this.menuItem2});
            // 
            // menuItem1
            // 
            this.menuItem1.Index = 0;
            this.menuItem1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
            this.menuItemAddFiles});
            this.menuItem1.Text = "File";
            // 
            // menuItemAddFiles
            // 
            this.menuItemAddFiles.Index = 0;
            this.menuItemAddFiles.Text = "Add Files";
            this.menuItemAddFiles.Click += new System.EventHandler(this.menuItemAddFiles_Click);
            // 
            // menuItem2
            // 
            this.menuItem2.Index = 1;
            this.menuItem2.Text = "About";
            this.menuItem2.Click += new System.EventHandler(this.menuItem2_Click);
            // 
            // linkLabel1
            // 
            this.linkLabel1.Location = new System.Drawing.Point(528, 0);
            this.linkLabel1.Name = "linkLabel1";
            this.linkLabel1.Size = new System.Drawing.Size(144, 24);
            this.linkLabel1.TabIndex = 5;
            this.linkLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
            this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked);
            // 
            // ProjectForm
            // 
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(679, 449);
            this.Controls.Add(this.linkLabel1);
            this.Controls.Add(this.labelStatus);
            this.Controls.Add(this.buttonSplit);
            this.Controls.Add(this.buttonExecute);
            this.Controls.Add(this.progressBar1);
            this.Controls.Add(this.groupBox1);
            this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
            this.Menu = this.mainMenu1;
            this.Name = "ProjectForm";
            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
            this.Text = "ProjectForm";
            this.groupBox1.ResumeLayout(false);
            this.ResumeLayout(false);
            this.PerformLayout();

		}
		#endregion

		private void button1_Click(object sender, System.EventArgs e)
		{
            this.listView1.Focus();
            if (this.listView1.SelectedItems.Count > 0)
            {
                int i = this.listView1.SelectedIndices[0];
                if (i < this.listView1.Items.Count - 1)
                {
                    ListViewItem lvi = this.listView1.Items[i + 1];
                    this.listView1.Items.RemoveAt(i + 1);
                    this.listView1.Items.Insert(i, lvi);
                }
            }
		}
        private void buttonUp_Click(object sender, EventArgs e)
        {
            this.listView1.Focus();
            if (this.listView1.SelectedItems.Count > 0)
            {
                int i = this.listView1.SelectedIndices[0];
                if (i > 0)
                {
                    ListViewItem lvi = this.listView1.Items[i - 1];
                    this.listView1.Items.RemoveAt(i - 1);
                    this.listView1.Items.Insert(i, lvi);
                }
            }
        }
		private void listView1_DragOver(object sender, System.Windows.Forms.DragEventArgs e)
		{
			if (e.Data.GetData(DataFormats.FileDrop)!=null)
			{
				e.Effect=DragDropEffects.Copy;
			}
			else
			{
				e.Effect=DragDropEffects.None;
			}
		}

		private void listView1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
		{
			this.Add(e.Data.GetData(DataFormats.FileDrop) as string[]);			
		}
        private void Add(string[] files)
        {
			this.labelStatus.Text="Loading Files ...";
            foreach (string file in files)
            {
                if (file.ToLower().EndsWith(".pdf"))
                {
                    Application.DoEvents();
                    ProjectPart pp = new ProjectPart();
                    pp.ProgressEvent += new ProgressDelegate(psm_SmPageProcessedEvent);
                    pp.Load(file);
                    Application.DoEvents();
                    this.Project.Parts.Add(pp);
                    this.listView1.Items.Add(pp.ListViewItem);
                    Application.DoEvents();
                }
            }
            this.UpdateButtons();
            this.Ready();
        }

		private void Ready()
		{
            this.labelStatus.Text = "Ready";
			this.progressBar1.Value=0;
		}


        private void buttonExecute_Click(object sender, System.EventArgs e)
		{
            if (this.saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                Application.DoEvents();
				Stream output=new FileStream(this.saveFileDialog1.FileName,FileMode.Create,FileAccess.Write);
                PdfSplitterMerger psm = new PdfSplitterMerger(output);
				
                psm.ProgressEvent+=new ProgressDelegate(psm_SmPageProcessedEvent);
                this.progressBar1.Maximum = this.Project.TotalPages;
                this.progressBar1.Value = 0;
                this.labelStatus.Text = "Processing ...";
                Application.DoEvents();
                foreach (ListViewItem lvi in this.listView1.Items)
                {
                    this.listView1.Focus();
                    lvi.Selected = true;
                    Application.DoEvents();
                    ProjectPart pp = lvi.Tag as ProjectPart;
                    Application.DoEvents();
                    psm.Add(File.OpenRead(pp.path), pp.Pages);
                }
                Application.DoEvents();
                psm.Finish();
                this.Ready();
                Application.DoEvents();
            }            
		}

        void psm_SmPageProcessedEvent(int part, int total)
        {
            Application.DoEvents();
            this.progressBar1.Maximum = total;
            this.progressBar1.Value = part;
        }


        private void listView1_AfterLabelEdit(object sender, LabelEditEventArgs e)
        {
            if (e.Label!=null)
            {
                (this.listView1.Items[e.Item].Tag as ProjectPart).pages = e.Label;
            }
        }
        private void UpdateButtons()
        {
            this.buttonExecute.Enabled = this.listView1.Items.Count > 0;
            this.buttonSplit.Enabled = this.listView1.Items.Count > 0;
        }
        private void buttonRemove_Click(object sender, EventArgs e)
        {
             this.Remove();     
        }
		private void Remove()
		{
			if (this.listView1.SelectedIndices.Count > 0)
			{
				this.listView1.Focus();
				int i = this.listView1.SelectedIndices[0];
				this.listView1.Items.RemoveAt(i);
				if (this.listView1.Items.Count > 0)
				{
					if (i < this.listView1.Items.Count)
					{
						this.listView1.Items[i].Selected = true;
					}
					else
					{
						this.listView1.Items[this.listView1.Items.Count - 1].Selected = true;
					}
				}
				this.UpdateButtons();
				this.listView1.Focus();
			}
		}

        private void buttonSplit_Click(object sender, EventArgs e)
        {
            if (this.folderBrowserDialog1.ShowDialog() == DialogResult.OK)
            {
                string path = this.folderBrowserDialog1.SelectedPath;
				Application.DoEvents();
				int part=0;
				this.progressBar1.Maximum = this.Project.TotalPages;
					
				foreach (ListViewItem lvi in this.listView1.Items)
				{
					this.listView1.Focus();
					lvi.Selected = true;
					Application.DoEvents();
					ProjectPart pp = lvi.Tag as ProjectPart;
					int[] Pages=pp.Pages;
					foreach (int page in Pages)
					{
						this.progressBar1.Value = part;
						Application.DoEvents();
						string filename = Path.GetFileName(pp.path);
						filename = Regex.Replace(filename, @".pdf"
							, " - " + (page+1).ToString("00000") + ".pdf", RegexOptions.IgnoreCase);
						PdfSplitterMerger psm = new PdfSplitterMerger(File.OpenWrite(path+"\\"+filename));
						Application.DoEvents();
						psm.Add(File.OpenRead(pp.path),new int[]{page});
						Application.DoEvents();
						psm.Finish();
						Application.DoEvents();
						part++;
					}
				}
				Application.DoEvents();
				this.Ready();
            }
        }
		[STAThread]
		static void Main() 
		{
			Application.Run(new ProjectForm());
		}

		private void menuItemAddFiles_Click(object sender, System.EventArgs e)
		{
			if (this.openFileDialog1.ShowDialog()==DialogResult.OK)
			{
				this.Add(this.openFileDialog1.FileNames);
			}
		}

		private void menuItem2_Click(object sender, System.EventArgs e)
		{
			string s="Gios PDF Splitter And Merger v1.12";
			s+="\nThe First Open Source PDF Splitter and Merger Tool!";
			s+="\nCopyright 2005-2006 Paolo Gios";
			s+="\nhttp://www.paologios.com";
			MessageBox.Show(this,s,"About Gios PDF Splitter And Merger",MessageBoxButtons.OK
				,MessageBoxIcon.Information,MessageBoxDefaultButton.Button1);
		}

		private void listView1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
		{
			if (e.KeyCode==Keys.Delete)
			{
				this.Remove();
			}
		}

		private void linkLabel1_LinkClicked(object sender, System.Windows.Forms.LinkLabelLinkClickedEventArgs e)
		{
			System.Diagnostics.Process.Start(this.linkLabel1.Text);
		}

        private void ListView1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }
    }
}

EricERankin

Глядя на ваш buttonSplit_Click похоже, вы хотите сохранить каждую отдельную страницу в отдельный файл, не так ли?
В таком случае взгляните на этот пример того, как разделить PDF файл на C#, он генерирует PDF-файл для каждой страницы PDF.

1 Ответов

Рейтинг:
1

Shankrayya R

Я уже пробовал это, но не работал для моего требования

Simon_Whale

как это не работает?