我写了一个程序,它读取PDF文件,然后显示一些有关它的信息。它工作正常。
class Program
{
static void Main(string[] args)
{
//some variables
string plabels = null;
string text2Search = "IX";
PdfReader reader = new PdfReader("file.pdf");
string[] labels = PdfPageLabels.GetPageLabels(reader);
for (int l = 0; l < labels.Length; l++)
{
plabels += labels[l] + "\n";
}
Console.WriteLine(plabels.IndexOf(text2Search, StringComparison.CurrentCultureIgnoreCase));
Console.ReadLine();
}
}
我还写了另一个程序来读取PDF文件并复制它。它也可以正常工作。
class Program
{
static void Main(string[] args)
{
byte[] bytes;
using (var ms = new MemoryStream())
{
using (var reader = new PdfReader("file.pdf"))
{
using (var stamper = new PdfStamper(reader, ms))
{
}
}
//grab the bytes before closing things out
bytes = ms.ToArray();
}
File.WriteAllBytes("output.pdf", bytes);
}
}
我不能做的是将这两个程序合二为一。
修改
感谢您的评论,我发现了一个错误。现在我的代码编译得很好,但是在运行时它会给出"Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object."
错误指向行for(int l = 0; l < labels.Length; l++)
。
class Program
{
static void Main(string[] args)
{
byte[] bytes;
using (var ms = new MemoryStream())
{
using (var reader = new PdfReader("file.pdf"))
{
//some variables
string plabels = null;
string text2Search = "IX";
string[] labels = PdfPageLabels.GetPageLabels(reader);
for(int l = 0; l < labels.Length; l++)
{
plabels += labels[l] + "\n";
}
Console.WriteLine(plabels.IndexOf(text2Search, StringComparison.CurrentCultureIgnoreCase));
Console.ReadLine();
using (var stamper = new PdfStamper(reader, ms))
{
}
}
//grab the bytes before closing things out
bytes = ms.ToArray();
}
File.WriteAllBytes("output.pdf", bytes);
}
}
答案 0 :(得分:0)
reader
已在using语句中定义。您无法在using块中重复使用该变量名称。更改其中一个reader
变量的名称或删除它。
using (PdfReader reader = new PdfReader("file.pdf"))
{
PdfReader reader = new PdfReader("file.pdf"); //is redundant.
}
答案 1 :(得分:0)
标签为空。您的PdfPageLabels.GetPageLabels(reader);
未返回值,请查看其中。没有贴出任何代码,所以我无法给你一个更清楚的答案。