2017-03-15 3 views
1

저는 오랫동안이 문제로 고심하고 있습니다. 나는 단순히 iText7.NET을 사용하여 스탬프 기능을 구현하려고합니다. 우선이 문제는 투명성에서 비롯됩니다. 투명한 반대로 내가 이미지를 사용하는 경우 PDF가 각인됩니다, (투명 PNG로 그것을 시도)하지만, 배경 색상 블랙 : 관심 위해서iText7 : PDF 페이지 회전을 무시하는 방법

enter image description here

, 관련 코드입니다 다음 - 기존 문서에 스탬프 PDF를 병합

Rectangle location = new Rectangle(crop.GetLeft(),crop.GetBottom(),iWidth/4,iHeight/4); 

PdfStampAnnotation stamp = new PdfStampAnnotation(location).SetStampName(new PdfName("Logo")); 

PdfFormXObject xObj = new PdfFormXObject(new Rectangle(iWidth, iHeight)); 
PdfCanvas canvas = new PdfCanvas(xObj, pdfDoc); 
canvas.AddImage(img, 0, 0,iWidth, false); 
stamp.SetNormalAppearance(xObj.GetPdfObject()); 

stamp.SetFlags(PdfAnnotation.PRINT); 

pdfDoc.GetFirstPage().AddAnnotation(stamp); 
pdfDoc.Close(); 

을 문제를 해결하기위한 노력의 일환으로, 나는 어도비 스탬프 삽입으로 무엇을 모방하려고 노력했다. 뒤늦은 결과는 좋았지 만, 우표 문서를 PdfFormXObject으로 복사하면 병합 프로세스에서 회전을 고려하므로 결과적으로 0이 아닌 회전 값 (일반적으로 우연히 발생하는 스탬프 문서)이 발생합니다

// Document to be edited and documented to be merged in 
PdfDocument newDoc = new PdfDocument(reader, writer); 
PdfDocument srcDoc = new PdfDocument(new PdfReader(stampsrc)); 

// CropBox And Dimensions 
Rectangle crop = newDoc.GetFirstPage().GetCropBox(); 
float width = crop.GetWidth(); 
float height = crop.GetHeight(); 

// Create FormXObject and Canvas 
PdfFormXObject page = srcDoc.GetPage(1).CopyAsFormXObject(newDoc); 
//Extract Page Dimensions 
float xWidth = srcDoc.GetFirstPage().GetCropBox().GetWidth(); 
float xHeight = srcDoc.GetFirstPage().GetCropBox().GetHeight(); 

Rectangle location = new Rectangle(crop.GetLeft(), crop.GetBottom(), xWidth , xHeight); 

Debug.WriteLine(location.GetWidth()); 

PdfStampAnnotation stamp = new PdfStampAnnotation(location).SetStampName(new PdfName("Logo")); 
PdfCanvas canvas = new PdfCanvas(newDoc.GetFirstPage().NewContentStreamBefore(), newDoc.GetFirstPage().GetResources(), newDoc); 

// canvas.AddXObject(page,location.GetLeft(),location.GetBottom(),page.GetWidth()); 
stamp.SetNormalAppearance(page.GetPdfObject()); 
stamp.SetFlags(PdfAnnotation.PRINT); 
newDoc.GetFirstPage().AddAnnotation(stamp); 

srcDoc.Close(); 
newDoc.Close(); 

또 다른 방법을 사용하여 참여 : 잘못된 방향으로 배향 (또는됩니다) 검사로 인해 그렇지 인해

enter image description here

연관된 코드는 다음과 같습니다) 이성을 상실 비율에 심하게 잡아 얻을 것이다 CopyPageTo 메서드를 사용했지만 우표와 연결할 수 없기 때문에 바람직한 결과를 얻지 못했고 투명도를 포함하지 않았습니다. 따라서 볼 수 있듯이 두 문제 중 하나를 해결하려고 노력하는 사이에 붙어 있습니다. 회전에 대해 염려하지 않고 이미지 배경을 투명하게 유지하는 방법을 찾거나 병합 된 페이지의 회전을 방해합니다 (더 바람직 함).

또한, 나는 AffineTransform를를 사용하여 같은 낮은 수준의 조작과 같은 다른 옵션을 탐험하고 ConcatMatrix 방법을 한 - 나는 아직 잘 그들에 정통한 아니지만, 내 스탬프에 직접 적용 할 수없는 것 같다 대본? ConcatMatrix를 90도 회전에 해당하는 값 (0 -1 1 0 1 1)으로 생각했지만, 내 스탬프는 사라졌습니다. 마지막 숫자 쌍이 잘못되었다고 생각합니다.하지만 다시는 완전한 이해가 없으므로 소유권 주장을 할 수 없습니다.

시도했지만 (분명히 이해하지 못했지만) setIgnorePageRotationForContent 두 가지 문서 중 하나가 배치에 영향을 미치는지 확인할 수있는 방법이 있습니다. true 또는 false로 설정해도 결과는 변경되지 않았습니다.

추가 조언이 필요하십니까? 이 문제는 내가 소리를내는 것만 큼 어렵지 않은가? 이 문제를 직접 해결 한 온라인 토론을 찾을 수 없었습니다. 사전

에서

덕분에

+0

첫 번째 방법을 사용하려는 이미지를 공유 할 수 있습니까? 이 접근법은 일반적으로 정확하며 적어도 [this] (http://hydra-media.cursecdn.com/minecraft.gamepedia.com/8/85/Fizyplankton.png) 이미지를 위해 저에게 효과적입니다. –

+0

@AlexeySubach 제가 설명했듯이, 제 문제는 회전이 아니라 투명성입니다. 이미지에 회전 정보가 없으므로 예상대로 스탬프가 찍히지 만 배경이 투명하게 보이려고하는 이미지의 경우 피치가 검은 색으로 바뀝니다 (위 그림의 첫 번째 그림 참조). –

+0

나는 이해한다. 그리고 제가 언급 한 이미지는 투명도가있는 이미지이며 블랙이 아닌 것으로 예상대로 작동한다는 것을 의미합니다. –

답변

1

투명한 이미지를 추가하는 코드는 완벽하게 유효 실제로 PNG 이미지의 대부분을 작동합니다.

경우 다음과 같은 방법으로 명시 적으로 이미지 마스크를 설정할 수 있습니다, 어떤 이유로 작동하지 않습니다

// Circle mask 
byte circledata[] = {(byte) 0x3c, (byte) 0x7e, (byte) 0xff, 
      (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0x7e, 
      (byte) 0x3c}; 
ImageData mask = ImageDataFactory.Create(8, 8, 1, 1, circledata, null); 
mask.MakeMask(); 
mask.SetInverted(true); 
img.SetImageMask(mask); 

PdfCanvas canvas = new PdfCanvas(xObj, pdfDoc); 
canvas.AddImage(img, 0, 0, iWidth, false); 

또한 디스크에서 마스크를로드 할 수 있습니다.우표의 원래 이미지와 동일한 크기의 이미지를 만들고 해당 마스크 이미지의 투명도를 제공하십시오. 그 후, 당신은 마스크를로드 할 수 있으며, 상기와 유사한 방법으로 이미지로 설정 :

ImageData mask = ImageDataFactory.create(MASK_PATH); 
mask.MakeMask(); 
img.SetImageMask(mask); 

는 자세한 내용도 this 샘플을 참조하십시오.

관련 문제