我试图将安全的PDF转换为XPS并使用FreeSpire返回到PDF,然后使用iTextSharp进行组合.以下是我的代码片段,用于转换各种文件.
char[] delimiter = { '\\' }; string WorkDir = @"C:\Users\rwong\Desktop\PDF\Test"; Directory.SetCurrentDirectory(WorkDir); string[] SubWorkDir = Directory.GetDirectories(WorkDir); //convert items to PDF foreach (string subdir in SubWorkDir) { string[] Loan_list = Directory.GetFiles(subdir); for (int f = 0; f < Loan_list.Length - 1; f++) { if (Loan_list[f].EndsWith(".doc") || Loan_list[f].EndsWith(".DOC")) { Spire.Pdf.PdfDocument doc = new Spire.Pdf.PdfDocument(); doc.LoadFromFile(Loan_list[f],FileFormat.DOC); doc.SaveToFile((Path.ChangeExtension(Loan_list[f],".pdf")),FileFormat.PDF); doc.Close(); } . //other extension cases . . else if (Loan_list[f].EndsWith(".pdf") || Loan_list[f].EndsWith(".PDF")) { PdfReader reader = new PdfReader(Loan_list[f]); bool PDFCheck = reader.IsOpenedWithFullPermissions; reader.Close(); if (PDFCheck) { Console.WriteLine("{0}\\Full Permisions",Loan_list[f]); reader.Close(); } else { Console.WriteLine("{0}\\Secured",Loan_list[f]); Spire.Pdf.PdfDocument doc = new Spire.Pdf.PdfDocument(); string path = Loan_List[f]; doc.LoadFromFile(Loan_list[f]); doc.SaveToFile((Path.ChangeExtension(Loan_list[f],".xps")),FileFormat.XPS); doc.Close(); Spire.Pdf.PdfDocument doc2 = new Spire.Pdf.PdfDocument(); doc2.LoadFromFile((Path.ChangeExtension(Loan_list[f],FileFormat.XPS); doc2.SaveToFile(Loan_list[f],FileFormat.PDF); doc2.Close(); }
问题是我得到一个值不能为null的错误在doc.LoadFromFile(Loan_list [f]);我有字符串path = Loan_list [f];检查Loan_list [f]是否为空,但不是.我试图用名为path的变量替换Loan_list [f]参数,但是它也不会执行.我在较小规模的测试PDF转换工作(见下文)
string PDFDoc = @"C:\Users\rwong\Desktop\Test\Test\Test.PDF"; string XPSDoc = @"C:\Users\rwong\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种解决方案.
>获取不在PDF文档中的文档对象中的文档.然后可能会尝试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);
第二种方法是容易的,但是我建议您使用第一种方法,因为明显的原因,如文档将提供比流更好的可转换性.由于文档具有部分,段落,页面设置,文本,字体,需要做更好或精确的格式化所需的所有内容.