簡體   English   中英

使用ABCPDF繪制另一個文檔作為帶有圓角的圖像

[英]Using ABCPDF draw another doc as an image with rounded corners

我發現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似乎沒有類似的方法。

我不知道您是否可以在執行“ 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

但這只是一個“把戲”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM