0

似乎 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;
            }
        }
    }
4

1 回答 1

0

您使用错误的类向现有 PDF 文档添加内容。请阅读我的书的第 6 章,更具体地说是第 6.3.1 节。当然,这些示例是用 Java 编写的,并且您使用的是 iTextSharp,但是如果您需要 C# 示例,您总是可以在Sourceforge上找到它们。

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

于 2013-07-28T13:13:13.390 回答