我发现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命令流,该命令已定义了裁剪区域。考虑一个以贝塞尔曲线为角的矩形的路径。完成后,您需要在同一上下文中绘制图像,或者在我的情况下为另一个PDF,以获得剪切效果。之后,您可以关闭并重置图形状态,并成为良好的PDF堆栈公民。但是,除了我上面的方法之外,没有其他方法可以在ABCPDF中找到要处理目录中插入的PDF doc流的句柄,以便能够将其绘制在其他位置。
插入图像似乎是一个相似的过程,除了getinfo()函数可以发现像素图。嵌入式PDF似乎没有类似的方法。
答案 0 :(得分: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
但这只是一个“把戏”。