iText FileStream 覆盖
iText FileStream overwirtes
我正在整理一些代码,这些代码将根据文件名前缀合并 pdf。我目前有以下代码获取文件名并且不合并,而是覆盖。我相信我的问题是 FileStream 放置,但如果我将它移出当前位置,我将无法获取文件名。有什么建议么?谢谢
static void CreateMergedPDFs()
{
string srcDir = "C:/PDFin/";
string resultPDF = "C:/PDFout/";
{
var files = System.IO.Directory.GetFiles(srcDir);
string prevFileName = null;
int i = 1;
foreach (string file in files)
{
string filename = Left(Path.GetFileName(file), 8);
using (FileStream stream = new FileStream(resultPDF + filename + ".pdf", FileMode.Create))
{
if (prevFileName == null || filename == prevFileName)
{
Document pdfDoc = new Document(PageSize.A4);
PdfCopy pdf = new PdfCopy(pdfDoc, stream);
pdfDoc.Open();
{
pdf.AddDocument(new PdfReader(file));
i++;
}
if (pdfDoc != null)
pdfDoc.Close();
Console.WriteLine("Merges done!");
}
}
}
}
}
}
}
您描述的行为与您的代码一致。您正在以错误的方式创建循环。
试试这个:
static void CreateMergedPDFs()
{
string srcDir = "C:/PDFin/";
string resultPDF = "C:/PDFout/merged.pdf";
FileStream stream = new FileStream(resultPDF, FileMode.Create);
Document pdfDoc = new Document(PageSize.A4);
PdfCopy pdf = new PdfCopy(pdfDoc, stream);
pdfDoc.Open();
var files = System.IO.Directory.GetFiles(srcDir);
foreach (string file in files)
{
pdf.AddDocument(new PdfReader(file));
}
pdfDoc.Close();
Console.WriteLine("Merges done!");
}
}
这样更有意义,不是吗?
如果您想根据前缀对文件进行分组,您应该阅读问题Group files in a directory based on their prefix
的答案
在这个问题的回答中,假设前缀和文件名的其余部分由 -
字符分隔。例如 1-abc.pdf
和 1-xyz.pdf
有前缀 1
而 2-abc.pdf
和 2-xyz.pdf
有前缀 2
。在您的情况下,您不清楚如何确定前缀,但很容易获得所有文件的列表,对它们进行排序并根据您想要确定前缀的任何算法对文件进行分组。
我正在整理一些代码,这些代码将根据文件名前缀合并 pdf。我目前有以下代码获取文件名并且不合并,而是覆盖。我相信我的问题是 FileStream 放置,但如果我将它移出当前位置,我将无法获取文件名。有什么建议么?谢谢
static void CreateMergedPDFs()
{
string srcDir = "C:/PDFin/";
string resultPDF = "C:/PDFout/";
{
var files = System.IO.Directory.GetFiles(srcDir);
string prevFileName = null;
int i = 1;
foreach (string file in files)
{
string filename = Left(Path.GetFileName(file), 8);
using (FileStream stream = new FileStream(resultPDF + filename + ".pdf", FileMode.Create))
{
if (prevFileName == null || filename == prevFileName)
{
Document pdfDoc = new Document(PageSize.A4);
PdfCopy pdf = new PdfCopy(pdfDoc, stream);
pdfDoc.Open();
{
pdf.AddDocument(new PdfReader(file));
i++;
}
if (pdfDoc != null)
pdfDoc.Close();
Console.WriteLine("Merges done!");
}
}
}
}
}
}
}
您描述的行为与您的代码一致。您正在以错误的方式创建循环。
试试这个:
static void CreateMergedPDFs()
{
string srcDir = "C:/PDFin/";
string resultPDF = "C:/PDFout/merged.pdf";
FileStream stream = new FileStream(resultPDF, FileMode.Create);
Document pdfDoc = new Document(PageSize.A4);
PdfCopy pdf = new PdfCopy(pdfDoc, stream);
pdfDoc.Open();
var files = System.IO.Directory.GetFiles(srcDir);
foreach (string file in files)
{
pdf.AddDocument(new PdfReader(file));
}
pdfDoc.Close();
Console.WriteLine("Merges done!");
}
}
这样更有意义,不是吗?
如果您想根据前缀对文件进行分组,您应该阅读问题Group files in a directory based on their prefix
的答案在这个问题的回答中,假设前缀和文件名的其余部分由 -
字符分隔。例如 1-abc.pdf
和 1-xyz.pdf
有前缀 1
而 2-abc.pdf
和 2-xyz.pdf
有前缀 2
。在您的情况下,您不清楚如何确定前缀,但很容易获得所有文件的列表,对它们进行排序并根据您想要确定前缀的任何算法对文件进行分组。