PDF标记在没有标题信息或正文的页面中不起作用

时间:2014-04-19 09:07:02

标签: c# itextsharp

使用下面的代码pdf标记工作正常,但如果pdf页面没有标题信息或正文为空,则标记不起作用我的意思是pdfData.ShowText(strCustomMessage)无效。

//create pdfreader object to read sorce pdf
PdfReader pdfReader=new PdfReader(Server.MapPath("Input") + "/" + "input.pdf");
//create stream of filestream or memorystream etc. to create output file
FileStream stream = new FileStream(Server.MapPath("Output") + "/output.pdf",  FileMode.OpenOrCreate);
//create pdfstamper object which is used to add addtional content to source pdf file
PdfStamper pdfStamper = new PdfStamper(pdfReader,stream);
//iterate through all pages in source pdf
for (int pageIndex = 1; pageIndex <= pdfReader.NumberOfPages; pageIndex++)
{
//Rectangle class in iText represent geomatric representation... in this case, rectanle object would contain page geomatry
Rectangle pageRectangle = pdfReader.GetPageSizeWithRotation(pageIndex);
//pdfcontentbyte object contains graphics and text content of page returned by pdfstamper
PdfContentByte pdfData = pdfStamper.GetUnderContent(pageIndex);
//create fontsize for watermark
pdfData.SetFontAndSize(BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1252, BaseFont.NOT_EMBEDDED), 40);
//create new graphics state and assign opacity
PdfGState graphicsState = new PdfGState();
graphicsState.FillOpacity = 0.4F;
//set graphics state to pdfcontentbyte
pdfData.SetGState(graphicsState);
//set color of watermark
pdfData.SetColorFill(BaseColor.BLUE);
//indicates start of writing of text
pdfData.BeginText();
//show text as per position and rotation
pdfData.SetTextMatrix(pageRectangle.Width/2,pageRectangle.Height/2);                                                                                     pdfData.SetFontAndSize(BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED), 9);
string strCustomMessage="PDF Stamping Test"
pdfData.ShowText(strCustomMessage);
//call endText to invalid font set
pdfData.EndText();
}
//close stamper and output filestream
pdfStamper.Close();
stream.Close();

1 个答案:

答案 0 :(得分:0)

我认为你的问题是错误的。你的意思是当你说&#34; pdf页面没有标题信息或正文是空的&#34; ?因为那没有意义。

一些观察:我认为您正在使用过时版本的iTextSharp。 Read the FAQ找出为什么这是一个坏主意。

由于此错误,较新版本的iTextSharp将引发异常:

pdfData.BeginText();
//show text as per position and rotation
string strCustomMessage="PDF Stamping Test"
pdfData.ShowText(strCustomMessage);
//call endText to invalid font set
pdfData.EndText();

在这些行中,您违反了PDF参考:您在BT / ET序列中显示文本而未定义字体和大小。如果你使用了更新版本的iTextSharp,一个异常就会指出这一点。您需要使用SetFontAndSize()方法在<{1}} / BeginText()序列中移动该行。在文本对象之外使用它是非法的。

另外:您为什么要使用EndText() / BeginText()添加文字?这是 PDF专家的代码。阅读文档以了解如何使用EndText()ColumnText.ShowTextAligned()方法是为不熟悉PDF语法的开发人员编写的便捷方法。

ShowTextAligned()添加的文字是否可见取决于:

  • 页面的不透明度:假设您的网页包含扫描图片,您不会看到任何文字,因为您要在<<>下添加文字 / em>图像。使用ShowText()方法代替GetOverContent()方法来避免这种情况。
  • 页面上的位置:我看到您使用GetUnderContent()方法获得了网页的大小,但我没有看到您使用该信息做任何事情。我不知道你在哪个坐标上显示文字。那也是错的。您需要确保在页面的可见区域内添加文本。

此答案列出了您的代码的几个问题。如果您使用GetPageSizeWithRotation()并更正X,Y坐标来简化代码会更好。