合并在C#.NET使用iTextSharp的多个PDF [英] Merging multiple PDFs using iTextSharp in c#.net
本文介绍了合并在C#.NET使用iTextSharp的多个PDF的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
嗯,我试图合并多个PDF一个。
我没有给出错误时编译。我想先合并文档,但出了什么问题,因为我与表工作。
这是在 asp.net code-背后
如果(Button.Equals(previewWord)){ 字符串eventTemplate =使用Server.Mappath(/ ERAS /徽章/模板/ EventTemp+事件名称+名为.doc); 字符串单preVIEW =使用Server.Mappath(/ ERAS /徽章/模板/ previewSingle+事件名称+名为.doc); PDF格式的字符串preVIEW =使用Server.Mappath(/ ERAS /徽章/模板/ PDF previewSingle+事件名称+.PDF); 字符串previewPDFs =使用Server.Mappath(/ ERAS /徽章/模板/ previewPDFs+事件名称+.PDF); 如果(System.IO.File.Exists((字符串)eventTemplate))
{ 如果(vulGegevensIn ==真)
{
//这将创建一个Worddocument,并从数据库名称等填充
CreateWordDocument(vulGegevensIn,eventTemplate,单preVIEW,FALSE);
//这节省了单preview.doc为PDF @param地方PDF preVIEW的
CreatePDF(单preVIEW,PDF preVIEW);
//试图合并
的String [] previewsSmall =新的String [1];
previewsSmall [0] = PDF preVIEW;
PDFMergenITextSharp.MergeFiles(previewPDFs,previewsSmall);
}
//此处合并PDF文件...........................;
//这里
//这里没有//
// ...
}}
这是PDFMergenITextSharpClass
公共静态类PDFMergenITextSharp
{
公共静态无效MergeFiles(字符串destinationFile,字符串[]来源档案)
{ 尝试
{
INT F = 0;
//我们创建了一定的文档阅读器
PdfReader读卡器=新PdfReader(来源档案[F]);
//我们检索的总页数
INT N = reader.NumberOfPages;
//Console.WriteLine(\"There是+ N +,在原始文件页面);
//第1步:创建一个文件对象的
文档的文档=新的文件(reader.GetPageSizeWithRotation(1));
//第2步:我们创建侦听到文档中的作家
PdfWriter作家= PdfWriter.GetInstance(文件,新的FileStream(destinationFile,FileMode.Create));
//第3步:我们打开文档
document.Open();
PdfContentByte CB = writer.DirectContent;
PdfImportedPage页面;
INT转动;
//第4步:我们添加的内容
而(F< sourceFiles.Length)
{
INT I = 0;
而(I< N)
{
我++;
document.SetPageSize(reader.GetPageSizeWithRotation(I));
document.NewPage();
页= writer.GetImportedPage(读者,我);
旋转= reader.GetPageRotation(ⅰ);
如果(旋转== || 90旋转== 270)
{
cb.AddTemplate(页面,0,-1f,1F,0,0,reader.GetPageSizeWithRotation(ⅰ).Height);
}
其他
{
cb.AddTemplate(页面,1F,0,0,1F,0,0);
}
//Console.WriteLine(\"Processed网页+ I);
}
˚F++;
如果(F< sourceFiles.Length)
{
读者=新PdfReader(来源档案[F]);
//我们检索的总页数
N = reader.NumberOfPages;
//Console.WriteLine(\"There是+ N +,在原始文件页面);
}
}
//第5步:我们关闭文档
document.Close();
}
赶上(例外五)
{
字符串STROB = e.Message;
}
}公共静态INT CountPageNo(字符串strFileName)
{
//我们创建了一定的文档阅读器
PdfReader读卡器=新PdfReader(strFileName);
//我们检索的总页数
返回reader.NumberOfPages;
}
}
解决方案
我找到了答案:
取而代之的是第2种方法,更文件添加到输入文件的第一个数组。
公共静态无效CombineMultiplePDFs(字符串[]文件名,串不过outFile)
{
//第1步:创建一个文件对象的
文档的文档=新的文件(); //第2步:我们创建侦听到文档中的作家
PdfCopy作家=新PdfCopy(文件,新的FileStream(不过outFile,FileMode.Create));
如果(作家== NULL)
{
返回;
} //第3步:我们打开文档
document.Open(); 的foreach(在文件名字符串文件名)
{
//我们创建了一定的文档阅读器
PdfReader读卡器=新PdfReader(文件名);
reader.ConsolidateNamedDestinations(); //第4步:我们添加的内容
的for(int i = 1; I< = reader.NumberOfPages;我++)
{
PdfImportedPage页= writer.GetImportedPage(读者,我);
writer.AddPage(页);
} PRAcroForm形式= reader.AcroForm;
如果(表格!= NULL)
{
writer.CopyAcroForm(读卡器);
} reader.Close();
} //第5步:我们关闭文档和作家
writer.Close();
document.Close();
}
Well i'm trying to merge multiple PDFs in to one.
I gives no errors while compiling. I tried to merge the docs first but that went wrong because I'm working with tables.
This is the asp.net code-behind
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//
//...
} }
This is the PDFMergenITextSharpClass
public static class 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;
}
}
解决方案
I found the answer:
Instead of the 2nd Method, add more files to the first array of input files.
public static void CombineMultiplePDFs(string[] fileNames, string outFile)
{
// step 1: creation of a document-object
Document document = new Document();
// step 2: we create a writer that listens to the document
PdfCopy writer = new PdfCopy(document, new FileStream(outFile, FileMode.Create));
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();
}
这篇关于合并在C#.NET使用iTextSharp的多个PDF的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文