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 命令流。考虑一个矩形的路径,角为贝塞尔曲线。有了这个,你需要在相同的上下文中绘制一个图像,或者在我的情况下是另一个 PDF,以获得剪辑效果。之后,您可以关闭并重置图形状态并成为一个好的 PDF 堆栈公民。但是,除了我上面的方法之外,我无法在 ABCPDF 中找到对目录中插入的 PDF 文档流的句柄,以便能够要求将其绘制在其他地方。

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

4

1 回答 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

但这只是一个“把戏”。

于 2018-09-17T15:42:02.957 回答