文件位置的字符串值为零,但存储值表示它不是
Value of a string for file's location is nil but a stored value says it isn't
我正在尝试使用 FreeSpire 将受保护的 PDF 转换为 XPS,然后再转换回 PDF,然后使用 iTextSharp 将它们合并。下面是我转换各种文件的代码片段。
char[] delimiter = { '\' };
string WorkDir = @"C:\Users\*******\Desktop\PDF\Test";
Directory.SetCurrentDirectory(WorkDir);
string[] SubWorkDir = Directory.GetDirectories(WorkDir);
//convert items to PDF
foreach (string subdir in SubWorkDir)
{
string[] samplelist = Directory.GetFiles(subdir);
for (int f = 0; f < samplelist.Length - 1; f++)
{
if (samplelist[f].EndsWith(".doc") || samplelist[f].EndsWith(".DOC"))
{
Spire.Pdf.PdfDocument doc = new Spire.Pdf.PdfDocument();
doc.LoadFromFile(sampleist[f], FileFormat.DOC);
doc.SaveToFile((Path.ChangeExtension(samplelist[f],".pdf")), FileFormat.PDF);
doc.Close();
}
. //other extension cases
.
.
else if (samplelist[f].EndsWith(".pdf") || sampleList[f].EndsWith(".PDF"))
{
PdfReader reader = new PdfReader(samplelist[f]);
bool PDFCheck = reader.IsOpenedWithFullPermissions;
reader.Close();
if (PDFCheck)
{
Console.WriteLine("{0}\Full Permisions", Loan_list[f]);
reader.Close();
}
else
{
Console.WriteLine("{0}\Secured", samplelist[f]);
Spire.Pdf.PdfDocument doc = new Spire.Pdf.PdfDocument();
string path = Loan_List[f];
doc.LoadFromFile(samplelist[f]);
doc.SaveToFile((Path.ChangeExtension(samplelist[f], ".xps")), FileFormat.XPS);
doc.Close();
Spire.Pdf.PdfDocument doc2 = new Spire.Pdf.PdfDocument();
doc2.LoadFromFile((Path.ChangeExtension(samplelist[f], ".xps")), FileFormat.XPS);
doc2.SaveToFile(samplelist[f], FileFormat.PDF);
doc2.Close();
}
问题是我在 doc.LoadFromFile(samplelist[f]);
中得到一个 Value cannot be null error
。我有 string path = sampleList[f];
来检查样本列表 [f] 是否为空,但事实并非如此。我试图用名为 path
的变量替换 samplelist[f]
参数,但它也没有通过。我在较小的范围内测试了它的 PDF 转换(见下文)
string PDFDoc = @"C:\Users\****\Desktop\Test\Test\Test.PDF";
string XPSDoc = @"C:\Users\****\Desktop\Test\Test\Test.xps";
//Convert PDF file to XPS file
PdfDocument doc = new PdfDocument();
doc.LoadFromFile(PDFDoc);
doc.SaveToFile(XPSDoc, FileFormat.XPS);
doc.Close();
//Convert XPS file to PDF
PdfDocument doc2 = new PdfDocument();
doc2.LoadFromFile(XPSDoc, FileFormat.XPS);
doc2.SaveToFile(PDFDoc, FileFormat.PDF);
doc2.Close();
我想了解为什么会出现此错误以及如何修复它。
您面临的问题有 2 种解决方案。
获取 Document
对象中不在 PDFDocument
中的文档。然后可能会尝试 SaveToFile
像这样的东西
Document document = new Document();
//Load a Document in document Object
document.SaveToFile("Sample.pdf", FileFormat.PDF);
你可以使用 Stream 做同样的事情
PdfDocument doc = new PdfDocument();
//Load PDF file from stream.
FileStream from_stream = File.OpenRead(Loan_list[f]);
//Make sure the Loan_list[f] is the complete path of the file with extension.
doc.LoadFromStream(from_stream);
//Save the PDF document.
doc.SaveToFile(Loan_list[f] + ".pdf",FileFormat.PDF);
第二种方法比较简单,但我建议您使用第一种方法,原因很明显,例如文档比流提供更好的可转换性。由于文档有部分、段落、页面设置、文本、字体,因此需要做更好或更精确的格式设置。
我正在尝试使用 FreeSpire 将受保护的 PDF 转换为 XPS,然后再转换回 PDF,然后使用 iTextSharp 将它们合并。下面是我转换各种文件的代码片段。
char[] delimiter = { '\' };
string WorkDir = @"C:\Users\*******\Desktop\PDF\Test";
Directory.SetCurrentDirectory(WorkDir);
string[] SubWorkDir = Directory.GetDirectories(WorkDir);
//convert items to PDF
foreach (string subdir in SubWorkDir)
{
string[] samplelist = Directory.GetFiles(subdir);
for (int f = 0; f < samplelist.Length - 1; f++)
{
if (samplelist[f].EndsWith(".doc") || samplelist[f].EndsWith(".DOC"))
{
Spire.Pdf.PdfDocument doc = new Spire.Pdf.PdfDocument();
doc.LoadFromFile(sampleist[f], FileFormat.DOC);
doc.SaveToFile((Path.ChangeExtension(samplelist[f],".pdf")), FileFormat.PDF);
doc.Close();
}
. //other extension cases
.
.
else if (samplelist[f].EndsWith(".pdf") || sampleList[f].EndsWith(".PDF"))
{
PdfReader reader = new PdfReader(samplelist[f]);
bool PDFCheck = reader.IsOpenedWithFullPermissions;
reader.Close();
if (PDFCheck)
{
Console.WriteLine("{0}\Full Permisions", Loan_list[f]);
reader.Close();
}
else
{
Console.WriteLine("{0}\Secured", samplelist[f]);
Spire.Pdf.PdfDocument doc = new Spire.Pdf.PdfDocument();
string path = Loan_List[f];
doc.LoadFromFile(samplelist[f]);
doc.SaveToFile((Path.ChangeExtension(samplelist[f], ".xps")), FileFormat.XPS);
doc.Close();
Spire.Pdf.PdfDocument doc2 = new Spire.Pdf.PdfDocument();
doc2.LoadFromFile((Path.ChangeExtension(samplelist[f], ".xps")), FileFormat.XPS);
doc2.SaveToFile(samplelist[f], FileFormat.PDF);
doc2.Close();
}
问题是我在 doc.LoadFromFile(samplelist[f]);
中得到一个 Value cannot be null error
。我有 string path = sampleList[f];
来检查样本列表 [f] 是否为空,但事实并非如此。我试图用名为 path
的变量替换 samplelist[f]
参数,但它也没有通过。我在较小的范围内测试了它的 PDF 转换(见下文)
string PDFDoc = @"C:\Users\****\Desktop\Test\Test\Test.PDF";
string XPSDoc = @"C:\Users\****\Desktop\Test\Test\Test.xps";
//Convert PDF file to XPS file
PdfDocument doc = new PdfDocument();
doc.LoadFromFile(PDFDoc);
doc.SaveToFile(XPSDoc, FileFormat.XPS);
doc.Close();
//Convert XPS file to PDF
PdfDocument doc2 = new PdfDocument();
doc2.LoadFromFile(XPSDoc, FileFormat.XPS);
doc2.SaveToFile(PDFDoc, FileFormat.PDF);
doc2.Close();
我想了解为什么会出现此错误以及如何修复它。
您面临的问题有 2 种解决方案。
获取
Document
对象中不在PDFDocument
中的文档。然后可能会尝试SaveToFile
像这样的东西Document document = new Document(); //Load a Document in document Object document.SaveToFile("Sample.pdf", FileFormat.PDF);
你可以使用 Stream 做同样的事情
PdfDocument doc = new PdfDocument(); //Load PDF file from stream. FileStream from_stream = File.OpenRead(Loan_list[f]); //Make sure the Loan_list[f] is the complete path of the file with extension. doc.LoadFromStream(from_stream); //Save the PDF document. doc.SaveToFile(Loan_list[f] + ".pdf",FileFormat.PDF);
第二种方法比较简单,但我建议您使用第一种方法,原因很明显,例如文档比流提供更好的可转换性。由于文档有部分、段落、页面设置、文本、字体,因此需要做更好或更精确的格式设置。