PdfSharp"NullReferenceException"

勒克斯

新成员
已加入
2019年1月19日
留言内容
4
编程经验
1-3
你好,

我的问题是我的代码(使用PdfSharp)正在处理"NullReferenceException" at the point
outputDocument.AddPage(page);
我不知道为什么。您可以找到以下重要内容的代码片段:
C#:
public static void CreatePDFx(string path)
        {
                 // Files beinhaltet alle Dateien pro Patientenordner (Bezeichnungen) 

                string[] files = GetFiles(path);

                // Open the output document
                PdfDocument outputDocument = new PdfDocument();
                int numberOfDocs = 0;
                // Iterate files
                foreach (string file in files)
                {
                    // Open the document to import pages from it.
                    PdfDocument inputDocument = PdfReader.Open(file, PdfDocumentOpenMode.Import);
                    // Iterate pages
                    int count = inputDocument.PageCount;
                    for (int idx = 0; idx < count; idx++)
                    {
                        // Get the page from the external document...
                        PdfPage page = inputDocument.Pages[idx];
                        // ...and add it to the output document.
                        outputDocument.AddPage(page);
                    }
                }
}

 public static void StartWatchers()
        {
            List<FileSystemWatcher> watchers = new List<FileSystemWatcher>();
            string[] ward_folders = Directory.GetDirectories(@"C:\OfflineDocuments\");
            watchers.Add(MyWatcherFatory(@"C:\OfflineDocuments\"));
            //Fehlerhaft
            int j = 0;
            foreach (string ward_folder in ward_folders)
            {
                
                j++;
          
                string[] pat_folders = Directory.GetDirectories(ward_folder);
                int i = 0;
                
                foreach (string pat_folder in pat_folders)
                {
                    
                    CreatePDFx(pat_folder);
                    i++;
                }
                foreach (FileSystemWatcher watcher in watchers)
                {
                    watcher.EnableRaisingEvents = true; ;
                    i++;
                }
        
            }
        }

提前致谢!
 
Last edited:

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,524
地点
悉尼,澳大利亚
编程经验
10+
在该行上放置一个断点,并确认'outputDocument'不为null。您可能应该对“页面”执行相同的操作。如果两个都不为空,请查看该异常的堆栈跟踪,以准确了解异常的实际位置。
 

勒克斯

新成员
已加入
2019年1月19日
留言内容
4
编程经验
1-3
堆栈跟踪显示以下内容:

PdfSharp.dll!PdfSharp.Pdf.PdfDocument.Catalog.get()Zeile 793 C#
PdfSharp.dll!PdfSharp.Pdf.PdfDocument.AddPage(PdfSharp.Pdf.PdfPage页面)Zeile 829 C#
Combine_rescue_pdf.exe!combine_rescue_pdf.CombinePDF.CreatePDFx(string path)Zeile 162 C#
Combine_rescue_pdf.exe!combine_rescue_pdf.CombinePDF.StartWatchers()Zeile 244 C#
Combine_rescue_pdf.exe!combine_rescue_pdf.CombinePDF.OnStart(string [] args)Zeile 307 C#

异常将在函数目录中抛出(来自PdfSharp):


PdfSharp的以下功能调用目录:
/// <summary>
///将指定的页面添加到此文档。如果页面来自外部文档,
///它将导入到此文档中。在这种情况下,返回的页面不一样
///指定的对象。
/// </summary>
公共PdfPage AddPage(PdfPage页面)
{
if (!CanModify)
抛出新的InvalidOperationException(PSSR.CannotModify);
返回Catalog.Pages.Add(page);
}

///<summary>
///获取当前文档的PdfCatalog。
/// </summary>
内部PdfCatalog目录
{
得到{return _catalog? (_catalog = _trailer.Root); }
}
PdfCatalog _catalog; //一旦创建就永远不会改变

你有什么想法,我能做什么?
 

勒克斯

新成员
已加入
2019年1月19日
留言内容
4
编程经验
1-3
那是一个好主意!我有它的睾丸,可悲的是它遇到了同样的异常..这个简单的程序:
using PdfSharp.Drawing;
namespace PdfSharp
{
    class Program
    {
        static void Main(string[] args)
        {
            // Create a new PDF document
            PdfSharp.Pdf.PdfDocument document = new PdfSharp.Pdf.PdfDocument();
            // Create an empty page
            PdfSharp.Pdf.PdfPage page = document.AddPage();
            // Save the document...
            string filename = "HelloWorld.pdf";
            document.Save(filename);
            // ...and start a viewer.
            //Process.Start(filename);
        }
    }
}

你有什么想法,我在做什么错? :/ 提前致谢。
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,524
地点
悉尼,澳大利亚
编程经验
10+
我从来没有使用过PdfSharp组件,也几乎没有使用过PDF,所以我不确定问题可能是什么,但是我将研究Catalog属性以查看其作用以及应如何初始化。根据代码,看来“ _trailer”字段必须为空,因此您需要找出原因。
 

勒克斯

新成员
已加入
2019年1月19日
留言内容
4
编程经验
1-3
我从来没有使用过PdfSharp组件,也几乎没有使用过PDF,所以我不确定问题可能是什么,但是我将研究Catalog属性以查看其作用以及应如何初始化。根据代码,看来“ _trailer”字段必须为空,因此您需要找出原因。

嗨,jmcilhinney,

感谢您的回复!我已经通过创建新的Pdfsharp.dll解决了该问题。你的想法"trailer"带我进入主题: //stackoverflow.com/questions...when-adding-password-to-pdf/38593235#38593235 但这已经包括在内。但是现在通过创建一个新的DLL,它可以工作了。

周末愉快!
 
最佳 底部