cmd

  1 using System;
  2 using System.Drawing;
  3 using System.Text;
  4 using Aspose.Pdf;
  5 using Aspose.Pdf.Text;
  6 
  7 namespace replacePDF
  8 {
  9 
 10     class Program
 11     {
 12         //以下注释中的代码用于打包单文件版
 13 
 14         //static Program() {
 15         //    AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
 16         //}
 17         
 18         //static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
 19         //{
 20         //    //获取加载失败的程序集的全名
 21         //    var assName = new System.Reflection.AssemblyName(args.Name).FullName;
 22         //    if (args.Name == "Aspose.Pdf, Version=10.1.0.0, Culture=neutral, PublicKeyToken=00725b1ceb58d0a9")
 23         //    {
 24         //        //读取资源
 25         //        using (var stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("replacePDF.Aspose.Pdf.dll"))
 26         //        {
 27         //            var bytes = new byte[stream.Length];
 28         //            stream.Read(bytes, 0, (int)stream.Length);
 29         //            return System.Reflection.Assembly.Load(bytes);//加载资源文件中的dll,代替加载失败的程序集
 30         //        }
 31         //    }
 32         //    throw new DllNotFoundException(assName);
 33         //}
 34 
 35         class textStyle
 36         {
 37             public bool hasFont = false;
 38             public Aspose.Pdf.Text.Font Font;
 39 
 40             public int Underline = -1;
 41             public int Index;
 42 
 43             public float Size = -1;
 44             public float LineSpacing = -1;
 45 
 46             public System.Drawing.Color Color = System.Drawing.Color.Empty;
 47             public System.Drawing.Color BgColor = System.Drawing.Color.Empty;
 48         }
 49     
 50         static void Usage()
 51         {
 52             Console.WriteLine(
 53                 "replacePDF - Replace text in Pdf.         version 1.0  by CrLf [bathome.net]
" +
 54                 "
" +
 55                 "Usage: replacePDF.exe  textSrc textDst fileSrc fileDst [/option value]
"+
 56                 "  textSrc         The text before replace
"+
 57                 "  textDst         The text after replace
"+
 58                 "  fileSrc         Specifies the source file to replace
"+
 59                 "  fileDst         Specifies the file to save
" +
 60                 "  /index num      Replace on the NO.? Matchs
" +
 61                 "  /font fontName  Specifies the font name, such as "Verdana"
"+
 62                 "  /size fontSize  Specifies the font size, such as 12.5
"+
 63                 "  /color color    Specifies the text color, such as "red" or "#ff0000"
"+
 64                 "  /bgcolor color  Specifies the background color, such as "red" or "#ff0000"
"+
 65                 "  /underline bool Enable text underline, such as "true" or "false"
"
 66                 );
 67             exit(0);
 68         }
 69 
 70         static int Replace(String textSrc, String textDst, String fileSrc, String fileDst, textStyle style)
 71         {
 72             int count_replace = 0,
 73                 count_success = 0,
 74                 count_fail = 0;
 75 
 76             Document pdfDocument = new Document(fileSrc);
 77 
 78             TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber(textSrc);
 79             //accept the absorber for all the pages
 80 
 81             //textFragmentAbsorber.TextSearchOptions.;
 82             
 83             pdfDocument.Pages.Accept(textFragmentAbsorber);
 84             //get the extracted text fragments
 85 
 86             TextFragmentCollection textFragmentCollection = textFragmentAbsorber.TextFragments;
 87             //loop through the fragments
 88             
 89             foreach (TextFragment textFragment in textFragmentCollection)
 90             {
 91                 try
 92                 {
 93                     count_replace ++;
 94 
 95                     if (style.Index>0 && style.Index == count_replace) continue;
 96 
 97                     //update text and other properties 
 98 
 99                     textFragment.Text = textDst;
100 
101                     if (style.hasFont)          textFragment.TextState.Font = style.Font;
102                     if (style.Size >= 0)        textFragment.TextState.FontSize = style.Size;
103                     if (style.LineSpacing >= 0) textFragment.TextState.LineSpacing = style.LineSpacing;
104 
105                     if (style.Color != System.Drawing.Color.Empty)   textFragment.TextState.ForegroundColor = Aspose.Pdf.Color.FromRgb(style.Color);
106                     if (style.BgColor != System.Drawing.Color.Empty) textFragment.TextState.ForegroundColor = Aspose.Pdf.Color.FromRgb(style.BgColor);
107 
108                     if (style.Underline >= 0) textFragment.TextState.Underline = style.Underline > 0;
109 
110                     count_success ++;
111 
112                     Console.Error.WriteLine("* Replaced["+count_success+"]: Successfully on page "+textFragment.Page.Number);
113                 }
114                 catch (Exception e)
115                 {
116                     count_fail ++;
117                     Console.Error.WriteLine("* Error[" + count_fail + "]: " + e.Message);
118                 }
119             }
120 
121             pdfDocument.Save(fileDst);
122 
123             if (count_success != 0)
124             {
125                 Console.WriteLine("Success: "" + fileSrc + """);
126             }
127             else
128             {
129                 Console.WriteLine("Fail: "" + fileSrc + """);
130             }
131 
132             return count_fail != 0 ? 1 : 0;
133         }
134 
135         static void exit(int exitCode) {
136             Environment.Exit(exitCode);
137         }
138 
139         static void Main(string[] args)
140         {
141             String  textSrc = "",
142                     textDst = "",
143                     fileSrc = "",
144                     fileDst = "";
145 
146             textStyle style = new textStyle();
147 
148             if (args.Length >= 4)
149             {
150                 textSrc = args[0];
151                 textDst = args[1];
152 
153                 fileSrc = args[2];
154                 fileDst = args[3];
155 
156                 for (int i = 4; i < args.Length; i += 2)
157                 {
158                     String option = args[i].ToLower();
159                     String value;
160                     
161                     try
162                     {
163                         switch (option)
164                         {
165                             case "/help":
166 
167                             case "/?":
168                                 Usage();
169                                 break;
170                         }
171 
172                         if (i + 1 >= args.Length)
173                         {
174                             throw new Exception("Error: Wrong value "".");
175                         }
176                         else
177                         {
178                             value = args[i + 1];
179                         }
180 
181                     
182                         switch (option)
183                         {
184                             case "/font":
185                                 style.Font = FontRepository.FindFont(value);
186                                 style.hasFont = true;
187                                 break;
188 
189                             case "/size":
190                                 if (!float.TryParse(value, out style.Size) || style.Size <= 0)
191                                 {
192                                     throw new Exception("Error: Wrong value "" + value + "".");
193                                 }
194                                 break;
195                                 
196                             case "/index":
197                                 if (!int.TryParse(value, out style.Index) || style.Index <= 0)
198                                 {
199                                     throw new Exception("Error: Wrong value "" + value + "".");
200                                 }
201                                 break;
202 
203                             case "/height":
204                                 if (!float.TryParse(value, out style.LineSpacing) || style.LineSpacing <= 0)
205                                 {
206                                     throw new Exception("Error: Wrong value "" + value + "".");
207                                 }
208                                 break;
209                                 
210                             case "/color":
211                                 style.Color = System.Drawing.ColorTranslator.FromHtml(value);
212                                 break;
213 
214                             case "/bgcolor":
215                                 style.BgColor = System.Drawing.ColorTranslator.FromHtml(value);
216                                 break;
217 
218                             case "/underline":
219                                 if (value.ToLower() == "true")
220                                 {
221                                     style.Underline = 1;
222                                 }
223                                 else if (value.ToLower() == "false")
224                                 {
225                                     style.Underline = 0;
226                                 }
227                                 else
228                                 {
229                                     throw new Exception("Error: Wrong value "" + value + "".");
230                                 }
231                                 break;
232                                 
233                             default:
234                                 throw new Exception("Error: Unknow option "" + option + "".");
235                         }
236                     }
237                     catch (Exception e)
238                     {
239                         Console.Error.WriteLine("Error: " + e.Message);
240                         Environment.Exit(2);
241                     }
242                 }
243 
244                 try
245                 {
246                     int exitCode = Replace(textSrc, textDst, fileSrc, fileDst, style);
247                     Environment.Exit(exitCode);
248                 }
249                 catch (Exception e)
250                 {
251                     Console.Error.WriteLine("Error: " + e.Message);
252                 }
253             }
254             else {
255                 Usage();
256             }
257 
258         }
259     }
260 }
以下为 C# 源码,基于 .Net2.0,依赖 Aspose.Pdf.dll(2015年的10.1版),若要打包单文件版请自行引入 dll 资源,并将最开始处的注释取消
replacePDF - 替换PDF文字         version 1.0  by CrLf [bathome.net]

Usage: replacePDF.exe  textSrc textDst fileSrc fileDst [/option value]
  textSrc         替换前的文字
  textDst         替换后的文字
  fileSrc         来源的文件
  fileDst         保存的文件
  /index num      只替换第 N 个匹配项
  /font fontName  指定替换后的字体名,例如 "Verdana"
  /size fontSize  指定替换后的字号,例如 12.5
  /color color    指定文字颜色,例如 "red" 或 "#ff0000"
  /bgcolor color  指定背景颜色,例如 "red" 或 "#ff0000"
  /underline bool 指定是否加上下划线,例如 "true" 或 "false"

  

原文地址:https://www.cnblogs.com/luchaoshuai/p/9657499.html