使用下面的代码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();
答案 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()
添加的文字是否可见取决于:
ShowText()
方法代替GetOverContent()
方法来避免这种情况。GetUnderContent()
方法获得了网页的大小,但我没有看到您使用该信息做任何事情。我不知道你在哪个坐标上显示文字。那也是错的。您需要确保在页面的可见区域内添加文本。此答案列出了您的代码的几个问题。如果您使用GetPageSizeWithRotation()
并更正X,Y坐标来简化代码会更好。