解决 使用WinForm使用Itext7创建PDF

LabProarw

成员
加入
2019年11月4日
消息
24
编程经验
1-3
这让我靠近边缘":-(在frmcreatepdf上是一个btn_generatepdf。下面的代码片段从Codegureu略微修改抛出a"null引用对象引用未设置为对象的实例"。错误被抛出"document.add(标题);"。所以'Document'是一个新的对象吗? “标题”也是一个新的段落对象吗?那么为什么这段代码不适合我?

提前致谢。

Create PDF:
        private void Btn_GeneratePDF_Click(object sender, EventArgs e)
        {
            String pdfDestination = "C:/users/rickw/source/repos/QC-Base/PDFs/example.pdf";
            PdfWriter myPDFwriter = new PdfWriter(pdfDestination);
            PdfDocument pdfDoc = new PdfDocument(myPDFwriter);
            Document document = new Document(pdfDoc);
            Paragraph header = new Paragraph("HEADER")
            .SetTextAlignment(TextAlignment.CENTER)
            .SetFontSize(20);
            document.add(标题);
            document.Close();
        }
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,893
地点
切萨皮克,va.
编程经验
10+
The only true way to find out is to use your debugger. When the exception is thrown, use the debugger to see if 文档 or if header is null.
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,893
地点
切萨皮克,va.
编程经验
10+
“标题”也是一个新的段落对象吗?
不必要。该行的完整代码是:
C#:
Paragraph header = new Paragraph("HEADER").SetTextAlignment(TextAlignment.CENTER).SetFontSize(20);

By the fluent interfaces convention, SetFont() should return the this reference, but bugs and typos do happen. Someone could have goofed.
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,893
地点
切萨皮克,va.
编程经验
10+
我不明白你的意思"is what is grayed".

请点击Visual Studio提出的例外详细信息,并复制并粘贴异常的完整Callstack(作为文本,而不是屏幕截图)
 

LabProarw

成员
加入
2019年11月4日
消息
24
编程经验
1-3
我不明白你的意思"is what is grayed".

请点击Visual Studio提出的例外详细信息,并复制并粘贴异常的完整Callstack(作为文本,而不是屏幕截图)
灰色是VS 2019 IDE选择突出显示“文档”这个词。以下是“复制详细信息”提供的。我不知道如何粘贴完整的Callstack ..我所能做的就是拍摄屏幕截图,详细信息,你不想要。

system.nullreferenceException.
HResult=0x80004003
消息=对象引用未设置为对象的实例。
Source=itext.io
StackTrace:
在iText.io.font.fontcache..cctor()

下面是箭头指向呼叫堆栈的地方。
iText.io.dll!iText.io.font.fontcache.fontcache()
 

约翰

C#论坛主持人
工作人员
加入
2011年4月23日
消息
1,159
地点
挪威
编程经验
10+
VS选项>调试,一般和支票"Enable Just My Code" - 然后再次尝试运行。
 

约翰

C#论坛主持人
工作人员
加入
2011年4月23日
消息
1,159
地点
挪威
编程经验
10+
这是默认设置,请参阅 使用我的代码调试用户代码 - Visual Studio
在这种情况下(尝试调试非用户代码时)该行被突出显示绿色(在链接文章中解释),这意味着它是在外部库(常见的)中处理的第一个机会异常。 VS调试器在此停止的原因是因为在异常设置中抛出时,将启用CLR异常NULLREFENCEEXCEPTION。
它换句话说不是问题,你应该使用默认设置来仅调试您自己的用户代码。
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,893
地点
切萨皮克,va.
编程经验
10+
*叹气*所以发生了什么,你有Visual Studio的设置停止 全部 例外 - 甚至可以由您带入的代码处理的异常。

当你转换到"Just My Code",调试器现在将忽略其他人代码的例外,除非它是未处理的。显然,在上面的情况下,您带入的库可以处理异常。

通常,写得良好的代码不会使用异常作为流量控制的手段,因此这应该是一个非问题。例外只能用于真正卓越的错误条件,而不是可以处理的错误。

不幸的是,一些代码没有用这种哲学写作。相反,他们使用异常来传达错误。在上面的情况下,它看起来像是抛出异常,以指示一个名为的内部数据结构"FontCache"别无法创造。
 

LabProarw

成员
加入
2019年11月4日
消息
24
编程经验
1-3
*叹气*所以发生了什么,你有Visual Studio的设置停止 全部 例外 - 甚至可以由您带入的代码处理的异常。

当你转换到"Just My Code",调试器现在将忽略其他人代码的例外,除非它是未处理的。显然,在上面的情况下,您带入的库可以处理异常。

通常,写得良好的代码不会使用异常作为流量控制的手段,因此这应该是一个非问题。例外只能用于真正卓越的错误条件,而不是可以处理的错误。

不幸的是,一些代码没有用这种哲学写作。相反,他们使用异常来传达错误。在上面的情况下,它看起来像是抛出异常,以指示一个名为的内部数据结构"FontCache"别无法创造。
非常感谢您的合理解释!我将在PDF上制作一个关于定位我的元素的新帖子。
 
最佳 底部