1


首先我想指出stackowerflow过去帮助我解决了很多问题,所以谢谢大家。但是现在我遇到了一个我还没有找到解决方案的问题,这让我发疯了。我不是以英语为母语的人,对于任何语言错误,我深表歉意。

所以这里是:

我正在用itextsharp图书馆(顺便说一句很棒的图书馆)生成pdf。我从某种 pdf 表单/模板开始,我正在向其中添加“填写”数据。我正在使用PdfReader阅读模板 pdf 并通过我获得的单个页面的校准PdfStamper方法。有了它,我正在添加我的文本/数据(并在每一页上使用)。我用 method 添加的大部分文本。一切正常,生成的 pdf 包含我的文本。问题开始于我必须添加“列”文本的地方。我用以下代码做到这一点:GetOverContent(pageNum)PdfContentBytePdfContentByteBeginTextEndTextShowTextAligned

ColumnText ct = new ColumnText(cb);//cb is PdfContentByte
Phrase p = new Phrase(txt, FontFactory.GetFont(DEFAULT_FONT, BaseFont.CP1250, true, font_size));
ct.SetSimpleColumn(p, x, y, x+width, y+height, 10, alignment);
ct.Go();
setDefaultFont();//sets font to PdfContentByte again with setFontAndSize and SetColorFill

使用此代码添加分栏文本 OK,但在此之后添加的文本(在同一页/相同PdfContentByteShowTextAligned在 Acrobat Reader 中不可见。

这是“有趣”的部分 - 使用 foxit 阅读器打开的同一个 pdf 文件中的文本很好/可见/可以。

ShowTextAligned因此添加后添加的文本ColumnText在 acrobat 阅读器中不可见,但在 foxit 阅读器中可见。这个问题存在于一个页面中,新页面会重置这个问题(PdfContentByte因为下一页是新的)。

我的解决方法是在ColumnText所有ShowTextAligned. 直到今天,当客户使用 acrobat reader 打印出生成的 pdf 时,它一直有效,在打印文档后,显示 pdf 包含错误的消息,应该联系 pdf 的作者。Adobe Reader 的版本是 10.1.1。问题不在客户电脑上,同样的事情发生在我的电脑上。

在研究了网络之后,我安装了 Adob​​e Acrodat Pro Trial,其中包含用于分析 pdf 的工具 Preflight(据我所知)。此工具输出警告“操作员的内容状态流无效”。在这里我被困住了。我相信问题存在于 addedColumnText中,因为没有它们生成的文档不会导致显示/打印问题,并且 Preflight 状态为“未发现问题”。

我可能遗漏了一些事实,问题出在我的代码中......

请帮助我,因为我已经没有想法了。我希望这篇文章有一天能帮助遇到同样问题的其他人。我无法附加示例 pdf,因为它包含敏感数据,但如果没有其他方法,我将重新创建场景/代码。

4

1 回答 1

2

因此,要回答我的问题/问题:使用 PdfContentByte 和使用方法写入 pdf 时,ShowTextAligned您必须BeginText在写入之前调用,完成后必须调用EndText. 所以我做了。但是如果你想添加一些其他元素(比如 ColumnText、Image 和可能的其他任何东西),你不能在调用EndText. 如果这样做,生成的 pdf 将是“有问题的”/损坏的。

所以在伪代码中是错误的:

BeginText();
ShowtextAligned();
AddImage();
ShowtextAligned();
EndText();

正确用法是:

BeginText();
ShowtextAligned();
EndText();
AddImage();
BeginText();
ShowtextAligned();
EndText();

我希望有一天这会对某个地方的人有所帮助。

于 2011-11-28T19:01:35.173 回答