似乎 PDF 文件的图层很少,我无法绘制新的对象叠加。我曾尝试使用 PDFStamper 和 GetOverContent() 将对象置于最顶层,但失败了,我不知道为什么。我只想将所有对象添加到 PDF 的最顶层。可能吗?
如何在 PDF 的顶层添加所有新对象?
这是我的代码:
public static bool SaveFile(string srcFile, string DesFile, List<EditPage> pageLs, List<PdfObj> atOtherLs)
{
PdfReader reader = new PdfReader(srcFile);
Document doc = new Document();
MemoryStream ms = new MemoryStream();
PdfWriter writer = PdfWriter.GetInstance(doc, ms);
doc.Open();
PdfContentByte cb = writer.DirectContent;
for (int i = 1; i <= reader.NumberOfPages; i++)
{
iTextSharp.text.Rectangle ps = reader.GetPageSize(i);
PdfImportedPage page = writer.GetImportedPage(reader, i);
EditPage ep = GetEditPage(pageLs, atOtherLs, i - 1);
WriteEditePage(doc, cb, ps, ep);
}
reader.Close();
doc.Close();
File.WriteAllBytes(DesFile, ms.ToArray());
ms.Close();
return true;
}
public static void WriteEditePage(Document doc, PdfContentByte cb, Rectangle ps, EditPage ep)
{
for (int i = 0; i < ep.Objs.Count; i++)
{
if (ep.Objs[i].PdfType != PdfObjTypes.Gdi)
continue;
GdiObj gdi = ep.Objs[i] as GdiObj;
cb.SetColorStroke(new Color(gdi.Color));
cb.SetColorFill(new Color(gdi.Color));
cb.SetLineWidth(gdi.Thick / FV);
if (gdi.Dash != System.Drawing.Drawing2D.DashStyle.Solid)
{
cb.SetLineDash(2, 0.75f);
}
else
{
cb.SetLineDash(1);
}
switch (gdi.GdiType)
{
case GdiObjTypes.Points:
WritePoints(cb, ps, gdi as GdiPoint);
break;
case GdiObjTypes.Line:
WriteLine(cb, ps, gdi as GdiLine);
break;
case GdiObjTypes.Rectangle:
WriteRetangle(cb, ps, gdi as GdiRectangle);
break;
case GdiObjTypes.Ellipse:
WriteEllipse(cb, ps, gdi as GdiEllipse);
break;
case GdiObjTypes.Image:
WriteImage(cb, ps, gdi as GdiImage);
break;
case GdiObjTypes.Text:
WriteText(cb, ps, gdi as GdiText);
break;
}
}
}