【发布时间】:2017-03-21 07:04:53
【问题描述】:
我正在尝试获取所有图像 pdf 并在该图像上方写一些文本。我正在使用以下代码但收到 “无法访问关闭的文件”错误
private static void InsertTextToPdf(string sourceFileName, string newFileName)
{
var img = new ReadPDFContent.ImagePDF.MyImageRenderListener();
using (Stream pdfStream = new FileStream(sourceFileName, FileMode.Open))
using (Stream newpdfStream = new FileStream(newFileName, FileMode.Create, FileAccess.ReadWrite))
{
PdfReader pdfReader = new PdfReader(pdfStream);
PdfStamper pdfStamper = new PdfStamper(pdfReader, newpdfStream);
PdfContentByte pdfContentByte = pdfStamper.GetOverContent(1);
BaseFont baseFont = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1250, BaseFont.NOT_EMBEDDED);
pdfContentByte.SetColorFill(BaseColor.BLUE);
pdfContentByte.SetFontAndSize(baseFont, 8);
pdfContentByte.BeginText();
pdfContentByte.ShowTextAligned(PdfContentByte.ALIGN_CENTER, " ", 400, 600, 0);
Dictionary<string, System.Drawing.Image> images;
images = new Dictionary<string, System.Drawing.Image>();
using (var reader = new PdfReader(sourceFileName))
{
var parser = new iTextSharp.text.pdf.parser.PdfReaderContentParser(reader);
ImageRenderListener listener = null;
for (var i = 1; i <= reader.NumberOfPages; i++)
{
parser.ProcessContent(i, (listener = new ImageRenderListener()));
var index = 1;
if (listener.Images.Count > 0)
{
try
{
var image = iTextSharp.text.Image.GetInstance(pdfStream);
float xval = image.AbsoluteX;
float yval = image.AbsoluteY;
image.SetAbsolutePosition(xval, yval);
pdfContentByte.ShowText("rahul");
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
}
pdfContentByte.EndText();
pdfStamper.Close();
}
}
错误在以下行:
iTextSharp.text.Image.GetInstance(pdfStream);
在调试中我发现实际读取的文件,在 pdfreader 读取流后,seek 设置为 false。
【问题讨论】: