C# iTextSharp可以编辑PDF,但无法看到新添加的对象

C# iTextSharp可以编辑PDF,但无法看到新添加的对象,c#,overlay,itextsharp,layer,C#,Overlay,Itextsharp,Layer,PDF文件似乎只有很少的图层,我无法在上面绘制新对象。我曾尝试使用PDFStamper和GetOverContent()使对象位于最顶端,但失败了,我不知道为什么。我只想将所有对象添加到PDF的最顶层。可能吗 如何在PDF的顶层添加所有新对象 这是我的密码: public static bool SaveFile(string srcFile, string DesFile, List<EditPage> pageLs, List<PdfObj> atOtherLs)

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;
            }
        }
    }
publicstaticboolsavefile(stringsrcfile、stringdesfile、List pageLs、List atOtherLs)
{
PdfReader reader=新的PdfReader(srcFile);
单据单据=新单据();
MemoryStream ms=新的MemoryStream();
PdfWriter writer=PdfWriter.GetInstance(doc,ms);
doc.Open();
PdfContentByte cb=writer.DirectContent;

对于(int i=1;i您使用了错误的类向现有PDF文档添加内容。请阅读,更具体地说,第6.3.1节。当然,示例是Java的,您使用的是iTextSharp,但是如果您需要C#示例,您可以随时在上找到它们

阅读您的代码示例,我不知道
GetEditPage()
WriteEditPage()
应该做什么。如果静态
ColumnText.ShowTextAligned()
不符合您的目的(例如,因为文本没有包装),然后您需要创建一个
ColumnText
实例,并将内容添加到该实例。

PDFStamper和GetOverContent,这将比您当前的代码更为正确。请提供说明问题的结果pdf,以供检查。