itext设置pdf的尺⼨_pdf–itext获取内容⼤⼩
英雄联盟妖姬为了实现你的⽬标,
triming to the “bounding box”. That’s exactly what I need
你实际上必须解决两个问题:
>您必须更改某些PDF⽂档的各个页⾯的裁剪框.
>您必须确定某个页⾯的边界框,即(我假设)包含页⾯所有可见内容的最⼩框(包含⽔平和垂直边).
⼴告1)更改各个页⾯的裁剪框
您不应该使⽤为该任务找到的代码.操作单个⽂档⼏乎总是最好使⽤PdfStamper⽽不是PdfWriter.
清朝皇帝列表及简介public byte[] ManipulatePdf(byte[] src)
微博举报{
PdfReader reader = new PdfReader(src);
int n = reader.NumberOfPages;
PdfDictionary pageDict;
PdfRectangle rect = new PdfRectangle(55, 76, 560, 816);
for (int i = 1; i <= n; i++)
{
pageDict = reader.GetPageN(i);
pageDict.Put(PdfName.CROPBOX, rect);
}
using (MemoryStream ms = new MemoryStream())
{
using (PdfStamper stamper = new PdfStamper(reader, ms))
递等式
{
}
return ms.ToArray();
}
胃病有哪些症状
}
(代码在内存中⼯作,即需要⼀个byte []并返回⼀个,但可以很容易地修改为在⽂件系统中⼯作.)
如您所见,您实际操作PdfReader中存在的PDF,然后仅使⽤PdfStamper存储更改的Pdf.
购书但是,在您的情况下,所有页⾯都没有固定的矩形,⽽是您必须确定每个页⾯的矩形…
Ad 2)确定某个页⾯的边界框
要确定边界框,您实际上必须解析整个页⾯内容并确定每个绘制元素的尺⼨.
不幸的是,iText(Sharp)只在⼀定程度上以⼀种舒适的⽅式⽀持它:它提供了⼀个内容解析框架,但是这个框架还没有处理开箱即⽤的⽮量图形.
PdfReaderContentParr parr = new PdfReaderContentParr(reader);
[...]
怎么治疗抑郁
TextMarginFinder finder = parr.ProcessContent(i, new TextMarginFinder());
通过finder.GetLlx(),finder.GetLly(),finder.GetUrx()和finder.GetUry()之后的取景器,在ProcessContent执⾏之后提供页⾯i的边界框的左下⾓和右上⾓的坐标(⽮量图形被忽略).您可以使⽤这些数据构建⼀个矩形,⽤于在上⾯的代码中提供
北京晚上有啥好玩的地方pageDict.Put(PdfName.CROPBOX,rect).
但是,如果您还需要考虑⽮量图形,则必须稍微扩展解析器命名空间类,以便为⽮量图形运算符创建解析事件,并且TextMarginFinder也要考虑这些事件.有关此内容的更多信息,请阅读this answer.