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)只在一定程度上以一种舒适的方式支持它:它提供了一个内容解析框架,但是这个框架还没有处理开箱即用的矢量图形.

PdfReaderContentParser parser = new PdfReaderContentParser(reader);

[...]

TextMarginFinder finder = parser.ProcessContent(i, new TextMarginFinder());

通过finder.GetLlx(),finder.GetLly(),finder.GetUrx()和finder.GetUry()之后的取景器,在ProcessContent执行之后提供页面i的边界框的左下角和右上角的坐标(矢量图形被忽略).您可以使用这些数据构建一个矩形,用于在上面的代码中提供pageDict.Put(PdfName.CROPBOX,rect).

但是,如果您还需要考虑矢量图形,则必须稍微扩展解析器命名空间类,以便为矢量图形运算符创建解析事件,并且TextMarginFinder也要考虑这些事件.有关此内容的更多信息,请阅读this answer.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值