使用ABCPDF绘制另一个doc作为带圆角的图像

问题描述 投票:0回答:1

我发现ABCPDF非常有能力。然而,到目前为止,我还没有找到一种方法将一个PDF绘制成另一个带有圆角的PDF - 直到现在。但是,我发现的方法取决于为插入的PDF流获取正确的PDF对象ID,这就是这个问题的原因。

知道ABCPDF的人会问为什么这是一个问题?将一个PDF嵌入到另一个PDF中的addImageDoc()函数不会返回PDF对象ID吗?否 - 它返回其他内容 - 插入的PDF很可能作为一个独立的对象进入文档目录,而返回的ID中的内容是引用它的对象。解压缩文档流似乎证实了这一点。

长话短说,在我的实验中,我发现我需要在流中插入一个'Do'调用,其目标是派生为:

imgObjId = addImageDoc(some pdf object)  // inserted off-page 

insert into stream "/Iabc<imgObjId + 1> Do"

例如,如果返回的imgObjId值为5,那么我需要它为6才能生成

/Iabc6 Do

问题:虽然这可以正常工作,但我依赖于在返回的值中添加一个,我想知道它会变得多么强大。或者有没有正确的方法来实现这一目标?

更多信息:我一直保持这个问题的简短,但读者可能想知道为什么上述问题很重要?因为要实现圆角,您需要构造一个PDF命令流,其中定义了一个裁剪区域。想想一个带有Bezier曲线的矩形路径。有了这个,你需要在同一个上下文中绘制一个图像,或者在我的情况下绘制另一个PDF,以获得剪切效果。之后,您可以关闭并重置图形状态,成为一个优秀的PDF堆栈公民。但是,除了上面的方法之外,我没有任何办法可以在ABCPDF中找到目录中插入的PDF文档流的句柄,以便能够要求在其他地方绘制它。

插入图像似乎是一个类似的过程,除了getinfo()函数可以发现像素图。嵌入式PDF似乎没有类似的方法。

abcpdf abcpdf9
1个回答
0
投票

我不知道你是否可以在执行“AddImageDoc”之前更改目标abcpdf矩形。

也许你可以做一个技巧,从源获取位图,通过更改边框进行编辑,以及添加到新文档。像这样的东西:

Dim oDoc As New WebSupergoo.ABCpdf10.Doc
Dim oImg As System.Drawing.Bitmap
oDoc.Read("D:\source.pdf")
oImg = oDoc.Rendering.GetBitmap() 
' image quality can be improved with .Rendering properties as 'AntiAliasImages', etc.
oDoc.Dispose()
oDoc = Nothing

Dim oGraph As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(oImg)
Dim gPath As New System.Drawing.Drawing2D.GraphicsPath
Dim oBrush As New System.Drawing.SolidBrush(System.Drawing.Color.Red) ' only to see the rectangle... white when be ready

gPath.AddRectangle(New System.Drawing.Rectangle(0, 0, oImg.Width, oImg.Height))

' 2 / 100 it's the percent factor for borders
Dim iLeftBorder As Integer = CInt(2 / 100 * (oImg.Width / 2))
Dim iTopBorder As Integer = CInt(2 / 100 * (oImg.Height / 2))
gPath.AddEllipse(New System.Drawing.Rectangle(iLeftBorder, iTopBorder, oImg.Width - (iLeftBorder * 2) - 1, oImg.Height - (iTopBorder * 2) - 1))

oGraph.FillPath(oBrush, gPath)
oBrush.Dispose()
oGraph.Dispose()
oDoc = New WebSupergoo.ABCpdf10.Doc
oDoc.AddImageBitmap(oImg, False)
oDoc.Save("D:\finalpath.pdf")
oDoc.Dispose()
oDoc = Nothing

但这只是一个“诡计”。

© www.soinside.com 2019 - 2024. All rights reserved.