使用iTextSharp
,我想在PDF上加一個印章並使其透明。郵票上有各種顏色的文字(各種顏色),當整個圖像是透明的時候,這些文字變得難以閱讀,所以我不想讓彩色文字透明 - 只是郵票矩形中的白色背景。如何僅使PDF郵票的白色部分透明?
基於this answer,我嘗試下面的代碼:
public void addImage(PdfDictionary oldAnnot, string imagePath,
int pageNumber,iTextSharp.text.Rectangle someRectangle) {
Stream inputImageStream = new FileStream(imagePath, FileMode.Open, FileAccess.Read, FileShare.Read);
iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(inputImageStream);
PdfAnnotation pdfStamp = PdfAnnotation.CreateStamp(pdfStamper.Writer, someRectangle, null, Guid.NewGuid().ToString());
image.SetAbsolutePosition(0, 0);
PdfAppearance app = pdfStamper.GetOverContent(pageNumber).CreateAppearance(image.Width, image.Height);
app.SaveState();
PdfGState state = new PdfGState();
state.FillOpacity = 0.1f;
app.SetGState(state);
app.AddImage(image);
app.RestoreState();
pdfStamp.SetAppearance(PdfName.N, app);
pdfStamp.SetPage();
pdfStamper.AddAnnotation(pdfStamp, pageNumber);
}
然而,這使得圖像半透明的彩色部分。我怎樣才能使圖像的空白背景透明,並使彩色部分不透明?
謝謝。
你在這裏說話的圈子..你想在PDF上加一個印章,並使其透明,但不想讓顏色文本透明..所以你不想讓郵票透明..爲什麼你不只是編輯imagePath存在的圖像? –
否則,興趣點將成爲'Stream inputImageStream' ..您將改爲將該文件加載到GraphicContext中,相應地對其進行修改,並將結果流提供給'GetInstance'。 –
@BrettCaswell,在某些情況下,我們希望imagePath中的圖像不透明(例如,在深灰色背景上打印時),而在其他情況下,我們希望它透明。在這種情況下,我試圖用一種使它在Adobe中無法讀取的方式替換由福昕應用的透明郵票。你是說我不能使用白色郵票,並且必須以透明郵票開始? – sigil