C# iTextSharp可以编辑PDF,但无法看到新添加的对象
PDF文件似乎只有很少的图层,我无法在上面绘制新对象。我曾尝试使用PDFStamper和GetOverContent()使对象位于最顶端,但失败了,我不知道为什么。我只想将所有对象添加到PDF的最顶层。可能吗 如何在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)
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,以供检查。