缩小pdf页面的内容

对于我当前的项目,我需要获取pdf并缩小第一页的内容而不更改页面的整体大小,以便我可以向底部添加其他信息,而不会与任何预先存在的内容重叠。 有没有办法使用iTextSharp做到这一点? 我很感激你能给予的任何帮助!

您可以通过在页面内容流中添加转换矩阵来缩小页面内容,例如:

public void shrink(PdfStamper stamper, int page, float factor) { Rectangle crop = stamper.Reader.GetCropBox(page); float diffX = crop.Right * (1 - factor); float diffY = crop.Top * (1 - factor); PdfDictionary pageN = stamper.Reader.GetPageN(page); stamper.MarkUsed(pageN); PdfArray ar = null; PdfObject content = PdfReader.GetPdfObject(pageN.Get(PdfName.CONTENTS), pageN); if (content == null) return; if (content.IsArray()) { ar = new PdfArray((PdfArray)content); pageN.Put(PdfName.CONTENTS, ar); } else if (content.IsStream()) { ar = new PdfArray(); ar.Add(pageN.Get(PdfName.CONTENTS)); pageN.Put(PdfName.CONTENTS, ar); } else return; ByteBuffer out_p = new ByteBuffer(); out_p.Append(factor).Append(" 0 0 ").Append(factor).Append(' ').Append(diffX).Append(' ').Append(diffY).Append(" cm "); PdfStream stream = new PdfStream(out_p.ToByteArray()); ar.AddFirst(stamper.Writer.AddToBody(stream).IndirectReference); out_p.Reset(); } 

(此代码借用了PdfStamper UnderContent和OverContent生成。)

提示: 在检索页面的OverContent或UnderContent之前必须使用shrink。

你可以像这样使用它:

 [Test] public void ShrinkFirstPage() { string origFile = ...; string resultFile = ...; using (PdfReader reader = new PdfReader(origFile)) using (FileStream output = new FileStream(resultFile, FileMode.Create, FileAccess.Write)) using (PdfStamper stamper = new PdfStamper(reader, output)) { int page = 1; float factor = .9f; shrink(stamper, page, factor); Rectangle box = reader.GetCropBox(page); box.Top = box.Top - factor * box.Height; PdfContentByte cb = stamper.GetOverContent(page); cb.SetColorFill(BaseColor.YELLOW); cb.SetColorStroke(BaseColor.RED); cb.Rectangle(box.Left, box.Bottom, box.Width, box.Height); cb.FillStroke(); cb.SetColorFill(BaseColor.BLACK); ColumnText ct = new ColumnText(cb); ct.AddElement(new Paragraph("This is some text added to the front page of the front page of this document.")); ct.SetSimpleColumn(box); ct.Go(); } } 

从这个原始

原1

你得到

缩水1

并从此

原2

你得到

缩水2

注意:代码不考虑页面轮换。 如果您已旋转页面,则应相应地扩展shrink