好吧,我正在尝试将多个PDF合并为一个。
编译时我没有给出任何错误。我尝试首先合并文档,但由于我正在使用表,因此出现了错误。
这是 asp.net背后的代码
if (Button.Equals("PreviewWord")) { String eventTemplate = Server.MapPath("/ERAS/Badges/Template/EventTemp" + EventName + ".doc"); String SinglePreview = Server.MapPath("/ERAS/Badges/Template/PreviewSingle" + EventName + ".doc"); String PDFPreview = Server.MapPath("/ERAS/Badges/Template/PDFPreviewSingle" + EventName + ".pdf"); String previewPDFs = Server.MapPath("/ERAS/Badges/Template/PreviewPDFs" + EventName + ".pdf"); if (System.IO.File.Exists((String)eventTemplate)) { if (vulGegevensIn == true) { //This creates a Worddocument and fills in names etc from database CreateWordDocument(vulGegevensIn, eventTemplate, SinglePreview, false); //This saves the SinglePreview.doc as a PDF @param place of PDFPreview CreatePDF(SinglePreview, PDFPreview); //Trying to merge String[] previewsSmall=new String[1]; previewsSmall[0] = PDFPreview; PDFMergenITextSharp.MergeFiles(previewPDFs, previewsSmall); } // merge PDFs here...........................; //here //no here// //... } }
这是PDFMergenITextSharpClass
公共静态类PDFMergenITextSharp {
public static void MergeFiles(string destinationFile, string[] sourceFiles) { try { int f = 0; // we create a reader for a certain document PdfReader reader = new PdfReader(sourceFiles[f]); // we retrieve the total number of pages int n = reader.NumberOfPages; //Console.WriteLine("There are " + n + " pages in the original file."); // step 1: creation of a document-object Document document = new Document(reader.GetPageSizeWithRotation(1)); // step 2: we create a writer that listens to the document PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(destinationFile, FileMode.Create)); // step 3: we open the document document.Open(); PdfContentByte cb = writer.DirectContent; PdfImportedPage page; int rotation; // step 4: we add content while (f < sourceFiles.Length) { int i = 0; while (i < n) { i++; document.SetPageSize(reader.GetPageSizeWithRotation(i)); document.NewPage(); page = writer.GetImportedPage(reader, i); rotation = reader.GetPageRotation(i); if (rotation == 90 || rotation == 270) { cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height); } else { cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0); } //Console.WriteLine("Processed page " + i); } f++; if (f < sourceFiles.Length) { reader = new PdfReader(sourceFiles[f]); // we retrieve the total number of pages n = reader.NumberOfPages; //Console.WriteLine("There are " + n + " pages in the original file."); } } // step 5: we close the document document.Close(); } catch (Exception e) { string strOb = e.Message; } } public static int CountPageNo(string strFileName) { // we create a reader for a certain document PdfReader reader = new PdfReader(strFileName); // we retrieve the total number of pages return reader.NumberOfPages; } }
我找到了答案:
代替第二种方法,将更多文件添加到第一个输入文件数组。
public static void CombineMultiplePDFs(string[] fileNames, string outFile) { // step 1: creation of a document-object Document document = new Document(); //create newFileStream object which will be disposed at the end using (FileStream newFileStream = new FileStream(outFile, FileMode.Create)) { // step 2: we create a writer that listens to the document PdfCopy writer = new PdfCopy(document, newFileStream ); if (writer == null) { return; } // step 3: we open the document document.Open(); foreach (string fileName in fileNames) { // we create a reader for a certain document PdfReader reader = new PdfReader(fileName); reader.ConsolidateNamedDestinations(); // step 4: we add content for (int i = 1; i <= reader.NumberOfPages; i++) { PdfImportedPage page = writer.GetImportedPage(reader, i); writer.AddPage(page); } PRAcroForm form = reader.AcroForm; if (form != null) { writer.CopyAcroForm(reader); } reader.Close(); } // step 5: we close the document and writer writer.Close(); document.Close(); }//disposes the newFileStream object }