0
看起來PDF文件有幾層,我不能繪製新的對象覆蓋。我試圖使用PDFStamper和GetOverContent()使對象成爲最上層,但失敗了,我不知道爲什麼。我只想將所有對象添加到PDF的最頂層。可能嗎?iTextSharp編輯一個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;
}
}
}
* PDFStamper和GetOverContent *會比您當前的代碼更正確。請提供說明檢查問題的結果pdf。 – mkl